Added HUD support in game launching

This commit is contained in:
Observer KRypt0n_ 2022-07-01 21:08:34 +02:00
parent 6cd2c326d8
commit eb2620f9cc
No known key found for this signature in database
GPG key ID: 844DA47BA25FE1E2
5 changed files with 60 additions and 41 deletions

54
src/lib/config/hud.rs Normal file
View file

@ -0,0 +1,54 @@
use std::collections::HashMap;
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum HUD {
None,
DXVK,
MangoHUD
}
impl Default for HUD {
fn default() -> Self {
Self::None
}
}
impl TryFrom<u32> for HUD {
type Error = String;
fn try_from(value: u32) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::None),
1 => Ok(Self::DXVK),
2 => Ok(Self::MangoHUD),
_ => Err(String::from("Failed to convert number to HUD enum"))
}
}
}
impl Into<u32> for HUD {
fn into(self) -> u32 {
match self {
Self::None => 0,
Self::DXVK => 1,
Self::MangoHUD => 2
}
}
}
impl HUD {
/// Get environment variables corresponding to used wine hud
pub fn get_env_vars(&self) -> HashMap<&str, &str> {
match self {
Self::None => HashMap::new(),
Self::DXVK => HashMap::from([
("DXVK_HUD", "1")
]),
Self::MangoHUD => HashMap::from([
("MANGOHUD", "1")
])
}
}
}

View file

@ -7,10 +7,10 @@ use serde::{Serialize, Deserialize};
use super::consts::*; use super::consts::*;
mod wine_hud; mod hud;
mod wine_sync; mod wine_sync;
pub use wine_hud::WineHUD; pub use hud::HUD;
pub use wine_sync::WineSync; pub use wine_sync::WineSync;
pub fn get() -> Result<Config, Error> { pub fn get() -> Result<Config, Error> {
@ -178,7 +178,7 @@ impl Default for Wine {
pub struct Enhancements { pub struct Enhancements {
pub fsr: Fsr, pub fsr: Fsr,
pub gamemode: bool, pub gamemode: bool,
pub hud: WineHUD pub hud: HUD
} }
#[derive(Debug, Clone, Copy, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Serialize, Deserialize)]

View file

@ -1,37 +0,0 @@
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum WineHUD {
None,
DXVK,
MangoHUD
}
impl Default for WineHUD {
fn default() -> Self {
Self::None
}
}
impl TryFrom<u32> for WineHUD {
type Error = String;
fn try_from(value: u32) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::None),
1 => Ok(Self::DXVK),
2 => Ok(Self::MangoHUD),
_ => Err(String::from("Failed to convert number to WineHUD enum"))
}
}
}
impl Into<u32> for WineHUD {
fn into(self) -> u32 {
match self {
Self::None => 0,
Self::DXVK => 1,
Self::MangoHUD => 2
}
}
}

View file

@ -96,7 +96,9 @@ pub fn run(debug: bool) -> Result<(), Error> {
} }
command.env("WINEPREFIX", &config.game.wine.prefix); command.env("WINEPREFIX", &config.game.wine.prefix);
command.envs(config.game.wine.sync.get_env_vars()); command.envs(config.game.wine.sync.get_env_vars());
command.envs(config.game.enhancements.hud.get_env_vars());
command.envs(config.game.environment) command.envs(config.game.environment)
.current_dir(config.game.path) .current_dir(config.game.path)

View file

@ -33,7 +33,7 @@ impl Page {
result.hud_combo.connect_selected_notify(|hud| { result.hud_combo.connect_selected_notify(|hud| {
if let Ok(mut config) = config::get() { if let Ok(mut config) = config::get() {
// TODO: show toast // TODO: show toast
config.game.enhancements.hud = config::WineHUD::try_from(hud.selected()).unwrap(); config.game.enhancements.hud = config::HUD::try_from(hud.selected()).unwrap();
config::update(config).unwrap(); config::update(config).unwrap();
} }