drain test

This commit is contained in:
ntr 2018-11-13 17:10:52 +11:00
parent 6cdecb2b37
commit bec35ca46b
2 changed files with 42 additions and 3 deletions

View File

@ -349,15 +349,16 @@ impl Game {
.collect::<Vec<Cryp>>(); .collect::<Vec<Cryp>>();
// find their statuses with ticks // find their statuses with ticks
let ticks = all_cryps let mut ticks = all_cryps
.iter_mut() .iter_mut()
.flat_map( .flat_map(
|c| c.effects |c| c.effects
.iter_mut() .iter_mut()
.filter_map(|e| e.tick) .filter_map(|e| e.tick))
.collect::<Vec<Cast>>()); .collect::<Vec<Cast>>();
// add them to the stack // add them to the stack
self.stack.append(&mut ticks);
self.stack.sort_unstable_by_key(|s| s.skill.speed()); self.stack.sort_unstable_by_key(|s| s.skill.speed());
self.stack.reverse(); self.stack.reverse();
@ -725,6 +726,7 @@ mod tests {
.learn(Skill::TestStun) .learn(Skill::TestStun)
.learn(Skill::TestTouch) .learn(Skill::TestTouch)
.learn(Skill::TestBlock) .learn(Skill::TestBlock)
.learn(Skill::TestDrain)
.learn(Skill::Block) .learn(Skill::Block)
.create(); .create();
@ -734,6 +736,7 @@ mod tests {
.learn(Skill::TestStun) .learn(Skill::TestStun)
.learn(Skill::TestTouch) .learn(Skill::TestTouch)
.learn(Skill::TestBlock) .learn(Skill::TestBlock)
.learn(Skill::TestDrain)
.learn(Skill::Block) .learn(Skill::Block)
.create(); .create();
@ -892,4 +895,35 @@ mod tests {
assert!(game.team_by_id(x_team.id).cryps[0].is_stunned() == false); assert!(game.team_by_id(x_team.id).cryps[0].is_stunned() == false);
println!("{:#?}", game.log); println!("{:#?}", game.log);
} }
#[test]
fn drain_test() {
let mut game = create_test_game();
let x_team = game.teams[0].clone();
let y_team = game.teams[1].clone();
let x_cryp = x_team.cryps[0].clone();
let y_cryp = y_team.cryps[0].clone();
let x_drain_id = game.add_skill(x_team.id, x_cryp.id, Some(y_team.id), Skill::TestDrain).unwrap();
let y_touch_id = game.add_skill(y_team.id, y_cryp.id, Some(x_team.id), Skill::TestTouch).unwrap();
game.target_phase_start();
game.add_target(x_team.id, x_cryp.id, y_touch_id).unwrap();
game.add_target(y_team.id, y_cryp.id, x_drain_id).unwrap();
game.resolve_phase_start();
game.add_skill(x_team.id, x_cryp.id, None, Skill::TestBlock).unwrap();
game.add_skill(y_team.id, y_cryp.id, None, Skill::TestBlock).unwrap();
game.target_phase_start();
assert!(game.resolved.iter().any(|r| r.skill == Skill::DrainTick));
println!("{:#?}", game);
}
} }

View File

@ -190,6 +190,7 @@ pub enum Skill {
TestTouch, TestTouch,
TestStun, TestStun,
TestBlock, TestBlock,
TestDrain,
} }
impl Skill { impl Skill {
@ -272,6 +273,7 @@ impl Skill {
Skill::TestTouch => None, Skill::TestTouch => None,
Skill::TestStun => None, Skill::TestStun => None,
Skill::TestBlock => None, Skill::TestBlock => None,
Skill::TestDrain => None,
} }
} }
@ -355,6 +357,7 @@ impl Skill {
Skill::TestTouch => 10, Skill::TestTouch => 10,
Skill::TestStun => 5, Skill::TestStun => 5,
Skill::TestBlock => 10, Skill::TestBlock => 10,
Skill::TestDrain => 10,
} }
} }
@ -449,6 +452,7 @@ impl Skill {
Skill::TestTouch => (), Skill::TestTouch => (),
Skill::TestStun => stun(cryp, target, log), Skill::TestStun => stun(cryp, target, log),
Skill::TestBlock => block(cryp, target, log), Skill::TestBlock => block(cryp, target, log),
Skill::TestDrain => drain(cryp, target, log),
}; };
} }
@ -459,6 +463,7 @@ impl Skill {
Skill::Block => 1, Skill::Block => 1,
Skill::Decay => 3, Skill::Decay => 3,
Skill::Drain => 3,
Skill::Triage => 3, Skill::Triage => 3,
Skill::TestBlock => 1, Skill::TestBlock => 1,