I don't know what I'm doing and it rocks
This commit is contained in:
parent
62ce8d20c4
commit
ca10e900c8
115
src/battle.rs
Normal file
115
src/battle.rs
Normal file
|
@ -0,0 +1,115 @@
|
|||
use crate::unit::Unit;
|
||||
use crate::statistics::StatBlock;
|
||||
|
||||
pub enum Field {
|
||||
City,
|
||||
Forest,
|
||||
Plains,
|
||||
Building,
|
||||
Volcano,
|
||||
BrokenLands,
|
||||
Void,
|
||||
Chaos,
|
||||
NOWHERE,
|
||||
}
|
||||
|
||||
pub enum Weather {
|
||||
Sun,
|
||||
Rain,
|
||||
Sleet,
|
||||
Hail,
|
||||
Meteor,
|
||||
BrokenSky,
|
||||
Void,
|
||||
NONE,
|
||||
}
|
||||
|
||||
pub struct BattleUnit {
|
||||
unit: Unit,
|
||||
bufs: StatBlock,
|
||||
debufs: StatBlock,
|
||||
}
|
||||
impl BattleUnit {
|
||||
pub fn new(unit: Unit) -> Self {
|
||||
Self {
|
||||
unit,
|
||||
bufs: StatBlock::new_zero(),
|
||||
debufs: StatBlock::new_zero(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BattleTeam {
|
||||
front: [Option<BattleUnit>; 3],
|
||||
back: [Option<BattleUnit>; 3],
|
||||
}
|
||||
impl BattleTeam {
|
||||
pub fn new(front: [Option<BattleUnit>; 3], back: [Option<BattleUnit>; 3]) -> Self {
|
||||
Self {
|
||||
front,
|
||||
back,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Battle {
|
||||
view_team: BattleTeam,
|
||||
oppose_team: BattleTeam,
|
||||
field: Field,
|
||||
weather: Weather,
|
||||
}
|
||||
impl Battle {
|
||||
pub fn new(view_team: BattleTeam, oppose_team: BattleTeam, field: Field, weather: Weather) -> Self {
|
||||
Self {
|
||||
view_team,
|
||||
oppose_team,
|
||||
field,
|
||||
weather,
|
||||
}
|
||||
}
|
||||
pub fn bufs(&self) -> StatBlock {
|
||||
let mut sb = StatBlock::new_zero();
|
||||
match self.weather {
|
||||
Weather::BrokenSky => sb.add_magick(3),
|
||||
_ => (),
|
||||
};
|
||||
match self.field {
|
||||
Field::BrokenLands => sb.add_strength(3),
|
||||
Field::Chaos => {
|
||||
sb.add_intellect(5);
|
||||
sb.add_magick(5);
|
||||
},
|
||||
_ => ()
|
||||
};
|
||||
sb
|
||||
}
|
||||
pub fn debufs(&self) -> StatBlock {
|
||||
let mut sb = StatBlock::new_zero();
|
||||
match self.weather {
|
||||
Weather::Rain => sb.add_agility(-2),
|
||||
Weather::Sleet => sb.add_agility(-5),
|
||||
Weather::Hail => sb.add_defense(-2),
|
||||
Weather::Meteor => {
|
||||
sb.add_strength(-5);
|
||||
sb.add_defense(-5);
|
||||
sb.add_intellect(-5);
|
||||
},
|
||||
Weather::Sun => sb.add_magick(-1),
|
||||
_ => (),
|
||||
};
|
||||
match self.field {
|
||||
Field::Forest => sb.add_dexterity(-2),
|
||||
Field::Building => sb.add_agility(-2),
|
||||
Field::BrokenLands => sb.add_vitality(-5),
|
||||
Field::Chaos => {
|
||||
sb.add_defense(-10);
|
||||
sb.add_vitality(-10);
|
||||
sb.add_strength(-10);
|
||||
sb.add_dexterity(-10);
|
||||
},
|
||||
_ => (),
|
||||
};
|
||||
sb
|
||||
}
|
||||
//TODO: how to handle moves, move order, etc
|
||||
}
|
|
@ -4,3 +4,4 @@ pub mod statistics;
|
|||
pub mod unit;
|
||||
pub mod inventory;
|
||||
pub mod status;
|
||||
pub mod battle;
|
||||
|
|
|
@ -8,4 +8,6 @@ pub enum Status {
|
|||
Confuse, // chance to hit random target (self included)
|
||||
Stop, // miss turn
|
||||
Haste, // speed is doubled
|
||||
Faint, // close to death
|
||||
Dead, // dead, cannot be revived
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue