2019-04-15 17:51:26 +00:00
|
|
|
use config::{
|
|
|
|
Config,
|
|
|
|
ConfigError,
|
|
|
|
};
|
|
|
|
use serde_derive::{Serialize, Deserialize};
|
|
|
|
use glutin::VirtualKeyCode;
|
2019-04-16 16:06:23 +00:00
|
|
|
use toml;
|
|
|
|
use std::fs::File;
|
|
|
|
use std::io::prelude::*;
|
2019-04-16 17:41:39 +00:00
|
|
|
use std::default::Default;
|
2019-04-15 17:51:26 +00:00
|
|
|
|
2019-04-16 08:56:47 +00:00
|
|
|
/// Settings contains everything that can be configured in the Settings.toml file
|
2019-04-15 17:51:26 +00:00
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
2019-04-16 17:41:39 +00:00
|
|
|
#[serde(default)]
|
2019-04-15 17:51:26 +00:00
|
|
|
pub struct Settings {
|
|
|
|
pub controls: ControlSettings,
|
2019-04-18 17:40:29 +00:00
|
|
|
pub networking: NetworkingSettings,
|
2019-04-15 17:51:26 +00:00
|
|
|
}
|
|
|
|
|
2019-04-16 08:56:47 +00:00
|
|
|
/// ControlSettings contains keybindings
|
2019-04-15 17:51:26 +00:00
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
|
|
pub struct ControlSettings {
|
|
|
|
pub toggle_cursor: VirtualKeyCode,
|
|
|
|
pub escape: VirtualKeyCode,
|
|
|
|
pub enter: VirtualKeyCode,
|
|
|
|
pub move_forward: VirtualKeyCode,
|
|
|
|
pub move_left: VirtualKeyCode,
|
|
|
|
pub move_back: VirtualKeyCode,
|
|
|
|
pub move_right: VirtualKeyCode,
|
|
|
|
pub map: VirtualKeyCode,
|
|
|
|
pub bag: VirtualKeyCode,
|
|
|
|
pub quest_log: VirtualKeyCode,
|
|
|
|
pub character_window: VirtualKeyCode,
|
|
|
|
pub social: VirtualKeyCode,
|
|
|
|
pub spellbook: VirtualKeyCode,
|
|
|
|
pub settings: VirtualKeyCode,
|
|
|
|
pub help: VirtualKeyCode,
|
2019-04-20 15:17:29 +00:00
|
|
|
pub toggle_interface: VirtualKeyCode,
|
2019-04-15 17:51:26 +00:00
|
|
|
}
|
|
|
|
|
2019-04-18 17:40:29 +00:00
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
|
|
|
pub struct NetworkingSettings {
|
|
|
|
pub username: String,
|
|
|
|
pub servers: Vec<String>,
|
|
|
|
pub default_server: usize,
|
|
|
|
}
|
|
|
|
|
2019-04-16 17:41:39 +00:00
|
|
|
impl Default for Settings {
|
|
|
|
fn default() -> Self {
|
2019-04-16 08:56:47 +00:00
|
|
|
Settings {
|
|
|
|
controls: ControlSettings {
|
|
|
|
toggle_cursor: VirtualKeyCode::Tab,
|
|
|
|
escape: VirtualKeyCode::Escape,
|
|
|
|
enter: VirtualKeyCode::Return,
|
|
|
|
move_forward: VirtualKeyCode::W,
|
|
|
|
move_left: VirtualKeyCode::A,
|
|
|
|
move_back: VirtualKeyCode::S,
|
|
|
|
move_right: VirtualKeyCode::D,
|
|
|
|
map: VirtualKeyCode::M,
|
|
|
|
bag: VirtualKeyCode::B,
|
|
|
|
quest_log: VirtualKeyCode::L,
|
|
|
|
character_window: VirtualKeyCode::C,
|
|
|
|
social: VirtualKeyCode::O,
|
|
|
|
spellbook: VirtualKeyCode::P,
|
|
|
|
settings: VirtualKeyCode::N,
|
2019-04-16 17:41:39 +00:00
|
|
|
help: VirtualKeyCode::F1,
|
2019-04-20 15:17:29 +00:00
|
|
|
toggle_interface: VirtualKeyCode::F2,
|
2019-04-16 08:56:47 +00:00
|
|
|
},
|
2019-04-18 17:40:29 +00:00
|
|
|
networking: NetworkingSettings {
|
|
|
|
username: "Username".to_string(),
|
|
|
|
servers: vec!("server.veloren.net".to_string()),
|
|
|
|
default_server: 0,
|
|
|
|
},
|
2019-04-16 08:56:47 +00:00
|
|
|
}
|
|
|
|
}
|
2019-04-16 16:06:23 +00:00
|
|
|
|
2019-04-16 17:41:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Settings {
|
2019-04-15 17:51:26 +00:00
|
|
|
pub fn load() -> Result<Self, ConfigError> {
|
|
|
|
let mut config = Config::new();
|
2019-04-16 17:41:39 +00:00
|
|
|
config.merge(Config::try_from(&Settings::default())?);
|
2019-04-16 16:06:23 +00:00
|
|
|
config.merge(config::File::with_name("settings"))?;
|
2019-04-15 17:51:26 +00:00
|
|
|
config.try_into()
|
|
|
|
}
|
2019-04-16 16:06:23 +00:00
|
|
|
|
|
|
|
pub fn save_to_file(&self) -> std::io::Result<()> {
|
|
|
|
let mut config_file = File::create("settings.toml")?;
|
|
|
|
let s: &str = &toml::to_string_pretty(self).unwrap();
|
|
|
|
config_file.write_all(s.as_bytes()).unwrap();
|
|
|
|
Ok(())
|
|
|
|
}
|
2019-04-15 17:51:26 +00:00
|
|
|
}
|