diff --git a/server/src/game.rs b/server/src/game.rs index a3da8d37..0b68df23 100755 --- a/server/src/game.rs +++ b/server/src/game.rs @@ -349,15 +349,16 @@ impl Game { .collect::>(); // find their statuses with ticks - let ticks = all_cryps + let mut ticks = all_cryps .iter_mut() .flat_map( |c| c.effects .iter_mut() - .filter_map(|e| e.tick) - .collect::>()); + .filter_map(|e| e.tick)) + .collect::>(); // add them to the stack + self.stack.append(&mut ticks); self.stack.sort_unstable_by_key(|s| s.skill.speed()); self.stack.reverse(); @@ -725,6 +726,7 @@ mod tests { .learn(Skill::TestStun) .learn(Skill::TestTouch) .learn(Skill::TestBlock) + .learn(Skill::TestDrain) .learn(Skill::Block) .create(); @@ -734,6 +736,7 @@ mod tests { .learn(Skill::TestStun) .learn(Skill::TestTouch) .learn(Skill::TestBlock) + .learn(Skill::TestDrain) .learn(Skill::Block) .create(); @@ -892,4 +895,35 @@ mod tests { assert!(game.team_by_id(x_team.id).cryps[0].is_stunned() == false); 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); + } + } diff --git a/server/src/skill.rs b/server/src/skill.rs index 75eda67c..8fbbc95d 100755 --- a/server/src/skill.rs +++ b/server/src/skill.rs @@ -190,6 +190,7 @@ pub enum Skill { TestTouch, TestStun, TestBlock, + TestDrain, } impl Skill { @@ -272,6 +273,7 @@ impl Skill { Skill::TestTouch => None, Skill::TestStun => None, Skill::TestBlock => None, + Skill::TestDrain => None, } } @@ -355,6 +357,7 @@ impl Skill { Skill::TestTouch => 10, Skill::TestStun => 5, Skill::TestBlock => 10, + Skill::TestDrain => 10, } } @@ -449,6 +452,7 @@ impl Skill { Skill::TestTouch => (), Skill::TestStun => stun(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::Decay => 3, + Skill::Drain => 3, Skill::Triage => 3, Skill::TestBlock => 1,