|
|
|
|
@ -19,6 +19,10 @@ impl Plugin for GamePlugin {
|
|
|
|
|
select_sync.run_if(any_component_added::<Selected>),
|
|
|
|
|
deselect_sync.run_if(any_component_removed::<Selected>()),
|
|
|
|
|
move_piece.run_if(any_component_added::<Selected>),
|
|
|
|
|
exclusive_select::<display2d::Display2d>
|
|
|
|
|
.run_if(any_component_added::<Selected>),
|
|
|
|
|
exclusive_select::<display2d::Display2d>
|
|
|
|
|
.run_if(any_component_added::<Selected>),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
.add_systems(
|
|
|
|
|
@ -334,6 +338,7 @@ fn deselect_sync(
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Triggered when right-mouse-button clicked
|
|
|
|
|
fn cancel_place(current: Query<Entity, (With<Selected>, With<Piece>)>, mut commands: Commands) {
|
|
|
|
|
current.iter().for_each(|entity| {
|
|
|
|
|
info!("De-selecting {:?}", entity);
|
|
|
|
|
@ -368,3 +373,19 @@ fn move_piece(
|
|
|
|
|
commands.entity(tile).remove::<Selected>();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// TEMPORARY: Exclusive selection; only select one piece at a time
|
|
|
|
|
fn exclusive_select<T: Component>(
|
|
|
|
|
events: Query<Entity, (Added<Selected>, With<Piece>, With<T>)>,
|
|
|
|
|
selected: Query<Entity, (With<Selected>, With<Piece>, With<T>)>,
|
|
|
|
|
mut commands: Commands,
|
|
|
|
|
) {
|
|
|
|
|
// Iterate over selected component markers on pieces
|
|
|
|
|
events.iter().for_each(|entity| {
|
|
|
|
|
// Selected > 2 (one for each display2d/3d)
|
|
|
|
|
selected.iter().filter(|&e| e != entity).for_each(|e| {
|
|
|
|
|
// Remove the previously added selected marker
|
|
|
|
|
commands.entity(e).remove::<Selected>();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|