feat: Visualise crop growth
This commit is contained in:
@@ -89,9 +89,16 @@ fn cleanup(mut commands: Commands, tile_query: Query<Entity, With<Tile>>) {
|
||||
|
||||
fn update_tiles(
|
||||
mut query: Query<(&TileState, &mut AseSlice, &Children)>,
|
||||
mut crop_query: Query<&mut Visibility, (With<CropVisual>, Without<WaterVisual>)>,
|
||||
mut water_query: Query<&mut Visibility, (With<WaterVisual>, Without<CropVisual>)>,
|
||||
mut crop_query: Query<
|
||||
(&mut Visibility, &mut Transform),
|
||||
(With<CropVisual>, Without<WaterVisual>),
|
||||
>,
|
||||
mut water_query: Query<
|
||||
(&mut Visibility, &mut Transform),
|
||||
(With<WaterVisual>, Without<CropVisual>),
|
||||
>,
|
||||
asset_server: Res<AssetServer>,
|
||||
game_config: Res<GameConfig>,
|
||||
) {
|
||||
for (state, mut slice, children) in &mut query {
|
||||
slice.name = match state {
|
||||
@@ -107,18 +114,39 @@ fn update_tiles(
|
||||
TileState::Occupied { .. } => asset_server.load("tiles/tile-occupied.aseprite"),
|
||||
};
|
||||
|
||||
let scale: Vec3 = match state {
|
||||
TileState::Occupied {
|
||||
seed, growth_stage, ..
|
||||
} => {
|
||||
let max_stages = seed
|
||||
.get_seed_config(&game_config)
|
||||
.map(|config| config.growth_stages)
|
||||
.unwrap_or(0);
|
||||
|
||||
if max_stages > 0 {
|
||||
let progress = (*growth_stage as f32 / max_stages as f32).min(1.0);
|
||||
Vec3::splat(0.3 + (progress * 0.7))
|
||||
} else {
|
||||
Vec3::ONE
|
||||
}
|
||||
}
|
||||
_ => Vec3::ONE,
|
||||
};
|
||||
|
||||
for child in children.iter() {
|
||||
if let Ok(mut visibility) = crop_query.get_mut(child) {
|
||||
if let Ok((mut visibility, mut transform)) = crop_query.get_mut(child) {
|
||||
*visibility = match state {
|
||||
TileState::Occupied { .. } => Visibility::Visible,
|
||||
_ => Visibility::Hidden,
|
||||
};
|
||||
transform.scale = scale;
|
||||
}
|
||||
if let Ok(mut visibility) = water_query.get_mut(child) {
|
||||
if let Ok((mut visibility, mut transform)) = water_query.get_mut(child) {
|
||||
*visibility = match state {
|
||||
TileState::Occupied { watered: true, .. } => Visibility::Visible,
|
||||
_ => Visibility::Hidden,
|
||||
};
|
||||
transform.scale = scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user