diff --git a/src/display3d.rs b/src/display3d.rs index c47767d..801d55a 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -1352,7 +1352,9 @@ fn capture_piece( // Hide piece now that animation is done *v = Visibility::Hidden; - t.translation = capture_translation(side, score.get(*side)); + // HACK: This is dirty. Why side, but score.captures(!side)? + info!("Capture translation: ({:?}, {:?}) {:?}", side, score.captures(!*side).saturating_sub(1), t.translation); + t.translation = capture_translation(side, score.captures(!*side).saturating_sub(1)); *state = s.next(); } diff --git a/src/game.rs b/src/game.rs index 78649aa..ec98e6d 100644 --- a/src/game.rs +++ b/src/game.rs @@ -117,6 +117,8 @@ pub(crate) enum GameError { pub(crate) struct Score { a: usize, b: usize, + captures_a: usize, + captures_b: usize } impl Score { @@ -127,17 +129,30 @@ impl Score { Piece::Pawn => 1, }; match side { - Side::A => self.a += i, - Side::B => self.b += i, + Side::A => { + self.captures_a += 1; + self.a += i; + }, + Side::B => { + self.captures_b += 1; + self.b += i; + } } } - pub(crate) fn get(&self, side: Side) -> usize { + pub(crate) fn _get(&self, side: Side) -> usize { match side { Side::A => self.a, Side::B => self.b, } } + + pub(crate) fn captures(&self, side: Side) -> usize { + match side { + Side::A => self.captures_a, + Side::B => self.captures_b, + } + } } /// The board is setup like this: @@ -636,7 +651,7 @@ fn manage_score( mut debug_info: ResMut, mut score: ResMut, ) { - events.iter().for_each(|side| { + events.iter().for_each(|(side, piece)| { score.increment(!*side, *piece); debug_info.set("score".into(), format!("A:{}|B:{}", score.a, score.b)); });