diff options
Diffstat (limited to 'engine/src/windowing.rs')
| -rw-r--r-- | engine/src/windowing.rs | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/engine/src/windowing.rs b/engine/src/windowing.rs index 2bfdb31..d717785 100644 --- a/engine/src/windowing.rs +++ b/engine/src/windowing.rs @@ -1,12 +1,12 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Weak}; -use std::thread::{spawn, JoinHandle as ThreadJoinHandle}; +use std::thread::{JoinHandle as ThreadJoinHandle, spawn}; use crossbeam_channel::{ - bounded as bounded_channel, Receiver as ChannelReceiver, Sender as ChannelSender, TrySendError, + bounded as bounded_channel, }; use ecs::actions::Actions; use ecs::component::Component; @@ -17,7 +17,7 @@ use ecs::phase::{Phase, UPDATE as UPDATE_PHASE}; use ecs::sole::Single; use ecs::system::observer::Observe; use ecs::uid::Uid; -use ecs::{declare_entity, Query, Sole}; +use ecs::{Query, Sole, declare_entity}; use raw_window_handle::{DisplayHandle, HandleError, HasDisplayHandle, WindowHandle}; use winit::application::ApplicationHandler; use winit::dpi::PhysicalPosition; @@ -40,7 +40,7 @@ use crate::windowing::mouse::{ Button as MouseButton, ButtonState as MouseButtonState, Buttons as MouseButtons, - Motion as MouseMotion, + Mouse, }; use crate::windowing::window::{ Closed as WindowClosed, @@ -80,7 +80,7 @@ impl ecs::extension::Extension for Extension { collector.add_sole(Context::default()).ok(); collector.add_sole(Keyboard::default()).ok(); - collector.add_sole(MouseMotion::default()).ok(); + collector.add_sole(Mouse::default()).ok(); collector.add_sole(MouseButtons::default()).ok(); collector.add_declared_entity(&PHASE); @@ -122,7 +122,7 @@ fn handle_window_creation_ready( fn update_stuff( mut context: Single<Context>, mut keyboard: Single<Keyboard>, - mut mouse_motion: Single<MouseMotion>, + mut mouse: Single<Mouse>, mut mouse_buttons: Single<MouseButtons>, mut actions: Actions, entity_obtainer: EntityObtainer, @@ -130,7 +130,7 @@ fn update_stuff( { keyboard.make_key_states_previous(); mouse_buttons.make_states_previous(); - mouse_motion.position_delta = Vec2::default(); + mouse.curr_tick_position_delta = Vec2::default(); let Context { ref message_from_app_receiver, @@ -221,8 +221,11 @@ fn update_stuff( MessageFromApp::KeyboardKeyStateChanged(key, key_state) => { keyboard.set_key_state(key, key_state); } + MessageFromApp::MouseMovedTo { position } => { + mouse.position = position; + } MessageFromApp::MouseMoved { position_delta } => { - mouse_motion.position_delta += position_delta; + mouse.curr_tick_position_delta += position_delta; } MessageFromApp::MouseButtonStateChanged(mouse_button, mouse_button_state) => { mouse_buttons.set(mouse_button, mouse_button_state); @@ -430,6 +433,10 @@ enum MessageFromApp WindowCloseRequested(WindowId), WindowScaleFactorChanged(WindowId, f64), KeyboardKeyStateChanged(Key, KeyState), + MouseMovedTo + { + position: Vec2<f64>, + }, MouseMoved { position_delta: Vec2<f64>, @@ -616,6 +623,11 @@ impl ApplicationHandler for App keyboard_event.state.into(), )); } + WindowEvent::CursorMoved { device_id: _, position } => { + self.send_message(MessageFromApp::MouseMovedTo { + position: Vec2 { x: position.x, y: position.y }, + }); + } WindowEvent::MouseInput { device_id: _, state, button } => { self.send_message(MessageFromApp::MouseButtonStateChanged( button.into(), |
