jmelesky 3 anni fa
parent
commit
83d2ab4b60
1 ha cambiato i file con 22 aggiunte e 3 eliminazioni
  1. 22 3
      src/board.rs

+ 22 - 3
src/board.rs

@@ -16,6 +16,15 @@ impl Square {
     }
 }
 
+
+struct PlayerTurn(PieceColor);
+impl Default for PlayerTurn {
+    fn default() -> Self {
+        Self(PieceColor::White)
+    }
+}
+
+
 #[derive(Default)]
 struct SelectedSquare {
     entity: Option<Entity>,
@@ -32,8 +41,9 @@ impl Plugin for BoardPlugin {
     fn build(&self, app: &mut AppBuilder) {
         app.init_resource::<SelectedSquare>()
             .init_resource::<SelectedPiece>()
-            .add_system(select_square.system())
-            .add_startup_system(create_board.system());
+            .init_resource::<PlayerTurn>()
+            .add_startup_system(create_board.system())
+            .add_system(select_square.system());
     }
 }
 
@@ -80,6 +90,7 @@ fn select_square(
     mouse_button_inputs: Res<Input<MouseButton>>,
     mut selected_square: ResMut<SelectedSquare>,
     mut selected_piece: ResMut<SelectedPiece>,
+    mut turn: ResMut<PlayerTurn>,
     camera_query: Query<&PickingCamera>,
     squares_query: Query<&Square>,
     mut pieces_query: Query<(Entity, &mut Piece, &Children)>,
@@ -129,6 +140,11 @@ fn select_square(
                             // and set it to move
                             piece.x = square.x;
                             piece.y = square.y;
+
+                            turn.0 = match turn.0 {
+                                PieceColor::White => PieceColor::Black,
+                                PieceColor::Black => PieceColor::White,
+                            }
                         }
                     }
                     selected_square.entity = None;
@@ -136,7 +152,10 @@ fn select_square(
                 } else {
                     // otherwise, select the piece (if one) in the selected square
                     for (piece_entity, piece, _) in pieces_query.iter_mut() {
-                        if piece.x == square.x && piece.y == square.y {
+                        if piece.x == square.x
+                            && piece.y == square.y
+                            && piece.color == turn.0
+                        {
                             selected_piece.entity = Some(piece_entity);
                             break;
                         }