diff --git a/src/config/game/enhancements/fps_unlocker/config/mod.rs b/src/config/game/enhancements/fps_unlocker/config/mod.rs index 6cc380d..ab0d7ff 100644 --- a/src/config/game/enhancements/fps_unlocker/config/mod.rs +++ b/src/config/game/enhancements/fps_unlocker/config/mod.rs @@ -2,17 +2,21 @@ use serde::{Serialize, Deserialize}; use serde_json::Value as JsonValue; pub mod fps; +pub mod window_mode; pub mod prelude { pub use super::fps::Fps; + pub use super::window_mode::WindowMode; } +use prelude::*; + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { pub fps: u64, pub power_saving: bool, pub monitor: u64, - pub window_mode: u64, + pub window_mode: WindowMode, pub priority: u64 } @@ -22,7 +26,7 @@ impl Default for Config { fps: 120, power_saving: false, monitor: 1, - window_mode: 0, + window_mode: WindowMode::default(), priority: 3 } } @@ -49,7 +53,7 @@ impl From<&JsonValue> for Config { }, window_mode: match value.get("window_mode") { - Some(value) => value.as_u64().unwrap_or(default.window_mode), + Some(value) => WindowMode::from(value), None => default.window_mode }, diff --git a/src/config/game/enhancements/fps_unlocker/config/window_mode.rs b/src/config/game/enhancements/fps_unlocker/config/window_mode.rs new file mode 100644 index 0000000..a47df7f --- /dev/null +++ b/src/config/game/enhancements/fps_unlocker/config/window_mode.rs @@ -0,0 +1,46 @@ +use serde::{Serialize, Deserialize}; +use serde_json::Value as JsonValue; + +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub enum WindowMode { + None, + Popup, + Fullscreen +} + +impl Default for WindowMode { + fn default() -> Self { + Self::None + } +} + +impl From<&JsonValue> for WindowMode { + fn from(value: &JsonValue) -> Self { + serde_json::from_value(value.clone()).unwrap_or_default() + } +} + +impl TryFrom for WindowMode { + type Error = String; + + fn try_from(value: u32) -> Result { + match value { + 0 => Ok(Self::None), + 1 => Ok(Self::Popup), + 2 => Ok(Self::Fullscreen), + + _ => Err(String::from("Failed to convert number to WindowMode enum")) + } + } +} + +#[allow(clippy::from_over_into)] +impl Into for WindowMode { + fn into(self) -> u32 { + match self { + Self::None => 0, + Self::Popup => 1, + Self::Fullscreen => 2 + } + } +} diff --git a/src/fps_unlocker/config_schema.rs b/src/fps_unlocker/config_schema.rs index c32a5d4..deee15b 100644 --- a/src/fps_unlocker/config_schema.rs +++ b/src/fps_unlocker/config_schema.rs @@ -53,7 +53,9 @@ impl ConfigSchema { Self { FPSTarget: config.fps, UsePowerSave: config.power_saving, - Fullscreen: config.fullscreen, + PopupWindow: config.window_mode == 1, + Fullscreen: config.window_mode == 2, + MonitorNum: config.monitor, Priority: config.priority, ..Self::default()