57 lines
1.7 KiB
Rust
57 lines
1.7 KiB
Rust
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::<InputState>().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::<DebugUIBuffer>().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;
|
|
}
|
|
}
|
|
}
|
|
}
|