mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Added mute buttons for all of the audio sliders in settings
This commit is contained in:
parent
e35e533d88
commit
6605c2657f
BIN
assets/voxygen/element/ui/generic/buttons/mute_btn.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/mute_btn.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/mute_btn_hover.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn_hover.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -556,6 +556,13 @@ image_ids! {
|
|||||||
button_hover: "voxygen.element.ui.generic.buttons.button_hover",
|
button_hover: "voxygen.element.ui.generic.buttons.button_hover",
|
||||||
button_press: "voxygen.element.ui.generic.buttons.button_press",
|
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 Healthbar
|
||||||
enemy_health: "voxygen.element.ui.generic.frames.enemybar",
|
enemy_health: "voxygen.element.ui.generic.frames.enemybar",
|
||||||
enemy_health_bg: "voxygen.element.ui.generic.frames.enemybar_bg",
|
enemy_health_bg: "voxygen.element.ui.generic.frames.enemybar_bg",
|
||||||
|
@ -3,7 +3,7 @@ use super::{RESET_BUTTONS_HEIGHT, RESET_BUTTONS_WIDTH};
|
|||||||
use crate::{
|
use crate::{
|
||||||
hud::{img_ids::Imgs, TEXT_COLOR},
|
hud::{img_ids::Imgs, TEXT_COLOR},
|
||||||
session::settings_change::{Audio as AudioChange, Audio::*},
|
session::settings_change::{Audio as AudioChange, Audio::*},
|
||||||
ui::{fonts::Fonts, ImageSlider},
|
ui::{fonts::Fonts, ImageSlider, ToggleButton},
|
||||||
GlobalState,
|
GlobalState,
|
||||||
};
|
};
|
||||||
use conrod_core::{
|
use conrod_core::{
|
||||||
@ -22,18 +22,23 @@ widget_ids! {
|
|||||||
master_volume_text,
|
master_volume_text,
|
||||||
master_volume_slider,
|
master_volume_slider,
|
||||||
master_volume_number,
|
master_volume_number,
|
||||||
|
master_volume_muted,
|
||||||
inactive_master_volume_text,
|
inactive_master_volume_text,
|
||||||
inactive_master_volume_slider,
|
inactive_master_volume_slider,
|
||||||
inactive_master_volume_number,
|
inactive_master_volume_number,
|
||||||
|
inactive_master_volume_muted,
|
||||||
music_volume_text,
|
music_volume_text,
|
||||||
music_volume_slider,
|
music_volume_slider,
|
||||||
music_volume_number,
|
music_volume_number,
|
||||||
|
music_volume_muted,
|
||||||
sfx_volume_text,
|
sfx_volume_text,
|
||||||
sfx_volume_slider,
|
sfx_volume_slider,
|
||||||
sfx_volume_number,
|
sfx_volume_number,
|
||||||
|
sfx_volume_muted,
|
||||||
ambience_volume_text,
|
ambience_volume_text,
|
||||||
ambience_volume_slider,
|
ambience_volume_slider,
|
||||||
ambience_volume_number,
|
ambience_volume_number,
|
||||||
|
ambience_volume_muted,
|
||||||
music_spacing_text,
|
music_spacing_text,
|
||||||
music_spacing_slider,
|
music_spacing_slider,
|
||||||
music_spacing_number,
|
music_spacing_number,
|
||||||
@ -116,14 +121,14 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
.set(state.ids.master_volume_text, ui);
|
.set(state.ids.master_volume_text, ui);
|
||||||
// Master Volume Slider
|
// Master Volume Slider
|
||||||
if let Some(new_val) = ImageSlider::continuous(
|
if let Some(new_val) = ImageSlider::continuous(
|
||||||
self.global_state.settings.audio.master_volume,
|
self.global_state.settings.audio.master_volume.volume,
|
||||||
0.0,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
self.imgs.slider,
|
self.imgs.slider,
|
||||||
)
|
)
|
||||||
.w_h(104.0, 22.0)
|
.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)
|
.track_breadth(12.0)
|
||||||
.slider_length(10.0)
|
.slider_length(10.0)
|
||||||
.pad_track((5.0, 5.0))
|
.pad_track((5.0, 5.0))
|
||||||
@ -134,13 +139,26 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
// Master Volume Number
|
// Master Volume Number
|
||||||
Text::new(&format!(
|
Text::new(&format!(
|
||||||
"{:2.0}%",
|
"{: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)
|
.right_from(state.ids.master_volume_slider, 8.0)
|
||||||
.font_size(self.fonts.cyri.scale(14))
|
.font_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.master_volume_number, ui);
|
.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)
|
// Master Volume (inactive window)
|
||||||
Text::new(
|
Text::new(
|
||||||
@ -148,21 +166,25 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
.localized_strings
|
.localized_strings
|
||||||
.get_msg("hud-settings-inactive_master_volume_perc"),
|
.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_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.inactive_master_volume_text, ui);
|
.set(state.ids.inactive_master_volume_text, ui);
|
||||||
// Master Volume (inactive window) Slider
|
// Master Volume (inactive window) Slider
|
||||||
if let Some(new_val) = ImageSlider::continuous(
|
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,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
self.imgs.slider,
|
self.imgs.slider,
|
||||||
)
|
)
|
||||||
.w_h(104.0, 22.0)
|
.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)
|
.track_breadth(12.0)
|
||||||
.slider_length(10.0)
|
.slider_length(10.0)
|
||||||
.pad_track((5.0, 5.0))
|
.pad_track((5.0, 5.0))
|
||||||
@ -173,31 +195,60 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
// Master Volume (inactive window) Number
|
// Master Volume (inactive window) Number
|
||||||
Text::new(&format!(
|
Text::new(&format!(
|
||||||
"{:2.0}%",
|
"{: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)
|
.right_from(state.ids.inactive_master_volume_slider, 8.0)
|
||||||
.font_size(self.fonts.cyri.scale(14))
|
.font_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.inactive_master_volume_number, ui);
|
.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
|
// Music Volume
|
||||||
Text::new(&self.localized_strings.get_msg("hud-settings-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_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.music_volume_text, ui);
|
.set(state.ids.music_volume_text, ui);
|
||||||
// Music Volume Slider
|
// Music Volume Slider
|
||||||
if let Some(new_val) = ImageSlider::continuous(
|
if let Some(new_val) = ImageSlider::continuous(
|
||||||
self.global_state.settings.audio.music_volume,
|
self.global_state.settings.audio.music_volume.volume,
|
||||||
0.0,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
self.imgs.slider,
|
self.imgs.slider,
|
||||||
)
|
)
|
||||||
.w_h(104.0, 22.0)
|
.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)
|
.track_breadth(12.0)
|
||||||
.slider_length(10.0)
|
.slider_length(10.0)
|
||||||
.pad_track((5.0, 5.0))
|
.pad_track((5.0, 5.0))
|
||||||
@ -208,13 +259,26 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
// Music Volume Number
|
// Music Volume Number
|
||||||
Text::new(&format!(
|
Text::new(&format!(
|
||||||
"{:2.0}%",
|
"{: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)
|
.right_from(state.ids.music_volume_slider, 8.0)
|
||||||
.font_size(self.fonts.cyri.scale(14))
|
.font_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.music_volume_number, ui);
|
.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
|
// SFX Volume
|
||||||
Text::new(
|
Text::new(
|
||||||
@ -222,21 +286,21 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
.localized_strings
|
.localized_strings
|
||||||
.get_msg("hud-settings-sound_effect_volume"),
|
.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_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.sfx_volume_text, ui);
|
.set(state.ids.sfx_volume_text, ui);
|
||||||
// SFX Volume Slider
|
// SFX Volume Slider
|
||||||
if let Some(new_val) = ImageSlider::continuous(
|
if let Some(new_val) = ImageSlider::continuous(
|
||||||
self.global_state.settings.audio.sfx_volume,
|
self.global_state.settings.audio.sfx_volume.volume,
|
||||||
0.0,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
self.imgs.slider,
|
self.imgs.slider,
|
||||||
)
|
)
|
||||||
.w_h(104.0, 22.0)
|
.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)
|
.track_breadth(12.0)
|
||||||
.slider_length(10.0)
|
.slider_length(10.0)
|
||||||
.pad_track((5.0, 5.0))
|
.pad_track((5.0, 5.0))
|
||||||
@ -247,13 +311,27 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
// SFX Volume Number
|
// SFX Volume Number
|
||||||
Text::new(&format!(
|
Text::new(&format!(
|
||||||
"{:2.0}%",
|
"{: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)
|
.right_from(state.ids.sfx_volume_slider, 8.0)
|
||||||
.font_size(self.fonts.cyri.scale(14))
|
.font_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.sfx_volume_number, ui);
|
.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
|
// Ambience Volume
|
||||||
Text::new(
|
Text::new(
|
||||||
&self
|
&self
|
||||||
@ -267,7 +345,7 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
.set(state.ids.ambience_volume_text, ui);
|
.set(state.ids.ambience_volume_text, ui);
|
||||||
// Ambience Volume Slider
|
// Ambience Volume Slider
|
||||||
if let Some(new_val) = ImageSlider::continuous(
|
if let Some(new_val) = ImageSlider::continuous(
|
||||||
self.global_state.settings.audio.ambience_volume,
|
self.global_state.settings.audio.ambience_volume.volume,
|
||||||
0.0,
|
0.0,
|
||||||
1.0,
|
1.0,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
@ -285,13 +363,26 @@ impl<'a> Widget for Sound<'a> {
|
|||||||
// Ambience Volume Number
|
// Ambience Volume Number
|
||||||
Text::new(&format!(
|
Text::new(&format!(
|
||||||
"{:2.0}%",
|
"{: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)
|
.right_from(state.ids.ambience_volume_slider, 8.0)
|
||||||
.font_size(self.fonts.cyri.scale(14))
|
.font_size(self.fonts.cyri.scale(14))
|
||||||
.font_id(self.fonts.cyri.conrod_id)
|
.font_id(self.fonts.cyri.conrod_id)
|
||||||
.color(TEXT_COLOR)
|
.color(TEXT_COLOR)
|
||||||
.set(state.ids.ambience_volume_number, ui);
|
.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
|
// Music spacing
|
||||||
Text::new(&self.localized_strings.get_msg("hud-settings-music_spacing"))
|
Text::new(&self.localized_strings.get_msg("hud-settings-music_spacing"))
|
||||||
|
@ -230,10 +230,10 @@ fn main() {
|
|||||||
// AudioOutput::Device(ref dev) => Some(dev.clone()),
|
// AudioOutput::Device(ref dev) => Some(dev.clone()),
|
||||||
};
|
};
|
||||||
|
|
||||||
audio.set_master_volume(settings.audio.master_volume);
|
audio.set_master_volume(settings.audio.master_volume.get_checked());
|
||||||
audio.set_music_volume(settings.audio.music_volume);
|
audio.set_music_volume(settings.audio.music_volume.get_checked());
|
||||||
audio.set_sfx_volume(settings.audio.sfx_volume);
|
audio.set_sfx_volume(settings.audio.sfx_volume.get_checked());
|
||||||
audio.set_ambience_volume(settings.audio.ambience_volume);
|
audio.set_ambience_volume(settings.audio.ambience_volume.get_checked());
|
||||||
audio.set_music_spacing(settings.audio.music_spacing);
|
audio.set_music_spacing(settings.audio.music_spacing);
|
||||||
|
|
||||||
// Load the profile.
|
// Load the profile.
|
||||||
|
@ -89,10 +89,14 @@ pub fn run(mut global_state: GlobalState, event_loop: EventLoop) {
|
|||||||
|
|
||||||
if let winit::event::WindowEvent::Focused(focused) = event {
|
if let winit::event::WindowEvent::Focused(focused) = event {
|
||||||
global_state.audio.set_master_volume(if focused {
|
global_state.audio.set_master_volume(if focused {
|
||||||
global_state.settings.audio.master_volume
|
global_state.settings.audio.master_volume.get_checked()
|
||||||
} else {
|
} else {
|
||||||
global_state.settings.audio.inactive_master_volume_perc
|
global_state
|
||||||
* global_state.settings.audio.master_volume
|
.settings
|
||||||
|
.audio
|
||||||
|
.inactive_master_volume_perc
|
||||||
|
.get_checked()
|
||||||
|
* global_state.settings.audio.master_volume.get_checked()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ use crate::{
|
|||||||
},
|
},
|
||||||
render::RenderMode,
|
render::RenderMode,
|
||||||
settings::{
|
settings::{
|
||||||
AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings, GameplaySettings,
|
audio::AudioVolume, AudioSettings, ChatSettings, ControlSettings, Fps, GamepadSettings,
|
||||||
GraphicsSettings, InterfaceSettings,
|
GameplaySettings, GraphicsSettings, InterfaceSettings,
|
||||||
},
|
},
|
||||||
window::FullScreenSettings,
|
window::FullScreenSettings,
|
||||||
GlobalState,
|
GlobalState,
|
||||||
@ -19,10 +19,15 @@ use i18n::{LanguageMetadata, LocalizationHandle};
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub enum Audio {
|
pub enum Audio {
|
||||||
AdjustMasterVolume(f32),
|
AdjustMasterVolume(f32),
|
||||||
|
MuteMasterVolume(bool),
|
||||||
AdjustInactiveMasterVolume(f32),
|
AdjustInactiveMasterVolume(f32),
|
||||||
|
MuteInactiveMasterVolume(bool),
|
||||||
AdjustMusicVolume(f32),
|
AdjustMusicVolume(f32),
|
||||||
|
MuteMusicVolume(bool),
|
||||||
AdjustSfxVolume(f32),
|
AdjustSfxVolume(f32),
|
||||||
|
MuteSfxVolume(bool),
|
||||||
AdjustAmbienceVolume(f32),
|
AdjustAmbienceVolume(f32),
|
||||||
|
MuteAmbienceVolume(bool),
|
||||||
AdjustMusicSpacing(f32),
|
AdjustMusicSpacing(f32),
|
||||||
//ChangeAudioDevice(String),
|
//ChangeAudioDevice(String),
|
||||||
ResetAudioSettings,
|
ResetAudioSettings,
|
||||||
@ -194,31 +199,73 @@ settings_change_from!(Networking);
|
|||||||
impl SettingsChange {
|
impl SettingsChange {
|
||||||
pub fn process(self, global_state: &mut GlobalState, session_state: &mut SessionState) {
|
pub fn process(self, global_state: &mut GlobalState, session_state: &mut SessionState) {
|
||||||
let mut settings = &mut global_state.settings;
|
let mut settings = &mut global_state.settings;
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
SettingsChange::Audio(audio_change) => {
|
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 {
|
match audio_change {
|
||||||
Audio::AdjustMasterVolume(master_volume) => {
|
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) => {
|
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) => {
|
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) => {
|
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) => {
|
Audio::AdjustAmbienceVolume(ambience_volume) => {
|
||||||
global_state.audio.set_ambience_volume(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) => {
|
Audio::AdjustMusicSpacing(multiplier) => {
|
||||||
global_state.audio.set_music_spacing(multiplier);
|
global_state.audio.set_music_spacing(multiplier);
|
||||||
@ -232,9 +279,14 @@ impl SettingsChange {
|
|||||||
//},
|
//},
|
||||||
Audio::ResetAudioSettings => {
|
Audio::ResetAudioSettings => {
|
||||||
settings.audio = AudioSettings::default();
|
settings.audio = AudioSettings::default();
|
||||||
let audio = &settings.audio;
|
|
||||||
global_state.audio.set_music_volume(audio.music_volume);
|
let audio = &mut global_state.audio;
|
||||||
global_state.audio.set_sfx_volume(audio.sfx_volume);
|
|
||||||
|
// 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());
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -15,17 +15,35 @@ pub enum AudioOutput {
|
|||||||
impl AudioOutput {
|
impl AudioOutput {
|
||||||
pub fn is_enabled(&self) -> bool { !matches!(self, Self::Off) }
|
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
|
/// `AudioSettings` controls the volume of different audio subsystems and which
|
||||||
/// device is used.
|
/// device is used.
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub struct AudioSettings {
|
pub struct AudioSettings {
|
||||||
pub master_volume: f32,
|
pub master_volume: AudioVolume,
|
||||||
#[serde(rename = "inactive_master_volume")]
|
#[serde(rename = "inactive_master_volume")]
|
||||||
pub inactive_master_volume_perc: f32,
|
pub inactive_master_volume_perc: AudioVolume,
|
||||||
pub music_volume: f32,
|
pub music_volume: AudioVolume,
|
||||||
pub sfx_volume: f32,
|
pub sfx_volume: AudioVolume,
|
||||||
pub ambience_volume: f32,
|
pub ambience_volume: AudioVolume,
|
||||||
pub num_sfx_channels: usize,
|
pub num_sfx_channels: usize,
|
||||||
pub num_ui_channels: usize,
|
pub num_ui_channels: usize,
|
||||||
pub music_spacing: f32,
|
pub music_spacing: f32,
|
||||||
@ -37,11 +55,11 @@ pub struct AudioSettings {
|
|||||||
impl Default for AudioSettings {
|
impl Default for AudioSettings {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
master_volume: 1.0,
|
master_volume: AudioVolume::new(1.0, false),
|
||||||
inactive_master_volume_perc: 0.5,
|
inactive_master_volume_perc: AudioVolume::new(0.5, false),
|
||||||
music_volume: 0.25,
|
music_volume: AudioVolume::new(0.4, false),
|
||||||
sfx_volume: 0.6,
|
sfx_volume: AudioVolume::new(0.6, false),
|
||||||
ambience_volume: 0.6,
|
ambience_volume: AudioVolume::new(0.6, false),
|
||||||
num_sfx_channels: 60,
|
num_sfx_channels: 60,
|
||||||
num_ui_channels: 10,
|
num_ui_channels: 10,
|
||||||
music_spacing: 1.0,
|
music_spacing: 1.0,
|
||||||
|
Loading…
Reference in New Issue
Block a user