From 31b2dfe31427ea2c99ea0a467f91719e4ceb5308 Mon Sep 17 00:00:00 2001 From: Quaternions Date: Mon, 9 Oct 2023 18:29:25 -0700 Subject: [PATCH] calculators --- src/settings.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/settings.rs b/src/settings.rs index ee5cfdc..c424191 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -16,6 +16,27 @@ impl Default for Fov{ } } +struct FovCalculator{ + fov:Fov, + zoom:f64, + screen_size:glam::UVec2, +} +impl FovCalculator{ + pub fn calculate(&self)->glam::DVec2{ + self.zoom*match self.fov{ + Fov::Exactly{x,y}=>glam::dvec2(x,y), + Fov::DeriveX{x,y}=>match x{ + DerivedFov::FromScreenAspect=>glam::dvec2(y*(self.screen_size.x as f64/self.screen_size.y as f64),y), + DerivedFov::FromAspect(ratio)=>glam::dvec2(y*ratio.ratio,y), + }, + Fov::DeriveY{x,y}=>match y{ + DerivedFov::FromScreenAspect=>glam::dvec2(x,x*(self.screen_size.y as f64/self.screen_size.x as f64)), + DerivedFov::FromAspect(ratio)=>glam::dvec2(x,x*ratio.ratio), + }, + } + } +} + enum Sensitivity{ Exactly{x:f64,y:f64}, DeriveX{x:Ratio,y:f64}, @@ -27,6 +48,19 @@ impl Default for Sensitivity{ } } +struct SensitivityCalculator{ + sensitivity:Sensitivity, +} +impl SensitivityCalculator{ + pub fn calculate(&self)->glam::DVec2{ + match self.sensitivity{ + Sensitivity::Exactly{x,y}=>glam::dvec2(x,y), + Sensitivity::DeriveX{x,y}=>glam::dvec2(y*x.ratio,y), + Sensitivity::DeriveY{x,y}=>glam::dvec2(x,x*y.ratio), + } + } +} + #[derive(Default)] pub struct UserSettings{ fov:Fov,