From f42f4e1cf74ae22b1d262d1b360f8dc20e318ad9 Mon Sep 17 00:00:00 2001 From: demenik Date: Tue, 2 Dec 2025 13:47:22 +0100 Subject: [PATCH] feat: Display crop sprite (#26) --- src/features/grid/components.rs | 5 ++++- src/features/grid/mod.rs | 35 ++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/features/grid/components.rs b/src/features/grid/components.rs index 4b5bf8f..a9a62a1 100644 --- a/src/features/grid/components.rs +++ b/src/features/grid/components.rs @@ -7,6 +7,9 @@ pub struct Tile { pub y: u32, } +#[derive(Component)] +pub struct CropVisual; + #[derive(Component, Default, Serialize, Deserialize, Clone, Debug)] pub enum TileState { #[default] @@ -62,4 +65,4 @@ impl Grid { *tile_state = mapper(&*tile_state); Ok(()) } -} +} \ No newline at end of file diff --git a/src/features/grid/mod.rs b/src/features/grid/mod.rs index 9334d52..ba20b81 100644 --- a/src/features/grid/mod.rs +++ b/src/features/grid/mod.rs @@ -1,4 +1,5 @@ use crate::prelude::*; +use components::CropVisual; pub mod components; pub mod consts; @@ -12,10 +13,7 @@ impl Plugin for GridPlugin { app.add_systems(OnEnter(AppState::GameScreen), setup); app.add_systems(OnExit(AppState::GameScreen), cleanup); - app.add_systems( - Update, - update_tile_colors.run_if(in_state(AppState::GameScreen)), - ); + app.add_systems(Update, update_tiles.run_if(in_state(AppState::GameScreen))); } } @@ -45,6 +43,19 @@ fn setup(mut commands: Commands, asset_server: Res, config: Res>) { commands.remove_resource::(); } -fn update_tile_colors( - mut query: Query<(&TileState, &mut AseSlice)>, +fn update_tiles( + mut query: Query<(&TileState, &mut AseSlice, &Children)>, + mut crop_query: Query<&mut Visibility, With>, asset_server: Res, ) { - for (state, mut slice) in &mut query { + for (state, mut slice, children) in &mut query { slice.name = match state { TileState::Unclaimed => "Unclaimed", TileState::Empty => "Empty", @@ -82,5 +94,14 @@ fn update_tile_colors( TileState::Empty => asset_server.load("tiles/tile-empty.aseprite"), TileState::Occupied { .. } => asset_server.load("tiles/tile-occupied.aseprite"), }; + + for child in children.iter() { + if let Ok(mut visibility) = crop_query.get_mut(child) { + *visibility = match state { + TileState::Occupied { .. } => Visibility::Visible, + _ => Visibility::Hidden, + }; + } + } } }