diff --git a/packages/engine/src/core/application.rs b/packages/engine/src/core/application.rs index 2f3bc8e..36e5deb 100644 --- a/packages/engine/src/core/application.rs +++ b/packages/engine/src/core/application.rs @@ -105,6 +105,14 @@ impl ApplicationHandler for Application { // Applications that redraw continously can render here instead. self.window.as_ref().unwrap().request_redraw(); } + WindowEvent::Resized(physical_size) => { + self.engine.dispatch(Event::Window( + super::event::window_event::WindowEvent::Resized( + physical_size.width, + physical_size.height, + ), + )); + } WindowEvent::KeyboardInput { device_id: _, event, @@ -152,6 +160,23 @@ impl ApplicationHandler for Application { ), )); } + WindowEvent::MouseWheel { + device_id: _, + delta, + phase: _, + } => match delta { + winit::event::MouseScrollDelta::LineDelta( + vertical, + horizontal, + ) => { + self.engine.dispatch(Event::Mouse( + super::event::mouse_event::MouseEvent::Scroll( + vertical, horizontal, + ), + )); + } + winit::event::MouseScrollDelta::PixelDelta(_) => (), + }, _ => (), } } diff --git a/packages/engine/src/core/engine.rs b/packages/engine/src/core/engine.rs index 290c8e9..c1b432d 100644 --- a/packages/engine/src/core/engine.rs +++ b/packages/engine/src/core/engine.rs @@ -47,7 +47,7 @@ impl Default for Engine { // The logger is started here to make sure we have logging always // available - // We do not want a env_logger during tests + // We do not want an env_logger during tests #[cfg(not(test))] { // Read the env values that configure the logger @@ -103,6 +103,7 @@ impl Engine { match self.data.state { EngineState::Running => { self.data.state = EngineState::Stopping; + self.dispatch(Event::Engine(event::EngineEvent::Shutdown)); self.stop(); } _ => { @@ -125,14 +126,14 @@ impl Engine { pub fn start(&mut self) { // TODO: there should be something here to start the engine self.data.state = EngineState::Running; - log::info!("Successfully started engine"); + self.dispatch(Event::Engine(event::EngineEvent::Started)); } /// Internal function that handles the engine's stop. pub fn stop(&mut self) { // TODO: there should be something hete to stop the engine self.data.state = EngineState::Stopped; - log::info!("Successfully stopped engine"); + self.dispatch(Event::Engine(event::EngineEvent::Stopped)); } /// Internal function that updates the engine. diff --git a/packages/engine/src/core/event/mouse_event.rs b/packages/engine/src/core/event/mouse_event.rs index 25d09d2..ef5de6c 100644 --- a/packages/engine/src/core/event/mouse_event.rs +++ b/packages/engine/src/core/event/mouse_event.rs @@ -8,6 +8,8 @@ pub enum MouseEvent { Pressed(MouseButton), /// The attached `MouseButton` was released. Released(MouseButton), - /// The mouse was moved + /// The mouse was moved. Moved(u32, u32), + /// The wheel was moved. + Scroll(f32, f32), } diff --git a/packages/engine/src/core/event/window_event.rs b/packages/engine/src/core/event/window_event.rs index a2a49bb..743f888 100644 --- a/packages/engine/src/core/event/window_event.rs +++ b/packages/engine/src/core/event/window_event.rs @@ -2,4 +2,7 @@ use strum::Display; /// Events produced by a window. #[derive(Debug, Display)] -pub enum WindowEvent {} +pub enum WindowEvent { + /// The window was resized. + Resized(u32, u32), +}