From 31b2dfe31427ea2c99ea0a467f91719e4ceb5308 Mon Sep 17 00:00:00 2001
From: Quaternions <krakow20@gmail.com>
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,