use crate::features::savegame::messages::SavegameDumpMessage; use crate::prelude::*; use components::{SessionTracker, TimerSettings}; use messages::*; pub mod components; pub mod messages; pub mod utils; pub struct PhasePlugin; impl Plugin for PhasePlugin { fn build(&self, app: &mut App) { app.init_resource::(); app.init_resource::(); app.insert_resource(CurrentPhase(Phase::Focus { duration: 25.0 * 60.0, })); app.add_message::(); app.add_systems(OnEnter(AppState::GameScreen), load_rules); app.add_systems( Update, (tick_timer, handle_pause, handle_continue).run_if(in_state(AppState::GameScreen)), ); #[cfg(debug_assertions)] app.add_systems(Update, debug_short_phase_duration); } } #[cfg(debug_assertions)] fn debug_short_phase_duration( mut phase_res: ResMut, keys: Res>, ) { if keys.any_pressed([KeyCode::ShiftLeft, KeyCode::ShiftRight]) && keys.just_pressed(KeyCode::Enter) { let phase = &mut phase_res.0; match phase { Phase::Focus { duration } | Phase::Break { duration } => { *duration = 3.0; println!("Debug: Phase duration set to 3 seconds!"); } _ => {} } } } fn load_rules(mut phase_res: ResMut, settings: Res) { let phase = &mut phase_res.0; let new_phase = match phase { Phase::Focus { .. } => Some(Phase::Focus { duration: settings.focus_duration, }), Phase::Break { .. } => Some(Phase::Break { duration: 0.0 }), _ => None, }; if let Some(p) = new_phase { *phase = p; } } fn tick_timer( time: Res