Movement limits

master
Wynd 2024-11-06 13:18:54 +02:00
parent ceeeb6e268
commit 5afea588bb
2 changed files with 21 additions and 9 deletions

View File

@ -1,7 +1,6 @@
use cgmath::Point3;
use winit::event::{MouseButton, MouseScrollDelta, WindowEvent};
use crate::camera::{Camera, DEFAULT_CAMERA_ZOOM};
use crate::camera::Camera;
const MAX_ZOOM_LEVEL: f32 = 15.0;
@ -11,6 +10,7 @@ pub struct CameraController {
cursor_start: (f32, f32),
movement: (f32, f32),
is_moving: bool,
movement_level: (f32, f32),
zoom_level: f32,
}
@ -22,6 +22,7 @@ impl CameraController {
cursor_start: (0.0, 0.0),
movement: (0.0, 0.0),
is_moving: false,
movement_level: (0.0, 0.0),
zoom_level: 1.0,
}
}
@ -44,7 +45,7 @@ impl CameraController {
self.cursor_start = (position.x as f32, position.y as f32);
}
self.movement = match self.is_moving {
let (x, y) = match self.is_moving {
true => {
let x = -self.cursor_start.0 + position.x as f32;
let x = x * 0.000001;
@ -69,6 +70,8 @@ impl CameraController {
}
};
self.movement = (x, y);
true
}
WindowEvent::MouseWheel { delta, .. } => match delta {
@ -99,11 +102,21 @@ impl CameraController {
camera.eye -= forward_norm * self.speed;
}
camera.eye.x += self.movement.0;
camera.eye.y += self.movement.1;
self.movement_level.0 += self.movement.0;
self.movement_level.1 += self.movement.1;
camera.target.x += self.movement.0;
camera.target.y += self.movement.1;
if self.movement_level.0 > -1.0 && self.movement_level.0 < 1.0 {
camera.eye.x += self.movement.0;
camera.target.x += self.movement.0;
}
if self.movement_level.1 > -1.0 && self.movement_level.1 < 1.0 {
camera.eye.y += self.movement.1;
camera.target.y += self.movement.1;
}
self.movement_level.0 = self.movement_level.0.clamp(-1.0, 1.0);
self.movement_level.1 = self.movement_level.1.clamp(-1.0, 1.0);
self.forward = 0.0;
}

View File

@ -4,8 +4,7 @@ use pollster::FutureExt;
use wgpu::util::DeviceExt;
use winit::{
event::{ElementState, WindowEvent},
keyboard::{Key, KeyCode, NamedKey},
platform::modifier_supplement::KeyEventExtModifierSupplement,
keyboard::Key,
window::Window,
};