Merge branch 'shandley/veloren-seperate-sfx-vol-control' into 'master'

Seperate sfx vol control

Closes #252, #251, and #248

See merge request veloren/veloren!510
This commit is contained in:
Joshua Barretto 2019-09-25 08:19:55 +00:00
commit 6717e5551b
4 changed files with 62 additions and 19 deletions

View File

@ -93,7 +93,7 @@ impl AudioFrontend {
let id = self.next_channel_id; let id = self.next_channel_id;
self.next_channel_id += 1; self.next_channel_id += 1;
let volume = self.music_volume; let sfx_volume = self.sfx_volume;
if let Some(_) = &self.audio_device { if let Some(_) = &self.audio_device {
let calc_pos = ((pos - self.listener_pos) * FALLOFF).into_array(); let calc_pos = ((pos - self.listener_pos) * FALLOFF).into_array();
@ -105,7 +105,7 @@ impl AudioFrontend {
if let Some(channel) = self.get_channel() { if let Some(channel) = self.get_channel() {
channel.set_id(id); channel.set_id(id);
channel.set_volume(volume); channel.set_volume(sfx_volume);
channel.set_emitter_position(calc_pos); channel.set_emitter_position(calc_pos);
channel.set_left_ear_position(left_ear); channel.set_left_ear_position(left_ear);
channel.set_right_ear_position(right_ear); channel.set_right_ear_position(right_ear);
@ -145,14 +145,19 @@ impl AudioFrontend {
let id = self.next_channel_id; let id = self.next_channel_id;
self.next_channel_id += 1; self.next_channel_id += 1;
let music_volume = self.music_volume;
if let Some(_) = &self.audio_device { if let Some(_) = &self.audio_device {
let file = assets::load_file(&sound, &["ogg"]).unwrap(); let file = assets::load_file(&sound, &["ogg"]).unwrap();
let sound = Decoder::new(file).unwrap(); let sound = Decoder::new(file).unwrap();
if let Some(channel) = self.get_channel() { if let Some(channel) = self.get_channel() {
channel.set_id(id); channel.set_id(id);
channel.set_volume(music_volume);
channel.play(sound); channel.play(sound);
} }
} else {
log::warn!("No available channels!");
} }
id id
@ -173,22 +178,22 @@ impl AudioFrontend {
self.music_volume self.music_volume
} }
pub fn set_sfx_volume(&mut self, volume: f32) { pub fn set_sfx_volume(&mut self, sfx_volume: f32) {
self.sfx_volume = volume; self.sfx_volume = sfx_volume;
for channel in self.channels.iter_mut() { for channel in self.channels.iter_mut() {
if channel.get_audio_type() == AudioType::Sfx { if channel.get_audio_type() == AudioType::Sfx {
channel.set_volume(volume); channel.set_volume(sfx_volume);
} }
} }
} }
pub fn set_music_volume(&mut self, volume: f32) { pub fn set_music_volume(&mut self, music_volume: f32) {
self.music_volume = volume; self.music_volume = music_volume;
for channel in self.channels.iter_mut() { for channel in self.channels.iter_mut() {
if channel.get_audio_type() == AudioType::Music { if channel.get_audio_type() == AudioType::Music {
channel.set_volume(volume); channel.set_volume(music_volume);
} }
} }
} }

View File

@ -152,7 +152,8 @@ pub enum Event {
AdjustMousePan(u32), AdjustMousePan(u32),
AdjustMouseZoom(u32), AdjustMouseZoom(u32),
AdjustViewDistance(u32), AdjustViewDistance(u32),
AdjustVolume(f32), AdjustMusicVolume(f32),
AdjustSfxVolume(f32),
ChangeAudioDevice(String), ChangeAudioDevice(String),
ChangeMaxFPS(u32), ChangeMaxFPS(u32),
ChangeFOV(u16), ChangeFOV(u16),
@ -788,8 +789,11 @@ impl Hud {
settings_window::Event::CrosshairTransp(crosshair_transp) => { settings_window::Event::CrosshairTransp(crosshair_transp) => {
events.push(Event::CrosshairTransp(crosshair_transp)); events.push(Event::CrosshairTransp(crosshair_transp));
} }
settings_window::Event::AdjustVolume(volume) => { settings_window::Event::AdjustMusicVolume(music_volume) => {
events.push(Event::AdjustVolume(volume)); events.push(Event::AdjustMusicVolume(music_volume));
}
settings_window::Event::AdjustSfxVolume(sfx_volume) => {
events.push(Event::AdjustSfxVolume(sfx_volume));
} }
settings_window::Event::MaximumFPS(max_fps) => { settings_window::Event::MaximumFPS(max_fps) => {
events.push(Event::ChangeMaxFPS(max_fps)); events.push(Event::ChangeMaxFPS(max_fps));

View File

@ -78,6 +78,8 @@ widget_ids! {
fov_value, fov_value,
audio_volume_slider, audio_volume_slider,
audio_volume_text, audio_volume_text,
sfx_volume_slider,
sfx_volume_text,
audio_device_list, audio_device_list,
audio_device_text, audio_device_text,
hotbar_title, hotbar_title,
@ -151,7 +153,8 @@ pub enum Event {
AdjustMouseZoom(u32), AdjustMouseZoom(u32),
AdjustViewDistance(u32), AdjustViewDistance(u32),
AdjustFOV(u16), AdjustFOV(u16),
AdjustVolume(f32), AdjustMusicVolume(f32),
AdjustSfxVolume(f32),
ChangeAudioDevice(String), ChangeAudioDevice(String),
MaximumFPS(u32), MaximumFPS(u32),
CrosshairTransp(f32), CrosshairTransp(f32),
@ -1225,7 +1228,8 @@ impl<'a> Widget for SettingsWindow<'a> {
// Contents // Contents
if let SettingsTab::Sound = self.show.settings_tab { if let SettingsTab::Sound = self.show.settings_tab {
Text::new("Volume") // Music Volume -----------------------------------------------------
Text::new("Music Volume")
.top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0) .top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0)
.font_size(14) .font_size(14)
.font_id(self.fonts.opensans) .font_id(self.fonts.opensans)
@ -1246,14 +1250,39 @@ impl<'a> Widget for SettingsWindow<'a> {
.pad_track((5.0, 5.0)) .pad_track((5.0, 5.0))
.set(state.ids.audio_volume_slider, ui) .set(state.ids.audio_volume_slider, ui)
{ {
events.push(Event::AdjustVolume(new_val)); events.push(Event::AdjustMusicVolume(new_val));
}
// SFX Volume -------------------------------------------------------
Text::new("Sound Effects Volume")
.down_from(state.ids.audio_volume_slider, 10.0)
.font_size(14)
.font_id(self.fonts.opensans)
.color(TEXT_COLOR)
.set(state.ids.sfx_volume_text, ui);
if let Some(new_val) = ImageSlider::continuous(
self.global_state.settings.audio.sfx_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)
.track_breadth(12.0)
.slider_length(10.0)
.pad_track((5.0, 5.0))
.set(state.ids.sfx_volume_slider, ui)
{
events.push(Event::AdjustSfxVolume(new_val));
} }
// Audio Device Selector -------------------------------------------- // Audio Device Selector --------------------------------------------
let device = &self.global_state.audio.device; let device = &self.global_state.audio.device;
let device_list = &self.global_state.audio.device_list; let device_list = &self.global_state.audio.device_list;
Text::new("Volume") Text::new("Audio Device")
.down_from(state.ids.audio_volume_slider, 10.0) .down_from(state.ids.sfx_volume_slider, 10.0)
.font_size(14) .font_size(14)
.font_id(self.fonts.opensans) .font_id(self.fonts.opensans)
.color(TEXT_COLOR) .color(TEXT_COLOR)

View File

@ -408,11 +408,16 @@ impl PlayState for SessionState {
self.hud.scale_change(scale_change); self.hud.scale_change(scale_change);
global_state.settings.save_to_file_warn(); global_state.settings.save_to_file_warn();
} }
HudEvent::AdjustMusicVolume(music_volume) => {
global_state.audio.set_music_volume(music_volume);
HudEvent::AdjustVolume(volume) => { global_state.settings.audio.music_volume = music_volume;
global_state.audio.set_music_volume(volume); global_state.settings.save_to_file_warn();
}
HudEvent::AdjustSfxVolume(sfx_volume) => {
global_state.audio.set_sfx_volume(sfx_volume);
global_state.settings.audio.music_volume = volume; global_state.settings.audio.sfx_volume = sfx_volume;
global_state.settings.save_to_file_warn(); global_state.settings.save_to_file_warn();
} }
HudEvent::ChangeAudioDevice(name) => { HudEvent::ChangeAudioDevice(name) => {