swap reveals i need a better targeting
parent
6007c2f2ed
commit
f493a5e98c
|
|
@ -104,6 +104,14 @@ pub mod mon {
|
||||||
damage: 0,
|
damage: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn hit(&mut self, damage: i32) {
|
||||||
|
let cap = self.dex.new().hp;
|
||||||
|
self.damage = match self.damage + damage {
|
||||||
|
v if v < cap => v,
|
||||||
|
_ => cap,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
@ -160,11 +168,18 @@ pub mod battle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Move::Swap(to_idx) => {
|
||||||
|
todo!("not impl");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
self.new_turn();
|
self.new_turn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn teams(&self) -> Vec<Team> {
|
||||||
|
self.teams.iter().map(|t| t.clone()).collect()
|
||||||
|
}
|
||||||
|
|
||||||
fn new_turn(&mut self) {
|
fn new_turn(&mut self) {
|
||||||
self.q = vec![];
|
self.q = vec![];
|
||||||
}
|
}
|
||||||
|
|
@ -176,6 +191,7 @@ pub mod battle {
|
||||||
i,
|
i,
|
||||||
match &self.q[i] {
|
match &self.q[i] {
|
||||||
Move::Pass(_) => 0,
|
Move::Pass(_) => 0,
|
||||||
|
Move::Swap(_) => -10,
|
||||||
Move::Attack(w, _) => self.teams[w.team].mons[w.mon].mon.dex.new().spd,
|
Move::Attack(w, _) => self.teams[w.team].mons[w.mon].mon.dex.new().spd,
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
|
@ -194,10 +210,7 @@ pub mod battle {
|
||||||
v => v,
|
v => v,
|
||||||
};
|
};
|
||||||
|
|
||||||
w.damage = match w.damage + power {
|
w.hit(power);
|
||||||
v if v < w.dex.new().hp => v,
|
|
||||||
_ => w.dex.new().hp,
|
|
||||||
};
|
|
||||||
|
|
||||||
w
|
w
|
||||||
}
|
}
|
||||||
|
|
@ -263,8 +276,8 @@ pub mod battle {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Clone, Debug)]
|
||||||
struct Team {
|
pub struct Team {
|
||||||
mons: Vec<Instance>,
|
mons: Vec<Instance>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -284,7 +297,7 @@ pub mod battle {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
struct Instance {
|
pub struct Instance {
|
||||||
mon: mon::Instance,
|
mon: mon::Instance,
|
||||||
out: bool,
|
out: bool,
|
||||||
}
|
}
|
||||||
|
|
@ -333,5 +346,47 @@ pub mod battle {
|
||||||
pub enum Move {
|
pub enum Move {
|
||||||
Pass(Idx),
|
Pass(Idx),
|
||||||
Attack(Idx, Idx),
|
Attack(Idx, Idx),
|
||||||
|
Swap(Idx),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod mon_tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test() {
|
||||||
|
let mut my_mons = vec![
|
||||||
|
mon::Instance::roll(mon::Dex::Pika),
|
||||||
|
mon::Instance::roll(mon::Dex::Mari),
|
||||||
|
];
|
||||||
|
my_mons[0].hit(5);
|
||||||
|
let they_mons = vec![
|
||||||
|
mon::Instance::roll(mon::Dex::Mari),
|
||||||
|
mon::Instance::roll(mon::Dex::Mari),
|
||||||
|
mon::Instance::roll(mon::Dex::Mari),
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut engine = battle::Engine::new(my_mons, they_mons);
|
||||||
|
|
||||||
|
engine.enqueue(battle::Move::Attack(
|
||||||
|
battle::Idx { team: 1, mon: 0 },
|
||||||
|
battle::Idx { team: 0, mon: 0 },
|
||||||
|
));
|
||||||
|
engine.enqueue(battle::Move::Attack(
|
||||||
|
battle::Idx { team: 0, mon: 0 },
|
||||||
|
battle::Idx { team: 1, mon: 0 },
|
||||||
|
));
|
||||||
|
engine.exec();
|
||||||
|
|
||||||
|
engine.enqueue(battle::Move::Attack(
|
||||||
|
battle::Idx { team: 1, mon: 0 },
|
||||||
|
battle::Idx { team: 0, mon: 0 },
|
||||||
|
));
|
||||||
|
engine.enqueue(battle::Move::Swap(battle::Idx { team: 0, mon: 1 }));
|
||||||
|
engine.exec();
|
||||||
|
|
||||||
|
eprintln!("{:?}", engine.teams()[0]);
|
||||||
|
eprintln!("{:?}", engine.teams()[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue