feat: Visualise crop growth

This commit is contained in:
demenik
2025-12-02 17:04:57 +01:00
parent 824e4a98e4
commit 715031d570

View File

@@ -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;
}
}
}