Added mute buttons for all of the audio sliders in settings

This commit is contained in:
Mckol 2022-05-09 03:11:34 +02:00 committed by LunarEclipse
parent e35e533d88
commit 6605c2657f
10 changed files with 232 additions and 48 deletions

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

Binary file not shown.

BIN
assets/voxygen/element/ui/generic/buttons/muted_btn.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

View File

@ -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",

View File

@ -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"))

View File

@ -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.

View File

@ -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()
}); });
} }

View File

@ -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());
}, },
} }
}, },

View File

@ -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,