feat: Display crop sprite (#26)
This commit is contained in:
@@ -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(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user