write it
This commit is contained in:
parent
4864c12779
commit
726a66d955
@ -1,33 +1,101 @@
|
|||||||
|
struct Ratio{
|
||||||
|
ratio:f64,
|
||||||
|
}
|
||||||
enum DerivedFov{
|
enum DerivedFov{
|
||||||
FromScreenAspect,
|
FromScreenAspect,
|
||||||
FromAspect{num:u32,den:u32},
|
FromAspect(Ratio),
|
||||||
}
|
}
|
||||||
enum Fov{
|
enum Fov{
|
||||||
Exactly{x:f32,y:f32},
|
Exactly{x:f64,y:f64},
|
||||||
DeriveX{x:DerivedFov,y:f32},
|
DeriveX{x:DerivedFov,y:f64},
|
||||||
DeriveY{x:f32,y:DerivedFov},
|
DeriveY{x:f64,y:DerivedFov},
|
||||||
|
}
|
||||||
|
impl Default for Fov{
|
||||||
|
fn default() -> Self {
|
||||||
|
Fov::DeriveX{x:DerivedFov::FromScreenAspect,y:1.0}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DerivedSensitivity{
|
|
||||||
ratio:f32,
|
|
||||||
}
|
|
||||||
enum Sensitivity{
|
enum Sensitivity{
|
||||||
Exactly{x:f32,y:f32},
|
Exactly{x:f64,y:f64},
|
||||||
DeriveX{x:DerivedSensitivity,y:f32},
|
DeriveX{x:Ratio,y:f64},
|
||||||
DeriveY{x:f32,y:DerivedSensitivity},
|
DeriveY{x:f64,y:Ratio},
|
||||||
|
}
|
||||||
|
impl Default for Sensitivity{
|
||||||
|
fn default() -> Self {
|
||||||
|
Sensitivity::DeriveY{x:0.001,y:Ratio{ratio:1.0}}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct UserSettings{
|
pub struct UserSettings{
|
||||||
fov:Fov,
|
fov:Fov,
|
||||||
sensitivity:Sensitivity,
|
sensitivity:Sensitivity,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn read_user_settings(){
|
/*
|
||||||
let mut sensitivity=1.0/1024.0;
|
//sensitivity is raw input dots (i.e. dpi = dots per inch) to radians conversion factor
|
||||||
|
sensitivity_x=0.001
|
||||||
|
sensitivity_mul_x_to_y=1
|
||||||
|
Sensitivity::DeriveY{x:0.0.001,y:DerivedSensitivity{ratio:1.0}}
|
||||||
|
*/
|
||||||
|
|
||||||
|
pub fn read_user_settings()->UserSettings{
|
||||||
if let Ok(file)=std::fs::File::open("settings.conf"){
|
if let Ok(file)=std::fs::File::open("settings.conf"){
|
||||||
let cfg=configparser::ini::Ini::new();
|
let cfg=configparser::ini::Ini::new();
|
||||||
if let Ok(Some(sens))=cfg.getfloat("user","sensitivity_x"){
|
let (cfg_fov_x,cfg_fov_y)=(cfg.getfloat("camera","fov_x"),cfg.getfloat("camera","fov_x"));
|
||||||
sensitivity=sens;
|
let fov=match(cfg_fov_x,cfg_fov_y){
|
||||||
|
(Ok(Some(fov_x)),Ok(Some(fov_y)))=>Fov::Exactly {
|
||||||
|
x:fov_x,
|
||||||
|
y:fov_y
|
||||||
|
},
|
||||||
|
(Ok(Some(fov_x)),Ok(None))=>Fov::DeriveY{
|
||||||
|
x:fov_x,
|
||||||
|
y:if let Ok(Some(fov_mul_x_to_y))=cfg.getfloat("camera","fov_mul_x_to_y"){
|
||||||
|
DerivedFov::FromAspect(Ratio{ratio:fov_mul_x_to_y})
|
||||||
|
}else{
|
||||||
|
DerivedFov::FromScreenAspect
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(Ok(None),Ok(Some(fov_y)))=>Fov::DeriveX{
|
||||||
|
x:if let Ok(Some(fov_mul_y_to_x))=cfg.getfloat("camera","fov_mul_y_to_x"){
|
||||||
|
DerivedFov::FromAspect(Ratio{ratio:fov_mul_y_to_x})
|
||||||
|
}else{
|
||||||
|
DerivedFov::FromScreenAspect
|
||||||
|
},
|
||||||
|
y:fov_y,
|
||||||
|
},
|
||||||
|
_=>{
|
||||||
|
Fov::default()
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let (cfg_sensitivity_x,cfg_sensitivity_y)=(cfg.getfloat("camera","sensitivity_x"),cfg.getfloat("camera","sensitivity_x"));
|
||||||
|
let sensitivity=match(cfg_sensitivity_x,cfg_sensitivity_y){
|
||||||
|
(Ok(Some(sensitivity_x)),Ok(Some(sensitivity_y)))=>Sensitivity::Exactly {
|
||||||
|
x:sensitivity_x,
|
||||||
|
y:sensitivity_y
|
||||||
|
},
|
||||||
|
(Ok(Some(sensitivity_x)),Ok(None))=>Sensitivity::DeriveY{
|
||||||
|
x:sensitivity_x,
|
||||||
|
y:Ratio{
|
||||||
|
ratio:if let Ok(Some(sensitivity_mul_x_to_y))=cfg.getfloat("camera","sensitivity_mul_x_to_y"){sensitivity_mul_x_to_y}else{1.0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(Ok(None),Ok(Some(sensitivity_y)))=>Sensitivity::DeriveX{
|
||||||
|
x:Ratio{
|
||||||
|
ratio:if let Ok(Some(sensitivity_mul_y_to_x))=cfg.getfloat("camera","sensitivity_mul_y_to_x"){sensitivity_mul_y_to_x}else{1.0}
|
||||||
|
},
|
||||||
|
y:sensitivity_y,
|
||||||
|
},
|
||||||
|
_=>{
|
||||||
|
Sensitivity::default()
|
||||||
|
},
|
||||||
|
};
|
||||||
|
UserSettings{
|
||||||
|
fov,
|
||||||
|
sensitivity,
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
UserSettings::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user