feat: Display crop sprite (#26)

This commit is contained in:
demenik
2025-12-02 13:47:22 +01:00
parent 61c2622379
commit f42f4e1cf7
2 changed files with 32 additions and 8 deletions

View File

@@ -7,6 +7,9 @@ pub struct Tile {
pub y: u32, pub y: u32,
} }
#[derive(Component)]
pub struct CropVisual;
#[derive(Component, Default, Serialize, Deserialize, Clone, Debug)] #[derive(Component, Default, Serialize, Deserialize, Clone, Debug)]
pub enum TileState { pub enum TileState {
#[default] #[default]
@@ -62,4 +65,4 @@ impl Grid {
*tile_state = mapper(&*tile_state); *tile_state = mapper(&*tile_state);
Ok(()) Ok(())
} }
} }

View File

@@ -1,4 +1,5 @@
use crate::prelude::*; use crate::prelude::*;
use components::CropVisual;
pub mod components; pub mod components;
pub mod consts; pub mod consts;
@@ -12,10 +13,7 @@ impl Plugin for GridPlugin {
app.add_systems(OnEnter(AppState::GameScreen), setup); app.add_systems(OnEnter(AppState::GameScreen), setup);
app.add_systems(OnExit(AppState::GameScreen), cleanup); app.add_systems(OnExit(AppState::GameScreen), cleanup);
app.add_systems( app.add_systems(Update, update_tiles.run_if(in_state(AppState::GameScreen)));
Update,
update_tile_colors.run_if(in_state(AppState::GameScreen)),
);
} }
} }
@@ -45,6 +43,19 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>, config: Res<Gam
grid_height, grid_height,
)), )),
)) ))
.with_children(|parent| {
parent.spawn((
CropVisual,
AseSlice {
name: "Crop".into(),
aseprite: asset_server.load("crop.aseprite"),
},
Sprite::default(),
Transform::default(),
Visibility::Hidden,
ZIndex(1),
));
})
.id(); .id();
column.push(tile_entity); column.push(tile_entity);
} }
@@ -65,11 +76,12 @@ fn cleanup(mut commands: Commands, tile_query: Query<Entity, With<Tile>>) {
commands.remove_resource::<Grid>(); commands.remove_resource::<Grid>();
} }
fn update_tile_colors( fn update_tiles(
mut query: Query<(&TileState, &mut AseSlice)>, mut query: Query<(&TileState, &mut AseSlice, &Children)>,
mut crop_query: Query<&mut Visibility, With<CropVisual>>,
asset_server: Res<AssetServer>, asset_server: Res<AssetServer>,
) { ) {
for (state, mut slice) in &mut query { for (state, mut slice, children) in &mut query {
slice.name = match state { slice.name = match state {
TileState::Unclaimed => "Unclaimed", TileState::Unclaimed => "Unclaimed",
TileState::Empty => "Empty", TileState::Empty => "Empty",
@@ -82,5 +94,14 @@ fn update_tile_colors(
TileState::Empty => asset_server.load("tiles/tile-empty.aseprite"), TileState::Empty => asset_server.load("tiles/tile-empty.aseprite"),
TileState::Occupied { .. } => asset_server.load("tiles/tile-occupied.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,
};
}
}
} }
} }