getting there
This commit is contained in:
parent
a8a000e1ff
commit
b2bfe8cf2a
@ -175,6 +175,13 @@ impl Game {
|
|||||||
|
|
||||||
fn skill_phase_start(mut self) -> Game {
|
fn skill_phase_start(mut self) -> Game {
|
||||||
self.phase_start = Utc::now();
|
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());
|
self.log.push("<Skill Phase>".to_string());
|
||||||
|
|
||||||
if ![Phase::Start, Phase::Resolve].contains(&self.phase) {
|
if ![Phase::Start, Phase::Resolve].contains(&self.phase) {
|
||||||
@ -236,6 +243,8 @@ impl Game {
|
|||||||
panic!("{:?} unable to add pve mob skill {:?}", e, s);
|
panic!("{:?} unable to add pve mob skill {:?}", e, s);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.player_ready(player_id).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
self
|
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(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());
|
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.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();
|
game = game.resolve_phase_start();
|
||||||
|
|
||||||
// should auto progress back to skill phase
|
// 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 _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();
|
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();
|
game = game.resolve_phase_start();
|
||||||
|
|
||||||
assert!(game.player_by_id(x_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::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();
|
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.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();
|
game = game.resolve_phase_start();
|
||||||
|
|
||||||
// should not be stunned because of parry
|
// 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, 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.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());
|
assert!(game.skill_phase_finished());
|
||||||
game = game.resolve_phase_start();
|
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, 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();
|
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();
|
game = game.resolve_phase_start();
|
||||||
|
|
||||||
assert!(game.resolved.len() == 4);
|
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, 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.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());
|
assert!(game.skill_phase_finished());
|
||||||
game = game.resolve_phase_start();
|
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();
|
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());
|
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());
|
assert!(game.skill_phase_finished());
|
||||||
game = game.resolve_phase_start();
|
game = game.resolve_phase_start();
|
||||||
|
|
||||||
|
|||||||
@ -294,7 +294,10 @@ impl Instance {
|
|||||||
|
|
||||||
game = game.start();
|
game = game.start();
|
||||||
|
|
||||||
assert!(game.finished());
|
if !game.finished() {
|
||||||
|
panic!("game not finished {:?}", game)
|
||||||
|
}
|
||||||
|
|
||||||
let winner = match game.winner() {
|
let winner = match game.winner() {
|
||||||
Some(w) => w,
|
Some(w) => w,
|
||||||
None => panic!("game has no winner {:?}", game),
|
None => panic!("game has no winner {:?}", game),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user