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>>();
// 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::<Vec<Cast>>());
.filter_map(|e| e.tick))
.collect::<Vec<Cast>>();
// 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);
}
}

View File

@ -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,