summaryrefslogtreecommitdiff
path: root/engine/src/camera/fly.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/camera/fly.rs')
-rw-r--r--engine/src/camera/fly.rs54
1 files changed, 19 insertions, 35 deletions
diff --git a/engine/src/camera/fly.rs b/engine/src/camera/fly.rs
index b1214db..a034851 100644
--- a/engine/src/camera/fly.rs
+++ b/engine/src/camera/fly.rs
@@ -8,7 +8,8 @@ use ecs::{Component, Query};
use crate::builder;
use crate::camera::{Active as ActiveCamera, Camera};
use crate::delta_time::DeltaTime;
-use crate::input::{Cursor, CursorFlags, Key, KeyState, Keys};
+use crate::input::keyboard::{Key, KeyState, Keyboard};
+use crate::input::mouse::Motion as MouseMotion;
use crate::transform::WorldPosition;
use crate::vector::{Vec2, Vec3};
@@ -60,12 +61,7 @@ impl ecs::extension::Extension for Extension
{
fn collect(self, mut collector: ecs::extension::Collector<'_>)
{
- collector.add_system(
- *UPDATE_PHASE,
- update
- .into_system()
- .initialize((CursorState::default(), self.0)),
- );
+ collector.add_system(*UPDATE_PHASE, update.into_system().initialize((self.0,)));
}
}
@@ -77,35 +73,29 @@ pub struct Options
fn update(
camera_query: Query<(&mut Camera, &mut WorldPosition, &mut Fly, &ActiveCamera)>,
- keys: Single<Keys>,
- cursor: Single<Cursor>,
- cursor_flags: Single<CursorFlags>,
+ keyboard: Single<Keyboard>,
+ mouse_motion: Single<MouseMotion>,
delta_time: Single<DeltaTime>,
- mut cursor_state: Local<CursorState>,
options: Local<Options>,
)
{
for (mut camera, mut camera_world_pos, mut fly_camera, _) in &camera_query {
- if cursor.has_moved && cursor_flags.is_first_move.flag {
- tracing::debug!("First cursor move");
-
- cursor_state.last_pos = cursor.position;
- }
-
let delta_time = delta_time.duration;
- let mut x_offset = cursor.position.x - cursor_state.last_pos.x;
- let mut y_offset = cursor_state.last_pos.y - cursor.position.y;
+ // tracing::info!("Mouse motion: {:?}", mouse_motion.position_delta);
- cursor_state.last_pos = cursor.position;
+ if mouse_motion.position_delta != (Vec2 { x: 0.0, y: 0.0 }) {
+ let x_offset =
+ mouse_motion.position_delta.x * f64::from(options.mouse_sensitivity);
- x_offset *= f64::from(options.mouse_sensitivity);
- y_offset *= f64::from(options.mouse_sensitivity);
+ let y_offset =
+ (-mouse_motion.position_delta.y) * f64::from(options.mouse_sensitivity);
- fly_camera.current_yaw += x_offset;
- fly_camera.current_pitch += y_offset;
+ fly_camera.current_yaw += x_offset;
+ fly_camera.current_pitch += y_offset;
- fly_camera.current_pitch = fly_camera.current_pitch.clamp(-89.0, 89.0);
+ fly_camera.current_pitch = fly_camera.current_pitch.clamp(-89.0, 89.0);
+ }
// TODO: This casting to a f32 from a f64 is horrible. fix it
#[allow(clippy::cast_possible_truncation)]
@@ -122,24 +112,24 @@ fn update(
camera.global_up = cam_right.cross(&direction).normalize();
- if keys.get_key_state(Key::W) == KeyState::Pressed {
+ if keyboard.get_key_state(Key::W) == KeyState::Pressed {
camera_world_pos.position +=
direction * fly_camera.speed * delta_time.as_secs_f32();
}
- if keys.get_key_state(Key::S) == KeyState::Pressed {
+ if keyboard.get_key_state(Key::S) == KeyState::Pressed {
camera_world_pos.position -=
direction * fly_camera.speed * delta_time.as_secs_f32();
}
- if keys.get_key_state(Key::A) == KeyState::Pressed {
+ if keyboard.get_key_state(Key::A) == KeyState::Pressed {
let cam_left = -direction.cross(&Vec3::UP).normalize();
camera_world_pos.position +=
cam_left * fly_camera.speed * delta_time.as_secs_f32();
}
- if keys.get_key_state(Key::D) == KeyState::Pressed {
+ if keyboard.get_key_state(Key::D) == KeyState::Pressed {
let cam_right = direction.cross(&Vec3::UP).normalize();
camera_world_pos.position +=
@@ -149,9 +139,3 @@ fn update(
camera.target = camera_world_pos.position + direction;
}
}
-
-#[derive(Debug, Default, Component)]
-struct CursorState
-{
- last_pos: Vec2<f64>,
-}