From 9c38252faddbf49dd3935f405d5160e99f8c9503 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sun, 1 Sep 2024 08:53:08 +0200 Subject: [PATCH] Correctly clamp --- engine/src/scene/general/camera_control.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/engine/src/scene/general/camera_control.rs b/engine/src/scene/general/camera_control.rs index ab4ef96..584ecc1 100644 --- a/engine/src/scene/general/camera_control.rs +++ b/engine/src/scene/general/camera_control.rs @@ -1,6 +1,6 @@ use crate::prelude::*; use anyhow::Result; -use cgmath::{vec3, Deg, Matrix4, Vector2, Vector3}; +use cgmath::{num_traits::clamp, vec3, Deg, Matrix4, Vector2, Vector3}; pub struct CameraControl { zoom_levels: Vec, @@ -83,9 +83,11 @@ impl CameraControl { pub fn stick_movement(&mut self, stick: Vector2, view: &mut View) -> Result<()> { self.rotation = Deg(((self.rotation.0 + stick.x) as u32 % 360) as f32); - self.arc = Deg((self.arc.0 as i32 + stick.y as i32) - .min(CameraControl::MAX_PITCH) - .max(CameraControl::MIN_PITCH) as f32); + self.arc = Deg(clamp( + self.arc.0 + stick.y, + CameraControl::MIN_PITCH as f32, + CameraControl::MAX_PITCH as f32, + )); self.set_camera_offset(view) } @@ -98,9 +100,11 @@ impl CameraControl { let y_diff = ((start_y as i32 - y as i32) as f32 * CameraControl::SCALE) as i32; self.rotation = Deg(((self.rotation_start.0 as i32 + x_diff) % 360) as f32); - self.arc = Deg((self.arc_start.0 as i32 - y_diff) - .min(CameraControl::MAX_PITCH) - .max(CameraControl::MIN_PITCH) as f32); + self.arc = Deg(clamp( + self.arc_start.0 as i32 - y_diff, + CameraControl::MIN_PITCH, + CameraControl::MAX_PITCH, + ) as f32); self.set_camera_offset(view)?; }