project structure cleanup
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
use winit::{
|
||||
event::{Event, WindowEvent, KeyboardInput, ElementState, VirtualKeyCode, MouseButton},
|
||||
window::Window
|
||||
};
|
||||
use std::sync::Arc;
|
||||
|
||||
mod camera_controller; use camera_controller::CameraController;
|
||||
use crate::renderer::Renderer;
|
||||
|
||||
|
||||
pub struct App {
|
||||
pub window: Window,
|
||||
pub renderer: Renderer,
|
||||
camera_controller: CameraController,
|
||||
}
|
||||
|
||||
impl App {
|
||||
pub fn new(window: Window, renderer: Renderer) -> Self {
|
||||
let camera_controller = CameraController::new();
|
||||
Self { window, renderer, camera_controller }
|
||||
}
|
||||
|
||||
pub fn input(&mut self, event: Arc<Event<()>>) {
|
||||
|
||||
match event.as_ref() {
|
||||
Event::WindowEvent { ref event, .. } => {
|
||||
match event {
|
||||
// Escape key
|
||||
WindowEvent::KeyboardInput { input: KeyboardInput { state: ElementState::Pressed, virtual_keycode: Some(VirtualKeyCode::Escape), .. }, .. } => {
|
||||
self.window.set_cursor_grab(false).unwrap();
|
||||
self.window.set_cursor_visible(true);
|
||||
self.camera_controller.set_enabled(false);
|
||||
}
|
||||
// Window clicked
|
||||
WindowEvent::MouseInput { state: ElementState::Pressed, button: MouseButton::Left, .. } => {
|
||||
self.window.set_cursor_grab(true).unwrap();
|
||||
self.window.set_cursor_visible(false);
|
||||
self.camera_controller.set_enabled(true);
|
||||
}
|
||||
// Window resized
|
||||
WindowEvent::Resized(physical_size) => {
|
||||
self.renderer.resize(Some(*physical_size));
|
||||
}
|
||||
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
|
||||
self.renderer.resize(Some(**new_inner_size));
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
|
||||
// Update camera controller
|
||||
self.camera_controller.handle_input(event.as_ref());
|
||||
}
|
||||
|
||||
pub fn update(&mut self, delta: f32) {
|
||||
self.camera_controller.update_camera(&mut self.renderer.camera, delta);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user