mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'mckol/mute-keybinds' into 'master'
Mute audio keybinds (and respective buttons in settings) See merge request veloren/veloren!3361
This commit is contained in:
commit
f590e68f7e
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/mute_btn_press.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/mute_btn_press.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.
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn_press.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/ui/generic/buttons/muted_btn_press.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -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
|
||||
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
|
||||
|
@ -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
|
||||
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
|
||||
|
@ -152,6 +152,16 @@ pub enum GameInput {
|
||||
SpectateSpeedBoost,
|
||||
#[strum(serialize = "gameinput-spectateviewpoint")]
|
||||
SpectateViewpoint,
|
||||
#[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 {
|
||||
|
@ -556,6 +556,15 @@ 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_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
|
||||
enemy_health: "voxygen.element.ui.generic.frames.enemybar",
|
||||
enemy_health_bg: "voxygen.element.ui.generic.frames.enemybar_bg",
|
||||
|
@ -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::{
|
||||
@ -4122,6 +4124,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());
|
||||
@ -4185,6 +4194,23 @@ 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 => {
|
||||
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 => {
|
||||
if let Some(slot) = try_hotbar_slot_from_input(input) {
|
||||
|
@ -1,14 +1,14 @@
|
||||
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},
|
||||
ui::{fonts::Fonts, ImageSlider, ToggleButton},
|
||||
GlobalState,
|
||||
};
|
||||
use conrod_core::{
|
||||
color,
|
||||
position::Relative,
|
||||
position::{Align, Relative},
|
||||
widget::{self, Button, Rectangle, Scrollbar, Text},
|
||||
widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon,
|
||||
};
|
||||
@ -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,
|
||||
@ -107,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)
|
||||
@ -114,16 +125,30 @@ 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,
|
||||
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,7 +159,7 @@ 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))
|
||||
@ -148,21 +173,50 @@ 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) 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.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 +227,50 @@ 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)
|
||||
.color(non_master_volume_text_color)
|
||||
.set(state.ids.inactive_master_volume_number, ui);
|
||||
|
||||
// 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 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,
|
||||
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,12 +281,12 @@ 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)
|
||||
.color(non_master_volume_text_color)
|
||||
.set(state.ids.music_volume_number, ui);
|
||||
|
||||
// SFX Volume
|
||||
@ -222,21 +295,35 @@ 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 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,
|
||||
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,34 +334,49 @@ 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)
|
||||
.color(non_master_volume_text_color)
|
||||
.set(state.ids.sfx_volume_number, ui);
|
||||
|
||||
// Ambience Volume
|
||||
Text::new(
|
||||
&self
|
||||
.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)
|
||||
.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,
|
||||
self.global_state.settings.audio.ambience_volume.volume,
|
||||
0.0,
|
||||
1.0,
|
||||
self.imgs.slider_indicator,
|
||||
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))
|
||||
@ -285,17 +387,17 @@ 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)
|
||||
.color(non_master_volume_text_color)
|
||||
.set(state.ids.ambience_volume_number, ui);
|
||||
|
||||
// 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)
|
||||
@ -310,6 +412,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))
|
||||
@ -361,6 +464,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)
|
||||
|
@ -142,10 +142,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.
|
||||
|
@ -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),
|
||||
|
@ -90,10 +90,14 @@ pub fn run(mut global_state: GlobalState, event_loop: EventLoop, server: Option<
|
||||
|
||||
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()
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
},
|
||||
}
|
||||
},
|
||||
|
@ -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,
|
||||
|
@ -17,7 +17,7 @@ impl From<ControlSettings> 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,76 +121,81 @@ impl ControlSettings {
|
||||
false
|
||||
}
|
||||
|
||||
pub fn default_binding(game_input: GameInput) -> KeyMouse {
|
||||
pub fn default_binding(game_input: GameInput) -> Option<KeyMouse> {
|
||||
// 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::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::MuteMaster => Some(KeyMouse::Key(VirtualKeyCode::Mute)),
|
||||
GameInput::MuteInactiveMaster => None,
|
||||
GameInput::MuteMusic => Some(KeyMouse::Key(VirtualKeyCode::F8)),
|
||||
GameInput::MuteSfx => None,
|
||||
GameInput::MuteAmbience => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -203,7 +208,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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user