feat: Implement crop growth logic on phase change

This commit is contained in:
demenik
2025-12-02 17:04:48 +01:00
parent 7f134ce696
commit 824e4a98e4

View File

@@ -152,12 +152,13 @@ pub fn next_phase(
} }
} }
fn handle_continue( pub fn handle_continue(
mut messages: MessageReader<NextPhaseMessage>, mut messages: MessageReader<NextPhaseMessage>,
mut phase_res: ResMut<CurrentPhase>, mut phase_res: ResMut<CurrentPhase>,
mut session_tracker: ResMut<SessionTracker>, mut session_tracker: ResMut<SessionTracker>,
settings: Res<TimerSettings>, settings: Res<TimerSettings>,
mut tile_query: Query<&mut TileState>, mut tile_query: Query<&mut TileState>,
game_config: Res<GameConfig>,
) { ) {
for _ in messages.read() { for _ in messages.read() {
let entering_break = if let Phase::Finished { completed_phase } = &phase_res.0 { let entering_break = if let Phase::Finished { completed_phase } = &phase_res.0 {
@@ -169,12 +170,27 @@ fn handle_continue(
next_phase(&mut phase_res, &mut session_tracker, &settings); next_phase(&mut phase_res, &mut session_tracker, &settings);
if entering_break { if entering_break {
println!("Resetting watered state for all crops."); println!("Growing crops and resetting watered state.");
for mut state in tile_query.iter_mut() { for mut state in tile_query.iter_mut() {
if let TileState::Occupied { seed, .. } = &*state { if let TileState::Occupied {
seed,
watered,
growth_stage,
} = &*state
{
let mut new_stage = *growth_stage;
if *watered {
if let Some(config) = seed.get_seed_config(&game_config) {
if new_stage < config.growth_stages {
new_stage += 1;
}
}
}
*state = TileState::Occupied { *state = TileState::Occupied {
seed: seed.clone(), seed: seed.clone(),
watered: false, watered: false,
growth_stage: new_stage,
}; };
} }
} }