From 3b3ffe30e9ca29346f42198c01b874236138c52d Mon Sep 17 00:00:00 2001 From: PersianKnight Date: Thu, 11 Mar 2021 22:09:30 +0330 Subject: [PATCH] Add Reset to Default Buttons for Interface, Gameplay and Sound Settings --- assets/voxygen/i18n/en/hud/hud_settings.ron | 3 + voxygen/src/hud/mod.rs | 32 ++++-- voxygen/src/hud/settings_window.rs | 69 ++++++++++++- voxygen/src/session.rs | 108 ++++++++++++++++++-- 4 files changed, 194 insertions(+), 18 deletions(-) diff --git a/assets/voxygen/i18n/en/hud/hud_settings.ron b/assets/voxygen/i18n/en/hud/hud_settings.ron index b208c000ca..5b24e859e1 100644 --- a/assets/voxygen/i18n/en/hud/hud_settings.ron +++ b/assets/voxygen/i18n/en/hud/hud_settings.ron @@ -36,6 +36,7 @@ "hud.settings.background_transparency": "Background Transparency", "hud.settings.chat_character_name": "Character Names in chat", "hud.settings.loading_tips": "Loading Screen Tips", + "hud.settings.reset_interface": "Reset to Defaults", "hud.settings.pan_sensitivity": "Pan Sensitivity", "hud.settings.zoom_sensitivity": "Zoom Sensitivity", @@ -46,6 +47,7 @@ "hud.settings.free_look_behavior": "Free look behavior", "hud.settings.auto_walk_behavior": "Auto walk behavior", "hud.settings.stop_auto_walk_on_input": "Stop auto walk on movement", + "hud.settings.reset_gameplay": "Reset to Defaults", "hud.settings.view_distance": "View Distance", "hud.settings.sprites_view_distance": "Sprites View Distance", @@ -91,6 +93,7 @@ "hud.settings.music_volume": "Music Volume", "hud.settings.sound_effect_volume": "Sound Effects Volume", "hud.settings.audio_device": "Audio Device", + "hud.settings.reset_sound": "Reset to Defaults", "hud.settings.awaitingkey": "Press a key...", "hud.settings.unbound": "None", diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 75c594ec98..784387de2f 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -407,8 +407,11 @@ pub enum Event { Quit, ChangeLanguage(Box), ChangeBinding(GameInput), - ResetBindings, - ResetGraphics, + ResetInterfaceSettings, + ResetGameplaySettings, + ResetKeyBindings, + ResetGraphicsSettings, + ResetAudioSettings, ChangeFreeLookBehavior(PressBehavior), ChangeRenderMode(Box), ChangeAutoWalkBehavior(PressBehavior), @@ -2516,9 +2519,6 @@ impl Hud { settings_window::Event::ChangeBinding(game_input) => { events.push(Event::ChangeBinding(game_input)); }, - settings_window::Event::ResetBindings => { - events.push(Event::ResetBindings); - }, settings_window::Event::ChangeFreeLookBehavior(behavior) => { events.push(Event::ChangeFreeLookBehavior(behavior)); }, @@ -2528,8 +2528,22 @@ impl Hud { settings_window::Event::ChangeStopAutoWalkOnInput(state) => { events.push(Event::ChangeStopAutoWalkOnInput(state)); }, - settings_window::Event::ResetGraphics => { - events.push(Event::ResetGraphics); + settings_window::Event::ResetInterfaceSettings => { + self.show.help = true; + self.show.debug = false; + events.push(Event::ResetInterfaceSettings); + }, + settings_window::Event::ResetGameplaySettings => { + events.push(Event::ResetGameplaySettings); + }, + settings_window::Event::ResetKeyBindings => { + events.push(Event::ResetKeyBindings); + }, + settings_window::Event::ResetGraphicsSettings => { + events.push(Event::ResetGraphicsSettings); + }, + settings_window::Event::ResetAudioSettings => { + events.push(Event::ResetAudioSettings); }, } } @@ -2893,6 +2907,10 @@ impl Hud { pub fn new_notification(&mut self, msg: Notification) { self.new_notifications.push_back(msg); } + pub fn set_scaling_mode(&mut self, scale_mode: ScaleMode) { + self.ui.set_scaling_mode(scale_mode); + } + pub fn scale_change(&mut self, scale_change: ScaleChange) -> ScaleMode { let scale_mode = match scale_change { ScaleChange::Adjust(scale) => ScaleMode::Absolute(scale), diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index 40079902d9..ff614207d8 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -59,8 +59,11 @@ widget_ids! { settings_scrollbar, controls_texts[], controls_buttons[], + reset_interface_button, + reset_gameplay_button, reset_controls_button, reset_graphics_button, + reset_sound_button, controls_alignment_rectangle, button_help, button_help2, @@ -329,8 +332,11 @@ pub enum Event { SpeechBubbleIcon(bool), ChangeLanguage(Box), ChangeBinding(GameInput), - ResetBindings, - ResetGraphics, + ResetInterfaceSettings, + ResetGameplaySettings, + ResetKeyBindings, + ResetGraphicsSettings, + ResetAudioSettings, ChangeFreeLookBehavior(PressBehavior), ChangeAutoWalkBehavior(PressBehavior), ChangeStopAutoWalkOnInput(bool), @@ -1308,6 +1314,23 @@ impl<'a> Widget for SettingsWindow<'a> { .set(state.ids.chat_char_name_text, ui); // TODO Show account name in chat + + // Reset the interface settings to the default settings + if Button::image(self.imgs.button) + .w_h(31.0 * 5.0, 12.0 * 2.0) + .hover_image(self.imgs.button_hover) + .press_image(self.imgs.button_press) + .down_from(state.ids.buff_pos_map_button, 12.0) + .label(&self.localized_strings.get("hud.settings.reset_interface")) + .label_font_size(self.fonts.cyri.scale(14)) + .label_color(TEXT_COLOR) + .label_font_id(self.fonts.cyri.conrod_id) + .label_y(Relative::Scalar(2.0)) + .set(state.ids.reset_interface_button, ui) + .was_clicked() + { + events.push(Event::ResetInterfaceSettings); + } } // 2) Gameplay Tab -------------------------------- @@ -1621,6 +1644,23 @@ impl<'a> Widget for SettingsWindow<'a> { .graphics_for(state.ids.stop_auto_walk_on_input_button) .color(TEXT_COLOR) .set(state.ids.stop_auto_walk_on_input_label, ui); + + // Reset the gameplay settings to the default settings + if Button::image(self.imgs.button) + .w_h(31.0 * 5.0, 12.0 * 2.0) + .hover_image(self.imgs.button_hover) + .press_image(self.imgs.button_press) + .down_from(state.ids.free_look_behavior_list, 12.0) + .label(&self.localized_strings.get("hud.settings.reset_gameplay")) + .label_font_size(self.fonts.cyri.scale(14)) + .label_color(TEXT_COLOR) + .label_font_id(self.fonts.cyri.conrod_id) + .label_y(Relative::Scalar(2.0)) + .set(state.ids.reset_gameplay_button, ui) + .was_clicked() + { + events.push(Event::ResetGameplaySettings); + } } // 3) Controls Tab -------------------------------- @@ -1729,6 +1769,8 @@ impl<'a> Widget for SettingsWindow<'a> { // Set the previous id to the current one for the next cycle previous_element_id = Some(text_id); } + + // Reset the KeyBindings settings to the default settings if let Some(prev_id) = previous_element_id { let key_string = self.localized_strings.get("hud.settings.reset_keybinds"); let button_widget = Button::new() @@ -1743,7 +1785,7 @@ impl<'a> Widget for SettingsWindow<'a> { .label_y(Relative::Scalar(3.0)) .set(state.ids.reset_controls_button, ui); if button_widget.was_clicked() { - events.push(Event::ResetBindings); + events.push(Event::ResetKeyBindings); } previous_element_id = Some(state.ids.reset_controls_button) } @@ -2712,7 +2754,7 @@ impl<'a> Widget for SettingsWindow<'a> { )); } - // Save current screen size + // Reset the graphics settings to the default settings if Button::image(self.imgs.button) .w_h(31.0 * 5.0, 12.0 * 2.0) .hover_image(self.imgs.button_hover) @@ -2726,7 +2768,7 @@ impl<'a> Widget for SettingsWindow<'a> { .set(state.ids.reset_graphics_button, ui) .was_clicked() { - events.push(Event::ResetGraphics); + events.push(Event::ResetGraphicsSettings); } } @@ -2833,6 +2875,23 @@ impl<'a> Widget for SettingsWindow<'a> { // let new_val = device_list[clicked].clone(); // events.push(Event::ChangeAudioDevice(new_val)); //} + + // Reset the sound settings to the default settings + if Button::image(self.imgs.button) + .w_h(31.0 * 5.0, 12.0 * 2.0) + .hover_image(self.imgs.button_hover) + .press_image(self.imgs.button_press) + .down_from(state.ids.sfx_volume_slider, 12.0) + .label(&self.localized_strings.get("hud.settings.reset_sound")) + .label_font_size(self.fonts.cyri.scale(14)) + .label_color(TEXT_COLOR) + .label_font_id(self.fonts.cyri.conrod_id) + .label_y(Relative::Scalar(2.0)) + .set(state.ids.reset_sound_button, ui) + .was_clicked() + { + events.push(Event::ResetAudioSettings); + } } // 5) Languages Tab ----------------------------------- diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index 7e80286eb3..ef3a3755c6 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -38,7 +38,10 @@ use crate::{ menu::char_selection::CharSelectionState, render::Renderer, scene::{camera, CameraMode, Scene, SceneData}, - settings::{ControlSettings, GraphicsSettings, Settings}, + settings::{ + AudioSettings, ControlSettings, GamepadSettings, GameplaySettings, GraphicsSettings, + Settings, + }, window::{AnalogGameInput, Event, GameInput}, Direction, Error, GlobalState, PlayState, PlayStateResult, }; @@ -1320,10 +1323,6 @@ impl PlayState for SessionState { HudEvent::ChangeBinding(game_input) => { global_state.window.set_keybinding_mode(game_input); }, - HudEvent::ResetBindings => { - global_state.settings.controls = ControlSettings::default(); - global_state.settings.save_to_file_warn(); - }, HudEvent::ChangeFreeLookBehavior(behavior) => { global_state.settings.gameplay.free_look_behavior = behavior; }, @@ -1362,7 +1361,97 @@ impl PlayState for SessionState { global_state.settings.gameplay.minimap_face_north = state; global_state.settings.save_to_file_warn(); }, - HudEvent::ResetGraphics => { + HudEvent::ResetInterfaceSettings => { + // Load Defaults + let default = GameplaySettings::default(); + // General + //global_state.settings.gameplay.intro_show = default.intro_show; + global_state.settings.gameplay.loading_tips = default.loading_tips; + global_state.settings.gameplay.toggle_debug = default.toggle_debug; + // UI-Scale + global_state.settings.gameplay.ui_scale = default.ui_scale; + self.hud.set_scaling_mode(default.ui_scale); + // Crosshair + global_state.settings.gameplay.crosshair_type = default.crosshair_type; + global_state.settings.gameplay.crosshair_transp = default.crosshair_transp; + //Energybar Numbers + global_state.settings.gameplay.bar_numbers = default.bar_numbers; + // Hotbar + global_state.settings.gameplay.xp_bar = default.xp_bar; + global_state.settings.gameplay.shortcut_numbers = default.shortcut_numbers; + global_state.settings.gameplay.buff_position = default.buff_position; + // Scrolling Combat Text + global_state.settings.gameplay.sct = default.sct; + global_state.settings.gameplay.sct_player_batch = default.sct_player_batch; + global_state.settings.gameplay.sct_damage_batch = default.sct_damage_batch; + //Speech Bubble + global_state.settings.gameplay.speech_bubble_dark_mode = + default.speech_bubble_dark_mode; + global_state.settings.gameplay.speech_bubble_icon = + default.speech_bubble_icon; + // Chat + global_state.settings.gameplay.chat_transp = default.chat_transp; + global_state.settings.gameplay.chat_character_name = + default.chat_character_name; + // Map + global_state.settings.gameplay.map_zoom = default.map_zoom; + global_state.settings.gameplay.map_drag = default.map_drag; + global_state.settings.gameplay.map_show_difficulty = + default.map_show_difficulty; + global_state.settings.gameplay.map_show_towns = default.map_show_towns; + global_state.settings.gameplay.map_show_dungeons = + default.map_show_dungeons; + global_state.settings.gameplay.map_show_castles = default.map_show_castles; + global_state.settings.gameplay.map_show_caves = default.map_show_caves; + global_state.settings.gameplay.map_show_trees = default.map_show_trees; + global_state.settings.gameplay.minimap_show = default.minimap_show; + global_state.settings.gameplay.minimap_face_north = + default.minimap_face_north; + // Save to File + global_state.settings.save_to_file_warn(); + }, + HudEvent::ResetGameplaySettings => { + // Load Defaults + let default = GameplaySettings::default(); + // Pan Sensitivity + global_state.window.pan_sensitivity = default.pan_sensitivity; + global_state.settings.gameplay.pan_sensitivity = default.pan_sensitivity; + // Zoom Sensitivity + global_state.window.zoom_sensitivity = default.zoom_sensitivity; + global_state.settings.gameplay.zoom_sensitivity = default.zoom_sensitivity; + // Invert Scroll Zoom + global_state.window.zoom_inversion = default.zoom_inversion; + global_state.settings.gameplay.zoom_inversion = default.zoom_inversion; + // Invert Mouse Y Axis + global_state.window.mouse_y_inversion = default.mouse_y_inversion; + global_state.settings.gameplay.mouse_y_inversion = + default.mouse_y_inversion; + // Invert Controller Y Axis + let default_gamepad = GamepadSettings::default(); + global_state.window.controller_settings.pan_invert_y = + default_gamepad.pan_invert_y; + global_state.settings.controller.pan_invert_y = + default_gamepad.pan_invert_y; + // Camera Smoothing + global_state.settings.gameplay.smooth_pan_enable = + default.smooth_pan_enable; + // Free Look Behavior + global_state.settings.gameplay.free_look_behavior = + default.free_look_behavior; + // Auto Walk Behavior + global_state.settings.gameplay.auto_walk_behavior = + default.auto_walk_behavior; + // Stop Auto Walk on Movement + global_state.settings.gameplay.stop_auto_walk_on_input = + default.stop_auto_walk_on_input; + // Save to File + global_state.settings.save_to_file_warn(); + }, + HudEvent::ResetKeyBindings => { + global_state.settings.controls = ControlSettings::default(); + global_state.settings.save_to_file_warn(); + }, + HudEvent::ResetGraphicsSettings => { global_state.settings.graphics = GraphicsSettings::default(); global_state.settings.save_to_file_warn(); let graphics = &global_state.settings.graphics; @@ -1388,6 +1477,13 @@ impl PlayState for SessionState { // Window size global_state.window.set_size(graphics.window_size.into()); }, + HudEvent::ResetAudioSettings => { + global_state.settings.audio = AudioSettings::default(); + global_state.settings.save_to_file_warn(); + let audio = &global_state.settings.audio; + global_state.audio.set_music_volume(audio.music_volume); + global_state.audio.set_sfx_volume(audio.sfx_volume); + }, } }