summaryrefslogtreecommitdiff
path: root/engine/src/windowing.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/windowing.rs')
-rw-r--r--engine/src/windowing.rs30
1 files changed, 21 insertions, 9 deletions
diff --git a/engine/src/windowing.rs b/engine/src/windowing.rs
index 2bfdb31..03e0ff8 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,
@@ -55,7 +55,7 @@ pub mod keyboard;
pub mod mouse;
pub mod window;
-const MESSAGE_FROM_APP_CHANNEL_CAP: usize = 128;
+const MESSAGE_FROM_APP_CHANNEL_CAP: usize = 512;
const MESSAGE_TO_APP_CHANNEL_CAP: usize = 16; // Increase if more messages are added
@@ -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(),