|
@@ -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;
|
|
|
}
|