feat: Display crop sprite (#26)
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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<AssetServer>, config: Res<Gam
|
||||
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();
|
||||
column.push(tile_entity);
|
||||
}
|
||||
@@ -65,11 +76,12 @@ fn cleanup(mut commands: Commands, tile_query: Query<Entity, With<Tile>>) {
|
||||
commands.remove_resource::<Grid>();
|
||||
}
|
||||
|
||||
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<CropVisual>>,
|
||||
asset_server: Res<AssetServer>,
|
||||
) {
|
||||
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,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user