2024-03-16 21:20:23 +00:00
|
|
|
use bevy::prelude::*;
|
2024-03-22 11:28:19 +00:00
|
|
|
use std::env;
|
2024-03-16 21:20:23 +00:00
|
|
|
|
2024-03-17 17:26:44 +00:00
|
|
|
#[derive(Resource)]
|
2024-03-16 21:20:23 +00:00
|
|
|
pub struct Settings {
|
2024-03-30 20:14:04 +00:00
|
|
|
pub dev_mode: bool,
|
2024-04-07 23:44:36 +00:00
|
|
|
pub god_mode: bool,
|
2024-03-16 21:20:23 +00:00
|
|
|
pub mute_sfx: bool,
|
|
|
|
pub mute_music: bool,
|
|
|
|
pub volume_sfx: u8,
|
|
|
|
pub volume_music: u8,
|
2024-03-30 15:27:56 +00:00
|
|
|
pub mouse_sensitivity: f32,
|
2024-04-08 01:15:45 +00:00
|
|
|
pub fov: f32,
|
|
|
|
pub fov_highspeed: f32,
|
|
|
|
pub zoom_fov: f32,
|
2024-04-05 21:38:20 +00:00
|
|
|
pub zoom_sensitivity_factor: f32,
|
2024-03-17 19:31:16 +00:00
|
|
|
pub font_size_hud: f32,
|
|
|
|
pub font_size_conversations: f32,
|
2024-03-17 21:28:10 +00:00
|
|
|
pub hud_active: bool,
|
2024-04-05 21:38:20 +00:00
|
|
|
pub is_zooming: bool,
|
2024-03-29 18:41:46 +00:00
|
|
|
pub third_person: bool,
|
2024-04-05 16:14:12 +00:00
|
|
|
pub key_selectobject: MouseButton,
|
2024-04-05 21:38:20 +00:00
|
|
|
pub key_zoom: MouseButton,
|
2024-03-18 03:39:26 +00:00
|
|
|
pub key_togglehud: KeyCode,
|
|
|
|
pub key_exit: KeyCode,
|
|
|
|
pub key_restart: KeyCode,
|
|
|
|
pub key_fullscreen: KeyCode,
|
|
|
|
pub key_forward: KeyCode,
|
|
|
|
pub key_back: KeyCode,
|
|
|
|
pub key_left: KeyCode,
|
|
|
|
pub key_right: KeyCode,
|
|
|
|
pub key_up: KeyCode,
|
|
|
|
pub key_down: KeyCode,
|
|
|
|
pub key_run: KeyCode,
|
|
|
|
pub key_stop: KeyCode,
|
2024-03-19 00:24:27 +00:00
|
|
|
pub key_interact: KeyCode,
|
2024-03-28 12:26:14 +00:00
|
|
|
pub key_vehicle: KeyCode,
|
2024-03-29 18:41:46 +00:00
|
|
|
pub key_camera: KeyCode,
|
2024-03-30 18:14:59 +00:00
|
|
|
pub key_rotate: KeyCode,
|
2024-03-30 18:36:43 +00:00
|
|
|
pub key_mouseup: KeyCode,
|
|
|
|
pub key_mousedown: KeyCode,
|
|
|
|
pub key_mouseleft: KeyCode,
|
|
|
|
pub key_mouseright: KeyCode,
|
|
|
|
pub key_rotateleft: KeyCode,
|
|
|
|
pub key_rotateright: KeyCode,
|
2024-03-20 01:03:42 +00:00
|
|
|
pub key_reply1: KeyCode,
|
|
|
|
pub key_reply2: KeyCode,
|
|
|
|
pub key_reply3: KeyCode,
|
|
|
|
pub key_reply4: KeyCode,
|
|
|
|
pub key_reply5: KeyCode,
|
|
|
|
pub key_reply6: KeyCode,
|
|
|
|
pub key_reply7: KeyCode,
|
|
|
|
pub key_reply8: KeyCode,
|
|
|
|
pub key_reply9: KeyCode,
|
|
|
|
pub key_reply10: KeyCode,
|
2024-04-07 23:44:36 +00:00
|
|
|
pub key_cheat_god_mode: KeyCode,
|
2024-04-01 03:25:35 +00:00
|
|
|
pub key_cheat_stop: KeyCode,
|
|
|
|
pub key_cheat_speed: KeyCode,
|
2024-04-01 18:37:32 +00:00
|
|
|
pub key_cheat_speed_backward: KeyCode,
|
2024-04-01 03:25:35 +00:00
|
|
|
pub key_cheat_pizza: KeyCode,
|
|
|
|
pub key_cheat_farview1: KeyCode,
|
|
|
|
pub key_cheat_farview2: KeyCode,
|
|
|
|
pub key_cheat_adrenaline_zero: KeyCode,
|
|
|
|
pub key_cheat_adrenaline_mid: KeyCode,
|
|
|
|
pub key_cheat_adrenaline_max: KeyCode,
|
2024-04-05 00:58:02 +00:00
|
|
|
pub key_cheat_die: KeyCode,
|
2024-03-16 21:20:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for Settings {
|
|
|
|
fn default() -> Self {
|
2024-03-30 20:14:04 +00:00
|
|
|
let dev_mode;
|
|
|
|
|
2024-03-28 19:54:34 +00:00
|
|
|
let default_mute_sfx = false;
|
2024-03-22 11:28:19 +00:00
|
|
|
let default_mute_music;
|
|
|
|
if let Ok(_) = env::var("CARGO") {
|
|
|
|
// Mute audio by default when run through `cargo`
|
|
|
|
default_mute_music = cfg!(debug_assertions);
|
2024-03-30 20:14:04 +00:00
|
|
|
|
|
|
|
// Enable dev mode when running `cargo run` without `--release`
|
|
|
|
dev_mode = cfg!(debug_assertions);
|
2024-03-22 11:28:19 +00:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
default_mute_music = false;
|
2024-03-30 20:14:04 +00:00
|
|
|
dev_mode = false;
|
2024-03-22 11:28:19 +00:00
|
|
|
}
|
2024-03-22 11:08:00 +00:00
|
|
|
|
2024-03-16 21:20:23 +00:00
|
|
|
Settings {
|
2024-03-30 20:14:04 +00:00
|
|
|
dev_mode: dev_mode,
|
2024-04-07 23:44:36 +00:00
|
|
|
god_mode: false,
|
2024-03-22 11:08:00 +00:00
|
|
|
mute_sfx: default_mute_sfx,
|
|
|
|
mute_music: default_mute_music,
|
2024-03-16 21:20:23 +00:00
|
|
|
volume_sfx: 100,
|
|
|
|
volume_music: 100,
|
2024-04-08 01:15:45 +00:00
|
|
|
mouse_sensitivity: 0.7,
|
|
|
|
fov: 50.0,
|
|
|
|
fov_highspeed: 25.0,
|
|
|
|
zoom_fov: 20.0,
|
2024-04-08 00:17:36 +00:00
|
|
|
zoom_sensitivity_factor: 0.25,
|
2024-03-17 19:31:16 +00:00
|
|
|
font_size_hud: 32.0,
|
|
|
|
font_size_conversations: 32.0,
|
2024-03-18 01:15:44 +00:00
|
|
|
hud_active: false,
|
2024-04-05 21:38:20 +00:00
|
|
|
is_zooming: false,
|
2024-03-29 18:41:46 +00:00
|
|
|
third_person: false,
|
2024-04-05 16:14:12 +00:00
|
|
|
key_selectobject: MouseButton::Left,
|
2024-04-05 21:38:20 +00:00
|
|
|
key_zoom: MouseButton::Right,
|
2024-03-18 03:39:26 +00:00
|
|
|
key_togglehud: KeyCode::Tab,
|
|
|
|
key_exit: KeyCode::Escape,
|
|
|
|
key_restart: KeyCode::F12,
|
|
|
|
key_fullscreen: KeyCode::F11,
|
|
|
|
key_forward: KeyCode::KeyW,
|
|
|
|
key_back: KeyCode::KeyS,
|
|
|
|
key_left: KeyCode::KeyA,
|
|
|
|
key_right: KeyCode::KeyD,
|
|
|
|
key_up: KeyCode::ShiftLeft,
|
|
|
|
key_down: KeyCode::ControlLeft,
|
|
|
|
key_run: KeyCode::KeyR,
|
|
|
|
key_stop: KeyCode::Space,
|
2024-03-19 00:24:27 +00:00
|
|
|
key_interact: KeyCode::KeyE,
|
2024-03-28 16:25:57 +00:00
|
|
|
key_vehicle: KeyCode::KeyQ,
|
2024-03-29 18:41:46 +00:00
|
|
|
key_camera: KeyCode::KeyF,
|
2024-03-30 18:14:59 +00:00
|
|
|
key_rotate: KeyCode::KeyR,
|
2024-03-30 18:36:43 +00:00
|
|
|
key_mouseup: KeyCode::KeyI,
|
|
|
|
key_mousedown: KeyCode::KeyK,
|
|
|
|
key_mouseleft: KeyCode::KeyJ,
|
|
|
|
key_mouseright: KeyCode::KeyL,
|
|
|
|
key_rotateleft: KeyCode::KeyU,
|
|
|
|
key_rotateright: KeyCode::KeyO,
|
2024-03-20 01:03:42 +00:00
|
|
|
key_reply1: KeyCode::Digit1,
|
|
|
|
key_reply2: KeyCode::Digit2,
|
|
|
|
key_reply3: KeyCode::Digit3,
|
|
|
|
key_reply4: KeyCode::Digit4,
|
|
|
|
key_reply5: KeyCode::Digit5,
|
|
|
|
key_reply6: KeyCode::Digit6,
|
|
|
|
key_reply7: KeyCode::Digit7,
|
|
|
|
key_reply8: KeyCode::Digit8,
|
|
|
|
key_reply9: KeyCode::Digit9,
|
|
|
|
key_reply10: KeyCode::Digit0,
|
2024-04-07 23:44:36 +00:00
|
|
|
key_cheat_god_mode: KeyCode::KeyG,
|
2024-04-01 03:25:35 +00:00
|
|
|
key_cheat_stop: KeyCode::KeyC,
|
|
|
|
key_cheat_speed: KeyCode::KeyV,
|
2024-04-01 18:37:32 +00:00
|
|
|
key_cheat_speed_backward: KeyCode::KeyB,
|
2024-04-04 22:23:14 +00:00
|
|
|
key_cheat_pizza: KeyCode::F8,
|
|
|
|
key_cheat_farview1: KeyCode::F9,
|
|
|
|
key_cheat_farview2: KeyCode::F10,
|
2024-04-01 03:25:35 +00:00
|
|
|
key_cheat_adrenaline_zero: KeyCode::F5,
|
|
|
|
key_cheat_adrenaline_mid: KeyCode::F6,
|
|
|
|
key_cheat_adrenaline_max: KeyCode::F7,
|
2024-04-05 00:58:02 +00:00
|
|
|
key_cheat_die: KeyCode::KeyZ,
|
2024-03-16 21:20:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Settings {
|
|
|
|
pub fn reset(&mut self) {
|
|
|
|
println!("Resetting settings!");
|
|
|
|
*self = Self::default();
|
|
|
|
}
|
2024-03-20 01:03:42 +00:00
|
|
|
|
|
|
|
pub fn get_reply_keys(&self) -> [KeyCode; 10] {
|
|
|
|
return [
|
|
|
|
self.key_reply1,
|
|
|
|
self.key_reply2,
|
|
|
|
self.key_reply3,
|
|
|
|
self.key_reply4,
|
|
|
|
self.key_reply5,
|
|
|
|
self.key_reply6,
|
|
|
|
self.key_reply7,
|
|
|
|
self.key_reply8,
|
|
|
|
self.key_reply9,
|
|
|
|
self.key_reply10,
|
|
|
|
];
|
|
|
|
}
|
2024-03-16 21:20:23 +00:00
|
|
|
}
|