getting there

This commit is contained in:
ntr 2019-04-29 18:03:15 +10:00
parent a8a000e1ff
commit b2bfe8cf2a
2 changed files with 35 additions and 3 deletions

View File

@ -175,6 +175,13 @@ impl Game {
fn skill_phase_start(mut self) -> Game {
self.phase_start = Utc::now();
for player in self.players.iter_mut() {
if player.skills_required() != 0 {
player.set_ready(false);
}
}
self.log.push("<Skill Phase>".to_string());
if ![Phase::Start, Phase::Resolve].contains(&self.phase) {
@ -236,6 +243,8 @@ impl Game {
panic!("{:?} unable to add pve mob skill {:?}", e, s);
},
}
self.player_ready(player_id).unwrap();
}
self
@ -1094,9 +1103,12 @@ mod tests {
assert!(game.player_by_id(y_player.id).unwrap().cryps[0].skill_on_cd(Skill::Stun).is_some());
assert!(game.player_by_id(x_player.id).unwrap().cryps[0].skill_on_cd(Skill::Block).is_none());
let _x_stun_id = game.add_skill(x_player.id, x_cryp.id, Some(y_cryp.id), Skill::TestTouch).unwrap();
game.add_skill(x_player.id, x_cryp.id, Some(y_cryp.id), Skill::TestTouch).unwrap();
game.add_skill(y_player.id, y_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap();
game.player_ready(x_player.id).unwrap();
game.player_ready(y_player.id).unwrap();
game = game.resolve_phase_start();
// should auto progress back to skill phase
@ -1108,6 +1120,9 @@ mod tests {
let _x_block_id = game.add_skill(x_player.id, x_cryp.id, Some(y_cryp.id), Skill::Stun).unwrap();
let _y_touch_id = game.add_skill(y_player.id, y_cryp.id, Some(x_cryp.id), Skill::TestTouch).unwrap();
game.player_ready(x_player.id).unwrap();
game.player_ready(y_player.id).unwrap();
game = game.resolve_phase_start();
assert!(game.player_by_id(x_player.id).unwrap().cryps[0].skill_on_cd(Skill::Stun).is_some());
@ -1127,6 +1142,9 @@ mod tests {
let _x_block_id = game.add_skill(x_player.id, x_cryp.id, None, Skill::TestParry).unwrap();
game.add_skill(y_player.id, y_cryp.id, Some(x_cryp.id), Skill::TestStun).unwrap();
game.player_ready(x_player.id).unwrap();
game.player_ready(y_player.id).unwrap();
game = game.resolve_phase_start();
// should not be stunned because of parry
@ -1158,6 +1176,9 @@ mod tests {
game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::Ruin).unwrap();
game.add_skill(x_player.id, y_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap();
game.player_ready(i_player.id).unwrap();
game.player_ready(x_player.id).unwrap();
assert!(game.skill_phase_finished());
game = game.resolve_phase_start();
@ -1205,7 +1226,9 @@ mod tests {
game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::Taunt).unwrap();
game.add_skill(x_player.id, y_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap();
assert!(game.skill_phase_finished());
game.player_ready(i_player.id).unwrap();
game.player_ready(x_player.id).unwrap();
game = game.resolve_phase_start();
assert!(game.resolved.len() == 4);
@ -1234,6 +1257,9 @@ mod tests {
game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap();
game.add_skill(x_player.id, y_cryp.id, Some(i_cryp.id), Skill::TestTouch).unwrap();
game.player_ready(i_player.id).unwrap();
game.player_ready(x_player.id).unwrap();
assert!(game.skill_phase_finished());
game = game.resolve_phase_start();
@ -1251,6 +1277,9 @@ mod tests {
game.add_skill(x_player.id, y_cryp.id, Some(j_cryp.id), Skill::TestTouch).unwrap();
assert!(game.add_skill(x_player.id, x_cryp.id, Some(i_cryp.id), Skill::TestTouch).is_err());
game.player_ready(i_player.id).unwrap();
game.player_ready(x_player.id).unwrap();
assert!(game.skill_phase_finished());
game = game.resolve_phase_start();

View File

@ -294,7 +294,10 @@ impl Instance {
game = game.start();
assert!(game.finished());
if !game.finished() {
panic!("game not finished {:?}", game)
}
let winner = match game.winner() {
Some(w) => w,
None => panic!("game has no winner {:?}", game),