From 6605c2657f08d77bb2b142389815aa3f4b35b89e Mon Sep 17 00:00:00 2001 From: Mckol Date: Mon, 9 May 2022 03:11:34 +0200 Subject: [PATCH 01/13] Added mute buttons for all of the audio sliders in settings --- .../element/ui/generic/buttons/mute_btn.png | 3 + .../ui/generic/buttons/mute_btn_hover.png | 3 + .../element/ui/generic/buttons/muted_btn.png | 3 + .../ui/generic/buttons/muted_btn_hover.png | 3 + voxygen/src/hud/img_ids.rs | 7 + voxygen/src/hud/settings_window/sound.rs | 127 +++++++++++++++--- voxygen/src/main.rs | 8 +- voxygen/src/run.rs | 10 +- voxygen/src/session/settings_change.rs | 78 +++++++++-- voxygen/src/settings/audio.rs | 38 ++++-- 10 files changed, 232 insertions(+), 48 deletions(-) create mode 100644 assets/voxygen/element/ui/generic/buttons/mute_btn.png create mode 100644 assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png create mode 100644 assets/voxygen/element/ui/generic/buttons/muted_btn.png create mode 100644 assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn.png b/assets/voxygen/element/ui/generic/buttons/mute_btn.png new file mode 100644 index 0000000000..dedca5520c --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af54ab92914772171fe25abb02b79bda3b2fab8bbf3491f6d50dfa3ab4a62825 +size 9711 diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png new file mode 100644 index 0000000000..2efe112e80 --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a3cb4d6bf5262474233e1df5799b30d00bc145b180d6f121307ca8ede3b6b3c +size 9578 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn.png b/assets/voxygen/element/ui/generic/buttons/muted_btn.png new file mode 100644 index 0000000000..4c75976525 --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2b2a9f0cbd164f066fe8d49524f5b08ec3e5b3f3070200fd0c3e1dcb8557f96 +size 8151 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png new file mode 100644 index 0000000000..91b3973e0b --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7412295437dc9dcde313d436fd84830e580506c52e5d7ff9c2622d2126075783 +size 8007 diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 19a36b0455..4153bee932 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -556,6 +556,13 @@ image_ids! { button_hover: "voxygen.element.ui.generic.buttons.button_hover", button_press: "voxygen.element.ui.generic.buttons.button_press", + // Mute Buttons + button_mute: "voxygen.element.ui.generic.buttons.mute_btn", + button_mute_hover: "voxygen.element.ui.generic.buttons.mute_btn_hover", + button_muted: "voxygen.element.ui.generic.buttons.muted_btn", + button_muted_hover: "voxygen.element.ui.generic.buttons.muted_btn_hover", + + // Enemy Healthbar enemy_health: "voxygen.element.ui.generic.frames.enemybar", enemy_health_bg: "voxygen.element.ui.generic.frames.enemybar_bg", diff --git a/voxygen/src/hud/settings_window/sound.rs b/voxygen/src/hud/settings_window/sound.rs index a575753b49..ba361f3376 100644 --- a/voxygen/src/hud/settings_window/sound.rs +++ b/voxygen/src/hud/settings_window/sound.rs @@ -3,7 +3,7 @@ use super::{RESET_BUTTONS_HEIGHT, RESET_BUTTONS_WIDTH}; use crate::{ hud::{img_ids::Imgs, TEXT_COLOR}, session::settings_change::{Audio as AudioChange, Audio::*}, - ui::{fonts::Fonts, ImageSlider}, + ui::{fonts::Fonts, ImageSlider, ToggleButton}, GlobalState, }; use conrod_core::{ @@ -22,18 +22,23 @@ widget_ids! { master_volume_text, master_volume_slider, master_volume_number, + master_volume_muted, inactive_master_volume_text, inactive_master_volume_slider, inactive_master_volume_number, + inactive_master_volume_muted, music_volume_text, music_volume_slider, music_volume_number, + music_volume_muted, sfx_volume_text, sfx_volume_slider, sfx_volume_number, + sfx_volume_muted, ambience_volume_text, ambience_volume_slider, ambience_volume_number, + ambience_volume_muted, music_spacing_text, music_spacing_slider, music_spacing_number, @@ -116,14 +121,14 @@ impl<'a> Widget for Sound<'a> { .set(state.ids.master_volume_text, ui); // Master Volume Slider if let Some(new_val) = ImageSlider::continuous( - self.global_state.settings.audio.master_volume, + self.global_state.settings.audio.master_volume.volume, 0.0, 1.0, self.imgs.slider_indicator, self.imgs.slider, ) .w_h(104.0, 22.0) - .down_from(state.ids.master_volume_text, 10.0) + .right_from(state.ids.master_volume_muted, 8.0) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -134,13 +139,26 @@ impl<'a> Widget for Sound<'a> { // Master Volume Number Text::new(&format!( "{:2.0}%", - self.global_state.settings.audio.master_volume * 100.0 + self.global_state.settings.audio.master_volume.volume * 100.0 )) .right_from(state.ids.master_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.master_volume_number, ui); + // Master Volume Muted Indicator + let master_muted = ToggleButton::new( + self.global_state.settings.audio.master_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.master_volume_text, 10.0) + .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .set(state.ids.master_volume_muted, ui); + if master_muted != self.global_state.settings.audio.master_volume.muted { + events.push(MuteMasterVolume(master_muted)); + } // Master Volume (inactive window) Text::new( @@ -148,21 +166,25 @@ impl<'a> Widget for Sound<'a> { .localized_strings .get_msg("hud-settings-inactive_master_volume_perc"), ) - .down_from(state.ids.master_volume_slider, 10.0) + .down_from(state.ids.master_volume_muted, 10.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.inactive_master_volume_text, ui); // Master Volume (inactive window) Slider if let Some(new_val) = ImageSlider::continuous( - self.global_state.settings.audio.inactive_master_volume_perc, + self.global_state + .settings + .audio + .inactive_master_volume_perc + .volume, 0.0, 1.0, self.imgs.slider_indicator, self.imgs.slider, ) .w_h(104.0, 22.0) - .down_from(state.ids.inactive_master_volume_text, 10.0) + .right_from(state.ids.inactive_master_volume_muted, 8.0) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -173,31 +195,60 @@ impl<'a> Widget for Sound<'a> { // Master Volume (inactive window) Number Text::new(&format!( "{:2.0}%", - self.global_state.settings.audio.inactive_master_volume_perc * 100.0 + self.global_state + .settings + .audio + .inactive_master_volume_perc + .volume + * 100.0 )) .right_from(state.ids.inactive_master_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.inactive_master_volume_number, ui); + // Master Volume (inactive window) Muted Indicator + let inactive_master_muted = ToggleButton::new( + self.global_state + .settings + .audio + .inactive_master_volume_perc + .muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.inactive_master_volume_text, 10.0) + .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .set(state.ids.inactive_master_volume_muted, ui); + if inactive_master_muted + != self + .global_state + .settings + .audio + .inactive_master_volume_perc + .muted + { + events.push(MuteInactiveMasterVolume(inactive_master_muted)); + } // Music Volume Text::new(&self.localized_strings.get_msg("hud-settings-music_volume")) - .down_from(state.ids.inactive_master_volume_slider, 10.0) + .down_from(state.ids.inactive_master_volume_muted, 10.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.music_volume_text, ui); // Music Volume Slider if let Some(new_val) = ImageSlider::continuous( - self.global_state.settings.audio.music_volume, + self.global_state.settings.audio.music_volume.volume, 0.0, 1.0, self.imgs.slider_indicator, self.imgs.slider, ) .w_h(104.0, 22.0) - .down_from(state.ids.music_volume_text, 10.0) + .right_from(state.ids.music_volume_muted, 8.0) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -208,13 +259,26 @@ impl<'a> Widget for Sound<'a> { // Music Volume Number Text::new(&format!( "{:2.0}%", - self.global_state.settings.audio.music_volume * 100.0 + self.global_state.settings.audio.music_volume.volume * 100.0 )) .right_from(state.ids.music_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.music_volume_number, ui); + // Music Muted Indicator + let music_muted = ToggleButton::new( + self.global_state.settings.audio.music_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.music_volume_text, 10.0) + .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .set(state.ids.music_volume_muted, ui); + if music_muted != self.global_state.settings.audio.music_volume.muted { + events.push(MuteMusicVolume(music_muted)); + } // SFX Volume Text::new( @@ -222,21 +286,21 @@ impl<'a> Widget for Sound<'a> { .localized_strings .get_msg("hud-settings-sound_effect_volume"), ) - .down_from(state.ids.music_volume_slider, 10.0) + .down_from(state.ids.music_volume_muted, 10.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.sfx_volume_text, ui); // SFX Volume Slider if let Some(new_val) = ImageSlider::continuous( - self.global_state.settings.audio.sfx_volume, + self.global_state.settings.audio.sfx_volume.volume, 0.0, 1.0, self.imgs.slider_indicator, self.imgs.slider, ) .w_h(104.0, 22.0) - .down_from(state.ids.sfx_volume_text, 10.0) + .right_from(state.ids.sfx_volume_muted, 8.0) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -247,13 +311,27 @@ impl<'a> Widget for Sound<'a> { // SFX Volume Number Text::new(&format!( "{:2.0}%", - self.global_state.settings.audio.sfx_volume * 100.0 + self.global_state.settings.audio.sfx_volume.volume * 100.0 )) .right_from(state.ids.sfx_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.sfx_volume_number, ui); + // SFX Volume Muted Indicator + let sfx_muted = ToggleButton::new( + self.global_state.settings.audio.sfx_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.sfx_volume_text, 10.0) + .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .set(state.ids.sfx_volume_muted, ui); + if sfx_muted != self.global_state.settings.audio.sfx_volume.muted { + events.push(MuteSfxVolume(sfx_muted)); + } + // Ambience Volume Text::new( &self @@ -267,7 +345,7 @@ impl<'a> Widget for Sound<'a> { .set(state.ids.ambience_volume_text, ui); // Ambience Volume Slider if let Some(new_val) = ImageSlider::continuous( - self.global_state.settings.audio.ambience_volume, + self.global_state.settings.audio.ambience_volume.volume, 0.0, 1.0, self.imgs.slider_indicator, @@ -285,13 +363,26 @@ impl<'a> Widget for Sound<'a> { // Ambience Volume Number Text::new(&format!( "{:2.0}%", - self.global_state.settings.audio.ambience_volume * 100.0 + self.global_state.settings.audio.ambience_volume.volume * 100.0 )) .right_from(state.ids.ambience_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.ambience_volume_number, ui); + // Ambience Volume Muted Indicator + let ambience_muted = ToggleButton::new( + self.global_state.settings.audio.ambience_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.ambience_volume_text, 10.0) + .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .set(state.ids.ambience_volume_muted, ui); + if ambience_muted != self.global_state.settings.audio.ambience_volume.muted { + events.push(MuteAmbienceVolume(ambience_muted)); + } // Music spacing Text::new(&self.localized_strings.get_msg("hud-settings-music_spacing")) diff --git a/voxygen/src/main.rs b/voxygen/src/main.rs index 4e3f8ae100..0f0e76cfef 100644 --- a/voxygen/src/main.rs +++ b/voxygen/src/main.rs @@ -230,10 +230,10 @@ fn main() { // AudioOutput::Device(ref dev) => Some(dev.clone()), }; - audio.set_master_volume(settings.audio.master_volume); - audio.set_music_volume(settings.audio.music_volume); - audio.set_sfx_volume(settings.audio.sfx_volume); - audio.set_ambience_volume(settings.audio.ambience_volume); + audio.set_master_volume(settings.audio.master_volume.get_checked()); + audio.set_music_volume(settings.audio.music_volume.get_checked()); + audio.set_sfx_volume(settings.audio.sfx_volume.get_checked()); + audio.set_ambience_volume(settings.audio.ambience_volume.get_checked()); audio.set_music_spacing(settings.audio.music_spacing); // Load the profile. diff --git a/voxygen/src/run.rs b/voxygen/src/run.rs index 64a09ecd09..472eb4bbcc 100644 --- a/voxygen/src/run.rs +++ b/voxygen/src/run.rs @@ -89,10 +89,14 @@ pub fn run(mut global_state: GlobalState, event_loop: EventLoop) { if let winit::event::WindowEvent::Focused(focused) = event { global_state.audio.set_master_volume(if focused { - global_state.settings.audio.master_volume + global_state.settings.audio.master_volume.get_checked() } else { - global_state.settings.audio.inactive_master_volume_perc - * global_state.settings.audio.master_volume + global_state + .settings + .audio + .inactive_master_volume_perc + .get_checked() + * global_state.settings.audio.master_volume.get_checked() }); } diff --git a/voxygen/src/session/settings_change.rs b/voxygen/src/session/settings_change.rs index 4c82431be8..56f413e996 100644 --- a/voxygen/src/session/settings_change.rs +++ b/voxygen/src/session/settings_change.rs @@ -8,8 +8,8 @@ use crate::{ }, render::RenderMode, settings::{ - AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings, GameplaySettings, - GraphicsSettings, InterfaceSettings, + audio::AudioVolume, AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings, + GameplaySettings, GraphicsSettings, InterfaceSettings, }, window::FullScreenSettings, GlobalState, @@ -19,10 +19,15 @@ use i18n::{LanguageMetadata, LocalizationHandle}; #[derive(Clone)] pub enum Audio { AdjustMasterVolume(f32), + MuteMasterVolume(bool), AdjustInactiveMasterVolume(f32), + MuteInactiveMasterVolume(bool), AdjustMusicVolume(f32), + MuteMusicVolume(bool), AdjustSfxVolume(f32), + MuteSfxVolume(bool), AdjustAmbienceVolume(f32), + MuteAmbienceVolume(bool), AdjustMusicSpacing(f32), //ChangeAudioDevice(String), ResetAudioSettings, @@ -194,31 +199,73 @@ settings_change_from!(Networking); impl SettingsChange { pub fn process(self, global_state: &mut GlobalState, session_state: &mut SessionState) { let mut settings = &mut global_state.settings; + match self { SettingsChange::Audio(audio_change) => { + fn update_volume(audio: &mut AudioVolume, volume: f32) -> f32 { + audio.volume = volume; + audio.get_checked() + } + fn update_muted(audio: &mut AudioVolume, muted: bool) -> f32 { + audio.muted = muted; + audio.get_checked() + } + match audio_change { Audio::AdjustMasterVolume(master_volume) => { - global_state.audio.set_master_volume(master_volume); + let volume_checked = + update_volume(&mut settings.audio.master_volume, master_volume); - settings.audio.master_volume = master_volume; + global_state.audio.set_master_volume(volume_checked); + }, + Audio::MuteMasterVolume(master_muted) => { + let volume_checked = + update_muted(&mut settings.audio.master_volume, master_muted); + + global_state.audio.set_master_volume(volume_checked); }, Audio::AdjustInactiveMasterVolume(inactive_master_volume_perc) => { - settings.audio.inactive_master_volume_perc = inactive_master_volume_perc; + settings.audio.inactive_master_volume_perc.volume = + inactive_master_volume_perc; + }, + Audio::MuteInactiveMasterVolume(inactive_master_volume_muted) => { + settings.audio.inactive_master_volume_perc.muted = + inactive_master_volume_muted; }, Audio::AdjustMusicVolume(music_volume) => { - global_state.audio.set_music_volume(music_volume); + let volume_checked = + update_volume(&mut settings.audio.music_volume, music_volume); - settings.audio.music_volume = music_volume; + global_state.audio.set_music_volume(volume_checked); + }, + Audio::MuteMusicVolume(music_muted) => { + let volume_checked = + update_muted(&mut settings.audio.music_volume, music_muted); + + global_state.audio.set_music_volume(volume_checked); }, Audio::AdjustSfxVolume(sfx_volume) => { - global_state.audio.set_sfx_volume(sfx_volume); + let volume_checked = + update_volume(&mut settings.audio.sfx_volume, sfx_volume); - settings.audio.sfx_volume = sfx_volume; + global_state.audio.set_sfx_volume(volume_checked); + }, + Audio::MuteSfxVolume(sfx_muted) => { + let volume_checked = + update_muted(&mut settings.audio.sfx_volume, sfx_muted); + + global_state.audio.set_sfx_volume(volume_checked); }, Audio::AdjustAmbienceVolume(ambience_volume) => { global_state.audio.set_ambience_volume(ambience_volume); - settings.audio.ambience_volume = ambience_volume; + settings.audio.ambience_volume.volume = ambience_volume; + }, + Audio::MuteAmbienceVolume(ambience_muted) => { + let volume_checked = + update_muted(&mut settings.audio.ambience_volume, ambience_muted); + + global_state.audio.set_ambience_volume(volume_checked); }, Audio::AdjustMusicSpacing(multiplier) => { global_state.audio.set_music_spacing(multiplier); @@ -232,9 +279,14 @@ impl SettingsChange { //}, Audio::ResetAudioSettings => { settings.audio = AudioSettings::default(); - let audio = &settings.audio; - global_state.audio.set_music_volume(audio.music_volume); - global_state.audio.set_sfx_volume(audio.sfx_volume); + + let audio = &mut global_state.audio; + + // TODO: check if updating the master volume is necessary + // (it wasn't done before) + audio.set_master_volume(settings.audio.master_volume.get_checked()); + audio.set_music_volume(settings.audio.music_volume.get_checked()); + audio.set_sfx_volume(settings.audio.sfx_volume.get_checked()); }, } }, diff --git a/voxygen/src/settings/audio.rs b/voxygen/src/settings/audio.rs index 11758daa9f..7e43300b3a 100644 --- a/voxygen/src/settings/audio.rs +++ b/voxygen/src/settings/audio.rs @@ -15,17 +15,35 @@ pub enum AudioOutput { impl AudioOutput { pub fn is_enabled(&self) -> bool { !matches!(self, Self::Off) } } + +#[derive(Clone, Copy, Debug, Serialize, Deserialize)] +pub struct AudioVolume { + pub volume: f32, + pub muted: bool, +} + +impl AudioVolume { + pub fn new(volume: f32, muted: bool) -> Self { Self { volume, muted } } + + pub fn get_checked(&self) -> f32 { + match self.muted { + true => 0.0, + false => self.volume, + } + } +} + /// `AudioSettings` controls the volume of different audio subsystems and which /// device is used. #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(default)] pub struct AudioSettings { - pub master_volume: f32, + pub master_volume: AudioVolume, #[serde(rename = "inactive_master_volume")] - pub inactive_master_volume_perc: f32, - pub music_volume: f32, - pub sfx_volume: f32, - pub ambience_volume: f32, + pub inactive_master_volume_perc: AudioVolume, + pub music_volume: AudioVolume, + pub sfx_volume: AudioVolume, + pub ambience_volume: AudioVolume, pub num_sfx_channels: usize, pub num_ui_channels: usize, pub music_spacing: f32, @@ -37,11 +55,11 @@ pub struct AudioSettings { impl Default for AudioSettings { fn default() -> Self { Self { - master_volume: 1.0, - inactive_master_volume_perc: 0.5, - music_volume: 0.25, - sfx_volume: 0.6, - ambience_volume: 0.6, + master_volume: AudioVolume::new(1.0, false), + inactive_master_volume_perc: AudioVolume::new(0.5, false), + music_volume: AudioVolume::new(0.4, false), + sfx_volume: AudioVolume::new(0.6, false), + ambience_volume: AudioVolume::new(0.6, false), num_sfx_channels: 60, num_ui_channels: 10, music_spacing: 1.0, From e4b213cac549cba6837552c9936782e0d4425795 Mon Sep 17 00:00:00 2001 From: Mckol Date: Mon, 9 May 2022 11:55:18 +0200 Subject: [PATCH 02/13] Added a keybind for muting the music [F8] --- voxygen/src/game_input.rs | 2 ++ voxygen/src/hud/mod.rs | 13 ++++++++++++- voxygen/src/settings/control.rs | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/voxygen/src/game_input.rs b/voxygen/src/game_input.rs index 537e954f26..c48a08c1aa 100644 --- a/voxygen/src/game_input.rs +++ b/voxygen/src/game_input.rs @@ -152,6 +152,8 @@ pub enum GameInput { SpectateSpeedBoost, #[strum(serialize = "gameinput-spectateviewpoint")] SpectateViewpoint, + #[strum(serialize = "gameinput-mute-music")] + MuteMusic, } impl GameInput { diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 5d950626d1..d03d2f969b 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -67,7 +67,9 @@ use crate::{ }, session::{ interactable::Interactable, - settings_change::{Chat as ChatChange, Interface as InterfaceChange, SettingsChange}, + settings_change::{ + Audio, Chat as ChatChange, Interface as InterfaceChange, SettingsChange, + }, }, settings::chat::ChatFilter, ui::{ @@ -4187,6 +4189,15 @@ impl Hud { GameInput::MapZoomOut if state => { handle_map_zoom(0.5, self.world_map.1, &self.show, global_state) }, + GameInput::MuteMusic if state => { + self.events + .push(Event::SettingsChange(SettingsChange::Audio( + Audio::MuteMusicVolume( + !global_state.settings.audio.music_volume.muted, + ), + ))); + true + }, // Skillbar input => { if let Some(slot) = try_hotbar_slot_from_input(input) { diff --git a/voxygen/src/settings/control.rs b/voxygen/src/settings/control.rs index 6ed306bc90..2e844c3cf6 100644 --- a/voxygen/src/settings/control.rs +++ b/voxygen/src/settings/control.rs @@ -191,6 +191,7 @@ impl ControlSettings { GameInput::MapSetMarker => KeyMouse::Mouse(MouseButton::Middle), GameInput::SpectateSpeedBoost => KeyMouse::Key(VirtualKeyCode::LControl), GameInput::SpectateViewpoint => KeyMouse::Mouse(MouseButton::Middle), + GameInput::MuteMusic => KeyMouse::Key(VirtualKeyCode::F8), } } } From e9ba3ffa4a2893c586b163d663f813ba78ef4e98 Mon Sep 17 00:00:00 2001 From: Mckol Date: Sun, 29 May 2022 20:17:02 +0200 Subject: [PATCH 03/13] Added the possibility to not assign a default keybind to a GameInput --- voxygen/src/menu/main/ui/connecting.rs | 5 +- voxygen/src/settings/control.rs | 143 +++++++++++++------------ 2 files changed, 77 insertions(+), 71 deletions(-) diff --git a/voxygen/src/menu/main/ui/connecting.rs b/voxygen/src/menu/main/ui/connecting.rs index 29cd0caacc..6778d52918 100644 --- a/voxygen/src/menu/main/ui/connecting.rs +++ b/voxygen/src/menu/main/ui/connecting.rs @@ -103,7 +103,10 @@ impl Screen { let key = |code| match controls.keybindings.get(&code) { Some(Some(key_mouse)) => key_mouse.display_string(key_layout), Some(None) => i18n.get_msg("main-unbound_key_tip").into_owned(), - None => ControlSettings::default_binding(code).display_string(key_layout), + None => match ControlSettings::default_binding(code) { + Some(key_mouse) => key_mouse.display_string(key_layout), + None => i18n.get_msg("main-unbound_key_tip").into_owned(), + }, }; let keys = i18n::fluent_args! { "gameinput-togglelantern" => key(GameInput::ToggleLantern), diff --git a/voxygen/src/settings/control.rs b/voxygen/src/settings/control.rs index 2e844c3cf6..28c5a96309 100644 --- a/voxygen/src/settings/control.rs +++ b/voxygen/src/settings/control.rs @@ -17,7 +17,7 @@ impl From for ControlSettingsSerde { // Do a delta between default() ControlSettings and the argument, and let // keybindings be only the custom keybindings chosen by the user. for (k, v) in control_settings.keybindings { - if Some(ControlSettings::default_binding(k)) != v { + if ControlSettings::default_binding(k) != v { // Keybinding chosen by the user user_bindings.insert(k, v); } @@ -121,77 +121,77 @@ impl ControlSettings { false } - pub fn default_binding(game_input: GameInput) -> KeyMouse { + pub fn default_binding(game_input: GameInput) -> Option { // If a new GameInput is added, be sure to update GameInput::iterator() too! match game_input { - GameInput::Primary => KeyMouse::Mouse(MouseButton::Left), - GameInput::Secondary => KeyMouse::Mouse(MouseButton::Right), - GameInput::Block => KeyMouse::Key(VirtualKeyCode::LAlt), - GameInput::ToggleCursor => KeyMouse::Key(VirtualKeyCode::Comma), - GameInput::Escape => KeyMouse::Key(VirtualKeyCode::Escape), - GameInput::Chat => KeyMouse::Key(VirtualKeyCode::Return), - GameInput::Command => KeyMouse::Key(VirtualKeyCode::Slash), - GameInput::MoveForward => KeyMouse::Key(VirtualKeyCode::W), - GameInput::MoveLeft => KeyMouse::Key(VirtualKeyCode::A), - GameInput::MoveBack => KeyMouse::Key(VirtualKeyCode::S), - GameInput::MoveRight => KeyMouse::Key(VirtualKeyCode::D), - GameInput::Jump => KeyMouse::Key(VirtualKeyCode::Space), - GameInput::Sit => KeyMouse::Key(VirtualKeyCode::K), - GameInput::Dance => KeyMouse::Key(VirtualKeyCode::J), - GameInput::Greet => KeyMouse::Key(VirtualKeyCode::H), - GameInput::Glide => KeyMouse::Key(VirtualKeyCode::LControl), - GameInput::Climb => KeyMouse::Key(VirtualKeyCode::Space), - GameInput::ClimbDown => KeyMouse::Key(VirtualKeyCode::LShift), - GameInput::SwimUp => KeyMouse::Key(VirtualKeyCode::Space), - GameInput::SwimDown => KeyMouse::Key(VirtualKeyCode::LShift), - GameInput::Fly => KeyMouse::Key(VirtualKeyCode::H), - GameInput::Sneak => KeyMouse::Key(VirtualKeyCode::LShift), - GameInput::ToggleLantern => KeyMouse::Key(VirtualKeyCode::G), - GameInput::Mount => KeyMouse::Key(VirtualKeyCode::F), - GameInput::Map => KeyMouse::Key(VirtualKeyCode::M), - GameInput::Bag => KeyMouse::Key(VirtualKeyCode::B), - GameInput::Trade => KeyMouse::Key(VirtualKeyCode::T), - GameInput::Social => KeyMouse::Key(VirtualKeyCode::O), - GameInput::Crafting => KeyMouse::Key(VirtualKeyCode::C), - GameInput::Spellbook => KeyMouse::Key(VirtualKeyCode::P), - GameInput::Settings => KeyMouse::Key(VirtualKeyCode::F10), - GameInput::Help => KeyMouse::Key(VirtualKeyCode::F1), - GameInput::ToggleInterface => KeyMouse::Key(VirtualKeyCode::F2), - GameInput::ToggleDebug => KeyMouse::Key(VirtualKeyCode::F3), + GameInput::Primary => Some(KeyMouse::Mouse(MouseButton::Left)), + GameInput::Secondary => Some(KeyMouse::Mouse(MouseButton::Right)), + GameInput::Block => Some(KeyMouse::Key(VirtualKeyCode::LAlt)), + GameInput::ToggleCursor => Some(KeyMouse::Key(VirtualKeyCode::Comma)), + GameInput::Escape => Some(KeyMouse::Key(VirtualKeyCode::Escape)), + GameInput::Chat => Some(KeyMouse::Key(VirtualKeyCode::Return)), + GameInput::Command => Some(KeyMouse::Key(VirtualKeyCode::Slash)), + GameInput::MoveForward => Some(KeyMouse::Key(VirtualKeyCode::W)), + GameInput::MoveLeft => Some(KeyMouse::Key(VirtualKeyCode::A)), + GameInput::MoveBack => Some(KeyMouse::Key(VirtualKeyCode::S)), + GameInput::MoveRight => Some(KeyMouse::Key(VirtualKeyCode::D)), + GameInput::Jump => Some(KeyMouse::Key(VirtualKeyCode::Space)), + GameInput::Sit => Some(KeyMouse::Key(VirtualKeyCode::K)), + GameInput::Dance => Some(KeyMouse::Key(VirtualKeyCode::J)), + GameInput::Greet => Some(KeyMouse::Key(VirtualKeyCode::H)), + GameInput::Glide => Some(KeyMouse::Key(VirtualKeyCode::LControl)), + GameInput::Climb => Some(KeyMouse::Key(VirtualKeyCode::Space)), + GameInput::ClimbDown => Some(KeyMouse::Key(VirtualKeyCode::LShift)), + GameInput::SwimUp => Some(KeyMouse::Key(VirtualKeyCode::Space)), + GameInput::SwimDown => Some(KeyMouse::Key(VirtualKeyCode::LShift)), + GameInput::Fly => Some(KeyMouse::Key(VirtualKeyCode::H)), + GameInput::Sneak => Some(KeyMouse::Key(VirtualKeyCode::LShift)), + GameInput::ToggleLantern => Some(KeyMouse::Key(VirtualKeyCode::G)), + GameInput::Mount => Some(KeyMouse::Key(VirtualKeyCode::F)), + GameInput::Map => Some(KeyMouse::Key(VirtualKeyCode::M)), + GameInput::Bag => Some(KeyMouse::Key(VirtualKeyCode::B)), + GameInput::Trade => Some(KeyMouse::Key(VirtualKeyCode::T)), + GameInput::Social => Some(KeyMouse::Key(VirtualKeyCode::O)), + GameInput::Crafting => Some(KeyMouse::Key(VirtualKeyCode::C)), + GameInput::Spellbook => Some(KeyMouse::Key(VirtualKeyCode::P)), + GameInput::Settings => Some(KeyMouse::Key(VirtualKeyCode::F10)), + GameInput::Help => Some(KeyMouse::Key(VirtualKeyCode::F1)), + GameInput::ToggleInterface => Some(KeyMouse::Key(VirtualKeyCode::F2)), + GameInput::ToggleDebug => Some(KeyMouse::Key(VirtualKeyCode::F3)), #[cfg(feature = "egui-ui")] - GameInput::ToggleEguiDebug => KeyMouse::Key(VirtualKeyCode::F7), - GameInput::ToggleChat => KeyMouse::Key(VirtualKeyCode::F5), - GameInput::Fullscreen => KeyMouse::Key(VirtualKeyCode::F11), - GameInput::Screenshot => KeyMouse::Key(VirtualKeyCode::F4), - GameInput::ToggleIngameUi => KeyMouse::Key(VirtualKeyCode::F6), - GameInput::Roll => MIDDLE_CLICK_KEY, - GameInput::Respawn => KeyMouse::Key(VirtualKeyCode::Space), - GameInput::Interact => KeyMouse::Key(VirtualKeyCode::E), - GameInput::ToggleWield => KeyMouse::Key(VirtualKeyCode::R), - GameInput::FreeLook => KeyMouse::Key(VirtualKeyCode::L), - GameInput::AutoWalk => KeyMouse::Key(VirtualKeyCode::Period), - GameInput::CameraClamp => KeyMouse::Key(VirtualKeyCode::Apostrophe), - GameInput::CycleCamera => KeyMouse::Key(VirtualKeyCode::Key0), - GameInput::Slot1 => KeyMouse::Key(VirtualKeyCode::Key1), - GameInput::Slot2 => KeyMouse::Key(VirtualKeyCode::Key2), - GameInput::Slot3 => KeyMouse::Key(VirtualKeyCode::Key3), - GameInput::Slot4 => KeyMouse::Key(VirtualKeyCode::Key4), - GameInput::Slot5 => KeyMouse::Key(VirtualKeyCode::Key5), - GameInput::Slot6 => KeyMouse::Key(VirtualKeyCode::Key6), - GameInput::Slot7 => KeyMouse::Key(VirtualKeyCode::Key7), - GameInput::Slot8 => KeyMouse::Key(VirtualKeyCode::Key8), - GameInput::Slot9 => KeyMouse::Key(VirtualKeyCode::Key9), - GameInput::Slot10 => KeyMouse::Key(VirtualKeyCode::Q), - GameInput::SwapLoadout => KeyMouse::Key(VirtualKeyCode::Tab), - GameInput::Select => KeyMouse::Key(VirtualKeyCode::X), - GameInput::AcceptGroupInvite => KeyMouse::Key(VirtualKeyCode::Y), - GameInput::DeclineGroupInvite => KeyMouse::Key(VirtualKeyCode::N), - GameInput::MapZoomIn => KeyMouse::Key(VirtualKeyCode::Plus), - GameInput::MapZoomOut => KeyMouse::Key(VirtualKeyCode::Minus), - GameInput::MapSetMarker => KeyMouse::Mouse(MouseButton::Middle), - GameInput::SpectateSpeedBoost => KeyMouse::Key(VirtualKeyCode::LControl), - GameInput::SpectateViewpoint => KeyMouse::Mouse(MouseButton::Middle), - GameInput::MuteMusic => KeyMouse::Key(VirtualKeyCode::F8), + GameInput::ToggleEguiDebug => Some(KeyMouse::Key(VirtualKeyCode::F7)), + GameInput::ToggleChat => Some(KeyMouse::Key(VirtualKeyCode::F5)), + GameInput::Fullscreen => Some(KeyMouse::Key(VirtualKeyCode::F11)), + GameInput::Screenshot => Some(KeyMouse::Key(VirtualKeyCode::F4)), + GameInput::ToggleIngameUi => Some(KeyMouse::Key(VirtualKeyCode::F6)), + GameInput::Roll => Some(MIDDLE_CLICK_KEY), + GameInput::Respawn => Some(KeyMouse::Key(VirtualKeyCode::Space)), + GameInput::Interact => Some(KeyMouse::Key(VirtualKeyCode::E)), + GameInput::ToggleWield => Some(KeyMouse::Key(VirtualKeyCode::R)), + GameInput::FreeLook => Some(KeyMouse::Key(VirtualKeyCode::L)), + GameInput::AutoWalk => Some(KeyMouse::Key(VirtualKeyCode::Period)), + GameInput::CameraClamp => Some(KeyMouse::Key(VirtualKeyCode::Apostrophe)), + GameInput::CycleCamera => Some(KeyMouse::Key(VirtualKeyCode::Key0)), + GameInput::Slot1 => Some(KeyMouse::Key(VirtualKeyCode::Key1)), + GameInput::Slot2 => Some(KeyMouse::Key(VirtualKeyCode::Key2)), + GameInput::Slot3 => Some(KeyMouse::Key(VirtualKeyCode::Key3)), + GameInput::Slot4 => Some(KeyMouse::Key(VirtualKeyCode::Key4)), + GameInput::Slot5 => Some(KeyMouse::Key(VirtualKeyCode::Key5)), + GameInput::Slot6 => Some(KeyMouse::Key(VirtualKeyCode::Key6)), + GameInput::Slot7 => Some(KeyMouse::Key(VirtualKeyCode::Key7)), + GameInput::Slot8 => Some(KeyMouse::Key(VirtualKeyCode::Key8)), + GameInput::Slot9 => Some(KeyMouse::Key(VirtualKeyCode::Key9)), + GameInput::Slot10 => Some(KeyMouse::Key(VirtualKeyCode::Q)), + GameInput::SwapLoadout => Some(KeyMouse::Key(VirtualKeyCode::Tab)), + GameInput::Select => Some(KeyMouse::Key(VirtualKeyCode::X)), + GameInput::AcceptGroupInvite => Some(KeyMouse::Key(VirtualKeyCode::Y)), + GameInput::DeclineGroupInvite => Some(KeyMouse::Key(VirtualKeyCode::N)), + GameInput::MapZoomIn => Some(KeyMouse::Key(VirtualKeyCode::Plus)), + GameInput::MapZoomOut => Some(KeyMouse::Key(VirtualKeyCode::Minus)), + GameInput::MapSetMarker => Some(KeyMouse::Mouse(MouseButton::Middle)), + GameInput::SpectateSpeedBoost => Some(KeyMouse::Key(VirtualKeyCode::LControl)), + GameInput::SpectateViewpoint => Some(KeyMouse::Mouse(MouseButton::Middle)), + GameInput::MuteMusic => Some(KeyMouse::Key(VirtualKeyCode::F8)), } } } @@ -204,7 +204,10 @@ impl Default for ControlSettings { }; // Sets the initial keybindings for those GameInputs. for game_input in GameInput::iter() { - new_settings.insert_binding(game_input, ControlSettings::default_binding(game_input)); + match ControlSettings::default_binding(game_input) { + None => {}, + Some(default) => new_settings.insert_binding(game_input, default), + }; } new_settings } From c01d32e273bf3aab5da9fcb9a677fc64acc096b3 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Tue, 23 Aug 2022 11:30:43 +0200 Subject: [PATCH 04/13] Updated my entry in the mailmap file. --- .mailmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 7e6c959c6d..e39ddbfab0 100644 --- a/.mailmap +++ b/.mailmap @@ -1 +1 @@ -Mckol +LunarEclipse From 33ded63da919a15b269fcc59afb5aa8ba6d91b8a Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Tue, 23 Aug 2022 12:08:04 +0200 Subject: [PATCH 05/13] Improved mute button assets (TODO merge with a5f446a7) --- assets/voxygen/element/ui/generic/buttons/mute_btn.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png | 4 ++-- .../voxygen/element/ui/generic/buttons/mute_btn_pressed.png | 3 +++ assets/voxygen/element/ui/generic/buttons/muted_btn.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png | 4 ++-- .../voxygen/element/ui/generic/buttons/muted_btn_pressed.png | 3 +++ 6 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png create mode 100644 assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn.png b/assets/voxygen/element/ui/generic/buttons/mute_btn.png index dedca5520c..94ea3386d7 100644 --- a/assets/voxygen/element/ui/generic/buttons/mute_btn.png +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af54ab92914772171fe25abb02b79bda3b2fab8bbf3491f6d50dfa3ab4a62825 -size 9711 +oid sha256:255e7db2caa517127155a7020bed541a73370a331095005e7f28674d3fa5c012 +size 10569 diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png index 2efe112e80..f7d01e4027 100644 --- a/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a3cb4d6bf5262474233e1df5799b30d00bc145b180d6f121307ca8ede3b6b3c -size 9578 +oid sha256:c9fa85824ca6549635af6da138c910433f2bd53dec153cdee1f1f3cb5c5dca55 +size 10095 diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png new file mode 100644 index 0000000000..a0df75c94c --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38221a4250b6a0f2ae4aa6dfbb4e58161eec91fd4bb9633dc8112209a22f9d81 +size 9905 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn.png b/assets/voxygen/element/ui/generic/buttons/muted_btn.png index 4c75976525..b30c5e8c79 100644 --- a/assets/voxygen/element/ui/generic/buttons/muted_btn.png +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2b2a9f0cbd164f066fe8d49524f5b08ec3e5b3f3070200fd0c3e1dcb8557f96 -size 8151 +oid sha256:e82eb2392e8b410e45c2f94a5f4a7b0b38fd464ea3c10643c445723f75231767 +size 8919 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png index 91b3973e0b..9ecb77e7b6 100644 --- a/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7412295437dc9dcde313d436fd84830e580506c52e5d7ff9c2622d2126075783 -size 8007 +oid sha256:c38155c4e65598ed137574416c48f9380b150d5932f0c93d92472413faea276e +size 8384 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png new file mode 100644 index 0000000000..6bc90734ae --- /dev/null +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e3ac975ef54cb831bba6094df7e1f75ded1e4c2e731a3e878fee4b15e557da8 +size 8396 From 36167f2e3a7932ac3ec63058086a700afa8d5018 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Sat, 3 Sep 2022 18:03:04 +0200 Subject: [PATCH 06/13] Renamed some files, added missing img_ids. --- .../buttons/{mute_btn_pressed.png => mute_btn_press.png} | 0 .../buttons/{muted_btn_pressed.png => muted_btn_press.png} | 0 voxygen/src/hud/img_ids.rs | 2 ++ 3 files changed, 2 insertions(+) rename assets/voxygen/element/ui/generic/buttons/{mute_btn_pressed.png => mute_btn_press.png} (100%) rename assets/voxygen/element/ui/generic/buttons/{muted_btn_pressed.png => muted_btn_press.png} (100%) diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_press.png similarity index 100% rename from assets/voxygen/element/ui/generic/buttons/mute_btn_pressed.png rename to assets/voxygen/element/ui/generic/buttons/mute_btn_press.png diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_press.png similarity index 100% rename from assets/voxygen/element/ui/generic/buttons/muted_btn_pressed.png rename to assets/voxygen/element/ui/generic/buttons/muted_btn_press.png diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index 4153bee932..7d55e98875 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -559,8 +559,10 @@ image_ids! { // Mute Buttons button_mute: "voxygen.element.ui.generic.buttons.mute_btn", button_mute_hover: "voxygen.element.ui.generic.buttons.mute_btn_hover", + button_mute_press: "voxygen.element.ui.generic.buttons.mute_btn_press", button_muted: "voxygen.element.ui.generic.buttons.muted_btn", button_muted_hover: "voxygen.element.ui.generic.buttons.muted_btn_hover", + button_muted_press: "voxygen.element.ui.generic.buttons.muted_btn_press", // Enemy Healthbar From 24c50fab3b6a2958b4130531ee605be188e87430 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Sat, 3 Sep 2022 20:08:15 +0200 Subject: [PATCH 07/13] Updated the code to use the new hover icons --- voxygen/src/hud/settings_window/sound.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/voxygen/src/hud/settings_window/sound.rs b/voxygen/src/hud/settings_window/sound.rs index ba361f3376..4be0bf751f 100644 --- a/voxygen/src/hud/settings_window/sound.rs +++ b/voxygen/src/hud/settings_window/sound.rs @@ -154,7 +154,8 @@ impl<'a> Widget for Sound<'a> { ) .w_h(24.0, 25.0) .down_from(state.ids.master_volume_text, 10.0) - .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) .set(state.ids.master_volume_muted, ui); if master_muted != self.global_state.settings.audio.master_volume.muted { events.push(MuteMasterVolume(master_muted)); @@ -219,7 +220,8 @@ impl<'a> Widget for Sound<'a> { ) .w_h(24.0, 25.0) .down_from(state.ids.inactive_master_volume_text, 10.0) - .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) .set(state.ids.inactive_master_volume_muted, ui); if inactive_master_muted != self @@ -274,7 +276,8 @@ impl<'a> Widget for Sound<'a> { ) .w_h(24.0, 25.0) .down_from(state.ids.music_volume_text, 10.0) - .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) .set(state.ids.music_volume_muted, ui); if music_muted != self.global_state.settings.audio.music_volume.muted { events.push(MuteMusicVolume(music_muted)); @@ -326,7 +329,8 @@ impl<'a> Widget for Sound<'a> { ) .w_h(24.0, 25.0) .down_from(state.ids.sfx_volume_text, 10.0) - .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) .set(state.ids.sfx_volume_muted, ui); if sfx_muted != self.global_state.settings.audio.sfx_volume.muted { events.push(MuteSfxVolume(sfx_muted)); @@ -378,7 +382,8 @@ impl<'a> Widget for Sound<'a> { ) .w_h(24.0, 25.0) .down_from(state.ids.ambience_volume_text, 10.0) - .press_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) .set(state.ids.ambience_volume_muted, ui); if ambience_muted != self.global_state.settings.audio.ambience_volume.muted { events.push(MuteAmbienceVolume(ambience_muted)); From be9e0497d1bfedd81a05becca086a63baff15418 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Sat, 3 Sep 2022 20:15:50 +0200 Subject: [PATCH 08/13] Fixed the ambience volume ui element positions --- voxygen/src/hud/settings_window/sound.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/voxygen/src/hud/settings_window/sound.rs b/voxygen/src/hud/settings_window/sound.rs index 4be0bf751f..253402f57c 100644 --- a/voxygen/src/hud/settings_window/sound.rs +++ b/voxygen/src/hud/settings_window/sound.rs @@ -8,7 +8,7 @@ use crate::{ }; use conrod_core::{ color, - position::Relative, + position::{Align, Relative}, widget::{self, Button, Rectangle, Scrollbar, Text}, widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon, }; @@ -342,7 +342,7 @@ impl<'a> Widget for Sound<'a> { .localized_strings .get_msg("hud-settings-ambience_volume"), ) - .down_from(state.ids.sfx_volume_slider, 10.0) + .down_from(state.ids.sfx_volume_muted, 10.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) @@ -356,7 +356,7 @@ impl<'a> Widget for Sound<'a> { self.imgs.slider, ) .w_h(104.0, 22.0) - .down_from(state.ids.ambience_volume_text, 10.0) + .right_from(state.ids.ambience_volume_muted, 8.0) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -391,7 +391,7 @@ impl<'a> Widget for Sound<'a> { // Music spacing Text::new(&self.localized_strings.get_msg("hud-settings-music_spacing")) - .down_from(state.ids.ambience_volume_slider, 10.0) + .down_from(state.ids.ambience_volume_muted, 10.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) @@ -406,6 +406,7 @@ impl<'a> Widget for Sound<'a> { ) .w_h(104.0, 22.0) .down_from(state.ids.music_spacing_text, 10.0) + .x_align_to(state.ids.ambience_volume_slider, Align::Start) .track_breadth(12.0) .slider_length(10.0) .pad_track((5.0, 5.0)) @@ -457,6 +458,7 @@ impl<'a> Widget for Sound<'a> { .hover_image(self.imgs.button_hover) .press_image(self.imgs.button_press) .down_from(state.ids.music_spacing_slider, 12.0) + .x_align_to(state.ids.ambience_volume_text, Align::Start) .label(&self.localized_strings.get_msg("hud-settings-reset_sound")) .label_font_size(self.fonts.cyri.scale(14)) .label_color(TEXT_COLOR) From 796a5f2f90b68229deb99f85a894f81ef0334016 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Fri, 9 Sep 2022 11:39:27 +0200 Subject: [PATCH 09/13] Added the possibility to toggle muting of any volume category via a keybind --- voxygen/src/game_input.rs | 10 +++++++++- voxygen/src/hud/mod.rs | 29 ++++++++++++++++++++++------- voxygen/src/settings/control.rs | 4 ++++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/voxygen/src/game_input.rs b/voxygen/src/game_input.rs index c48a08c1aa..b9902f9fdc 100644 --- a/voxygen/src/game_input.rs +++ b/voxygen/src/game_input.rs @@ -152,8 +152,16 @@ pub enum GameInput { SpectateSpeedBoost, #[strum(serialize = "gameinput-spectateviewpoint")] SpectateViewpoint, - #[strum(serialize = "gameinput-mute-music")] + #[strum(serialize = "gameinput-mutemaster")] + MuteMaster, + #[strum(serialize = "gameinput-muteinactivemaster")] + MuteInactiveMaster, + #[strum(serialize = "gameinput-mutemusic")] MuteMusic, + #[strum(serialize = "gameinput-mutesfx")] + MuteSfx, + #[strum(serialize = "gameinput-muteambience")] + MuteAmbience, } impl GameInput { diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index d03d2f969b..759942accd 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -4126,6 +4126,13 @@ impl Hud { // Press key while not typing WinEvent::InputUpdate(key, state) if !self.typing() => { + let gs_audio = &global_state.settings.audio; + let mut toggle_mute = |audio: Audio| { + self.events + .push(Event::SettingsChange(SettingsChange::Audio(audio))); + true + }; + let matching_key = match key { GameInput::Command if state => { self.force_chat_input = Some("/".to_owned()); @@ -4189,14 +4196,22 @@ impl Hud { GameInput::MapZoomOut if state => { handle_map_zoom(0.5, self.world_map.1, &self.show, global_state) }, + GameInput::MuteMaster if state => { + toggle_mute(Audio::MuteMasterVolume(!gs_audio.master_volume.muted)) + }, + GameInput::MuteInactiveMaster if state => { + toggle_mute(Audio::MuteInactiveMasterVolume( + !gs_audio.inactive_master_volume_perc.muted, + )) + }, GameInput::MuteMusic if state => { - self.events - .push(Event::SettingsChange(SettingsChange::Audio( - Audio::MuteMusicVolume( - !global_state.settings.audio.music_volume.muted, - ), - ))); - true + toggle_mute(Audio::MuteMusicVolume(!gs_audio.music_volume.muted)) + }, + GameInput::MuteSfx if state => { + toggle_mute(Audio::MuteSfxVolume(!gs_audio.sfx_volume.muted)) + }, + GameInput::MuteAmbience if state => { + toggle_mute(Audio::MuteAmbienceVolume(!gs_audio.ambience_volume.muted)) }, // Skillbar input => { diff --git a/voxygen/src/settings/control.rs b/voxygen/src/settings/control.rs index 28c5a96309..43957f8624 100644 --- a/voxygen/src/settings/control.rs +++ b/voxygen/src/settings/control.rs @@ -191,7 +191,11 @@ impl ControlSettings { GameInput::MapSetMarker => Some(KeyMouse::Mouse(MouseButton::Middle)), GameInput::SpectateSpeedBoost => Some(KeyMouse::Key(VirtualKeyCode::LControl)), GameInput::SpectateViewpoint => Some(KeyMouse::Mouse(MouseButton::Middle)), + GameInput::MuteMaster => Some(KeyMouse::Key(VirtualKeyCode::Mute)), + GameInput::MuteInactiveMaster => None, GameInput::MuteMusic => Some(KeyMouse::Key(VirtualKeyCode::F8)), + GameInput::MuteSfx => None, + GameInput::MuteAmbience => None, } } } From 22c99af9d10b2fa08be440a11734fae0d0b747a4 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Fri, 16 Sep 2022 21:30:31 +0200 Subject: [PATCH 10/13] Now when master volume is muted other volume icons are grayed out. --- voxygen/src/hud/settings_window/sound.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/voxygen/src/hud/settings_window/sound.rs b/voxygen/src/hud/settings_window/sound.rs index 253402f57c..9fd1fa1ef6 100644 --- a/voxygen/src/hud/settings_window/sound.rs +++ b/voxygen/src/hud/settings_window/sound.rs @@ -1,7 +1,7 @@ use super::{RESET_BUTTONS_HEIGHT, RESET_BUTTONS_WIDTH}; use crate::{ - hud::{img_ids::Imgs, TEXT_COLOR}, + hud::{img_ids::Imgs, TEXT_COLOR, TEXT_COLOR_GREY}, session::settings_change::{Audio as AudioChange, Audio::*}, ui::{fonts::Fonts, ImageSlider, ToggleButton}, GlobalState, @@ -112,6 +112,12 @@ impl<'a> Widget for Sound<'a> { .rgba(0.33, 0.33, 0.33, 1.0) .set(state.ids.window_scrollbar, ui); + let non_master_volume_text_color = + match self.global_state.settings.audio.master_volume.muted { + true => TEXT_COLOR_GREY, + false => TEXT_COLOR, + }; + // Master Volume Text::new(&self.localized_strings.get_msg("hud-settings-master_volume")) .top_left_with_margins_on(state.ids.window, 10.0, 10.0) @@ -206,7 +212,7 @@ impl<'a> Widget for Sound<'a> { .right_from(state.ids.inactive_master_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) + .color(non_master_volume_text_color) .set(state.ids.inactive_master_volume_number, ui); // Master Volume (inactive window) Muted Indicator let inactive_master_muted = ToggleButton::new( @@ -266,7 +272,7 @@ impl<'a> Widget for Sound<'a> { .right_from(state.ids.music_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) + .color(non_master_volume_text_color) .set(state.ids.music_volume_number, ui); // Music Muted Indicator let music_muted = ToggleButton::new( @@ -319,7 +325,7 @@ impl<'a> Widget for Sound<'a> { .right_from(state.ids.sfx_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) + .color(non_master_volume_text_color) .set(state.ids.sfx_volume_number, ui); // SFX Volume Muted Indicator let sfx_muted = ToggleButton::new( @@ -372,7 +378,7 @@ impl<'a> Widget for Sound<'a> { .right_from(state.ids.ambience_volume_slider, 8.0) .font_size(self.fonts.cyri.scale(14)) .font_id(self.fonts.cyri.conrod_id) - .color(TEXT_COLOR) + .color(non_master_volume_text_color) .set(state.ids.ambience_volume_number, ui); // Ambience Volume Muted Indicator let ambience_muted = ToggleButton::new( From 716d4e476ede254c771843c1fbe3dc0c1c84bc4e Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Fri, 16 Sep 2022 21:58:09 +0200 Subject: [PATCH 11/13] Updated mute buttons to have less distracting borders (they don't have indexed color) --- assets/voxygen/element/ui/generic/buttons/mute_btn.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/mute_btn_press.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/muted_btn.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png | 4 ++-- assets/voxygen/element/ui/generic/buttons/muted_btn_press.png | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn.png b/assets/voxygen/element/ui/generic/buttons/mute_btn.png index 94ea3386d7..a738ae270d 100644 --- a/assets/voxygen/element/ui/generic/buttons/mute_btn.png +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:255e7db2caa517127155a7020bed541a73370a331095005e7f28674d3fa5c012 -size 10569 +oid sha256:772971359f0418293b668fbf2971320614a59eb3a445242b1d0c25977fb59859 +size 8855 diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png index f7d01e4027..18d534dad5 100644 --- a/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9fa85824ca6549635af6da138c910433f2bd53dec153cdee1f1f3cb5c5dca55 -size 10095 +oid sha256:f2fbe4b62e899ef101d89b37ebae110b088bdcfa13bf8783b903c60bc7f9f05d +size 10959 diff --git a/assets/voxygen/element/ui/generic/buttons/mute_btn_press.png b/assets/voxygen/element/ui/generic/buttons/mute_btn_press.png index a0df75c94c..78bf3ff824 100644 --- a/assets/voxygen/element/ui/generic/buttons/mute_btn_press.png +++ b/assets/voxygen/element/ui/generic/buttons/mute_btn_press.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38221a4250b6a0f2ae4aa6dfbb4e58161eec91fd4bb9633dc8112209a22f9d81 -size 9905 +oid sha256:5fd9a72e2828a2b654e973bd1d85e20616aa6ec6843307efe3e57961d76b8d85 +size 10793 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn.png b/assets/voxygen/element/ui/generic/buttons/muted_btn.png index b30c5e8c79..a3079b5bd9 100644 --- a/assets/voxygen/element/ui/generic/buttons/muted_btn.png +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e82eb2392e8b410e45c2f94a5f4a7b0b38fd464ea3c10643c445723f75231767 -size 8919 +oid sha256:990f35a687a905ac8b2187d162914dabdc8a1cfc00ed445458637e91081fd167 +size 9264 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png index 9ecb77e7b6..16fcd61a64 100644 --- a/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c38155c4e65598ed137574416c48f9380b150d5932f0c93d92472413faea276e -size 8384 +oid sha256:6bc8cc0a047a08170c7b4b3791adfd12575f60a9203d46a11eef3bd2f2c4efd5 +size 11441 diff --git a/assets/voxygen/element/ui/generic/buttons/muted_btn_press.png b/assets/voxygen/element/ui/generic/buttons/muted_btn_press.png index 6bc90734ae..5a8be0ad92 100644 --- a/assets/voxygen/element/ui/generic/buttons/muted_btn_press.png +++ b/assets/voxygen/element/ui/generic/buttons/muted_btn_press.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e3ac975ef54cb831bba6094df7e1f75ded1e4c2e731a3e878fee4b15e557da8 -size 8396 +oid sha256:024260ae4651d7eb4bb316aee96c19537079ac231c447d4343ee49bfe2b480b0 +size 11421 From 6ad02b1fb0635a5ea64e848401350b1e181e017c Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Fri, 16 Sep 2022 22:17:00 +0200 Subject: [PATCH 12/13] Added i18n stuff for volume muting keybinds for en and pl_PL locales --- assets/voxygen/i18n/en/gameinput.ftl | 7 ++++++- assets/voxygen/i18n/pl_PL/gameinput.ftl | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/assets/voxygen/i18n/en/gameinput.ftl b/assets/voxygen/i18n/en/gameinput.ftl index 0328cf93a0..f8900e24b2 100644 --- a/assets/voxygen/i18n/en/gameinput.ftl +++ b/assets/voxygen/i18n/en/gameinput.ftl @@ -65,4 +65,9 @@ gameinput-mapzoomout = Decrease map zoom gameinput-greet = Greet gameinput-map-locationmarkerbutton = Set a waypoint in the Map gameinput-spectatespeedboost = Spectate speed boost -gameinput-spectateviewpoint = Spectate viewpoint \ No newline at end of file +gameinput-spectateviewpoint = Spectate viewpoint +gameinput-mutemaster = Mute master volume +gameinput-muteinactivemaster = Mute master volume (inactive window) +gameinput-mutemusic = Mute music volume +gameinput-mutesfx = Mute SFX volume +gameinput-muteambience = Mute ambience volume diff --git a/assets/voxygen/i18n/pl_PL/gameinput.ftl b/assets/voxygen/i18n/pl_PL/gameinput.ftl index 6d1283b0ca..d2b466ec55 100644 --- a/assets/voxygen/i18n/pl_PL/gameinput.ftl +++ b/assets/voxygen/i18n/pl_PL/gameinput.ftl @@ -63,4 +63,9 @@ gameinput-swimup = Płyń w górę gameinput-mapzoomin = Przybliż mapę gameinput-mapzoomout = Oddal mapę gameinput-greet = Pozdrów -gameinput-map-locationmarkerbutton = Utwórz znacznik na mapie \ No newline at end of file +gameinput-map-locationmarkerbutton = Utwórz znacznik na mapie +gameinput-mutemaster = Wycisz dźwięk +gameinput-muteinactivemaster = Wycisz dźwięk (okno w tle) +gameinput-mutemusic = Wycisz muzykę +gameinput-mutesfx = Wycisz efekty dźwiękowe +gameinput-muteambience = Wycisz efekty środowiskowe From 2d092635edd8e0b5baf5608a062c8e8fe7b5f6d7 Mon Sep 17 00:00:00 2001 From: LunarEclipse Date: Sat, 17 Sep 2022 12:48:38 +0200 Subject: [PATCH 13/13] Moved some code around to put it in logical order --- voxygen/src/hud/settings_window/sound.rs | 162 +++++++++++------------ 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/voxygen/src/hud/settings_window/sound.rs b/voxygen/src/hud/settings_window/sound.rs index 9fd1fa1ef6..f5320c19ee 100644 --- a/voxygen/src/hud/settings_window/sound.rs +++ b/voxygen/src/hud/settings_window/sound.rs @@ -125,6 +125,20 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.master_volume_text, ui); + // Master Volume Muted Indicator + let master_muted = ToggleButton::new( + self.global_state.settings.audio.master_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.master_volume_text, 10.0) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) + .set(state.ids.master_volume_muted, ui); + if master_muted != self.global_state.settings.audio.master_volume.muted { + events.push(MuteMasterVolume(master_muted)); + } // Master Volume Slider if let Some(new_val) = ImageSlider::continuous( self.global_state.settings.audio.master_volume.volume, @@ -152,20 +166,6 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.master_volume_number, ui); - // Master Volume Muted Indicator - let master_muted = ToggleButton::new( - self.global_state.settings.audio.master_volume.muted, - self.imgs.button_mute, - self.imgs.button_muted, - ) - .w_h(24.0, 25.0) - .down_from(state.ids.master_volume_text, 10.0) - .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) - .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) - .set(state.ids.master_volume_muted, ui); - if master_muted != self.global_state.settings.audio.master_volume.muted { - events.push(MuteMasterVolume(master_muted)); - } // Master Volume (inactive window) Text::new( @@ -178,6 +178,31 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.inactive_master_volume_text, ui); + // Master Volume (inactive window) Muted Indicator + let inactive_master_muted = ToggleButton::new( + self.global_state + .settings + .audio + .inactive_master_volume_perc + .muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.inactive_master_volume_text, 10.0) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) + .set(state.ids.inactive_master_volume_muted, ui); + if inactive_master_muted + != self + .global_state + .settings + .audio + .inactive_master_volume_perc + .muted + { + events.push(MuteInactiveMasterVolume(inactive_master_muted)); + } // Master Volume (inactive window) Slider if let Some(new_val) = ImageSlider::continuous( self.global_state @@ -214,31 +239,6 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(non_master_volume_text_color) .set(state.ids.inactive_master_volume_number, ui); - // Master Volume (inactive window) Muted Indicator - let inactive_master_muted = ToggleButton::new( - self.global_state - .settings - .audio - .inactive_master_volume_perc - .muted, - self.imgs.button_mute, - self.imgs.button_muted, - ) - .w_h(24.0, 25.0) - .down_from(state.ids.inactive_master_volume_text, 10.0) - .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) - .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) - .set(state.ids.inactive_master_volume_muted, ui); - if inactive_master_muted - != self - .global_state - .settings - .audio - .inactive_master_volume_perc - .muted - { - events.push(MuteInactiveMasterVolume(inactive_master_muted)); - } // Music Volume Text::new(&self.localized_strings.get_msg("hud-settings-music_volume")) @@ -247,6 +247,20 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.music_volume_text, ui); + // Music Muted Indicator + let music_muted = ToggleButton::new( + self.global_state.settings.audio.music_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.music_volume_text, 10.0) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) + .set(state.ids.music_volume_muted, ui); + if music_muted != self.global_state.settings.audio.music_volume.muted { + events.push(MuteMusicVolume(music_muted)); + } // Music Volume Slider if let Some(new_val) = ImageSlider::continuous( self.global_state.settings.audio.music_volume.volume, @@ -274,20 +288,6 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(non_master_volume_text_color) .set(state.ids.music_volume_number, ui); - // Music Muted Indicator - let music_muted = ToggleButton::new( - self.global_state.settings.audio.music_volume.muted, - self.imgs.button_mute, - self.imgs.button_muted, - ) - .w_h(24.0, 25.0) - .down_from(state.ids.music_volume_text, 10.0) - .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) - .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) - .set(state.ids.music_volume_muted, ui); - if music_muted != self.global_state.settings.audio.music_volume.muted { - events.push(MuteMusicVolume(music_muted)); - } // SFX Volume Text::new( @@ -300,6 +300,20 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.sfx_volume_text, ui); + // SFX Volume Muted Indicator + let sfx_muted = ToggleButton::new( + self.global_state.settings.audio.sfx_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.sfx_volume_text, 10.0) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) + .set(state.ids.sfx_volume_muted, ui); + if sfx_muted != self.global_state.settings.audio.sfx_volume.muted { + events.push(MuteSfxVolume(sfx_muted)); + } // SFX Volume Slider if let Some(new_val) = ImageSlider::continuous( self.global_state.settings.audio.sfx_volume.volume, @@ -327,20 +341,6 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(non_master_volume_text_color) .set(state.ids.sfx_volume_number, ui); - // SFX Volume Muted Indicator - let sfx_muted = ToggleButton::new( - self.global_state.settings.audio.sfx_volume.muted, - self.imgs.button_mute, - self.imgs.button_muted, - ) - .w_h(24.0, 25.0) - .down_from(state.ids.sfx_volume_text, 10.0) - .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) - .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) - .set(state.ids.sfx_volume_muted, ui); - if sfx_muted != self.global_state.settings.audio.sfx_volume.muted { - events.push(MuteSfxVolume(sfx_muted)); - } // Ambience Volume Text::new( @@ -353,6 +353,20 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(TEXT_COLOR) .set(state.ids.ambience_volume_text, ui); + // Ambience Volume Muted Indicator + let ambience_muted = ToggleButton::new( + self.global_state.settings.audio.ambience_volume.muted, + self.imgs.button_mute, + self.imgs.button_muted, + ) + .w_h(24.0, 25.0) + .down_from(state.ids.ambience_volume_text, 10.0) + .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) + .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) + .set(state.ids.ambience_volume_muted, ui); + if ambience_muted != self.global_state.settings.audio.ambience_volume.muted { + events.push(MuteAmbienceVolume(ambience_muted)); + } // Ambience Volume Slider if let Some(new_val) = ImageSlider::continuous( self.global_state.settings.audio.ambience_volume.volume, @@ -380,20 +394,6 @@ impl<'a> Widget for Sound<'a> { .font_id(self.fonts.cyri.conrod_id) .color(non_master_volume_text_color) .set(state.ids.ambience_volume_number, ui); - // Ambience Volume Muted Indicator - let ambience_muted = ToggleButton::new( - self.global_state.settings.audio.ambience_volume.muted, - self.imgs.button_mute, - self.imgs.button_muted, - ) - .w_h(24.0, 25.0) - .down_from(state.ids.ambience_volume_text, 10.0) - .hover_images(self.imgs.button_mute_hover, self.imgs.button_muted_hover) - .press_images(self.imgs.button_mute_press, self.imgs.button_muted_press) - .set(state.ids.ambience_volume_muted, ui); - if ambience_muted != self.global_state.settings.audio.ambience_volume.muted { - events.push(MuteAmbienceVolume(ambience_muted)); - } // Music spacing Text::new(&self.localized_strings.get_msg("hud-settings-music_spacing"))