use winit::keyboard::KeyCode; use raidillon_core::DebugUIBuffer; use raidillon_core::scene::Scene; use raidillon_ecs::components::CameraMode; use raidillon_engine::{EngineResources, InputState}; use raidillon_engine::system::System; use raidillon_platform::{Camera, PlatformContext}; #[derive(Default)] pub struct KeybindsSystem { camera_toggle_held: bool, } impl System for KeybindsSystem { fn fixed_update(&mut self, res: &mut EngineResources, scene: &mut Scene) { let input = res.get::().unwrap(); if input.key_held(KeyCode::F5) { if self.camera_toggle_held { return } self.toggle_camera_mode(scene); self.camera_toggle_held = true; } else { self.camera_toggle_held = false; } } fn frame_update(&mut self, res: &mut EngineResources, scene: &mut Scene) { let dbg_ui = scene.resources.get_mut::().unwrap(); dbg_ui.text("F5 to switch camera".to_owned()); let mut q = scene.world.query::<(&Camera, &CameraMode)>(); let (cam_ent, (cam, cam_mode)) = q .iter() .next() .unwrap(); dbg_ui.text(format!("Camera Mode: {:?}", cam_mode)); } } impl KeybindsSystem { fn toggle_camera_mode(&mut self, scene: &mut Scene) { let q = scene.world.query_mut::<(&mut Camera, &mut CameraMode)>(); let (cam_ent, (cam, cam_mode)) = q .into_iter() .next() .unwrap(); match *cam_mode { CameraMode::Kinematic => { *cam_mode = CameraMode::Debug; } CameraMode::Debug => { *cam_mode = CameraMode::Kinematic; } } } }