Add mute setting (toggled by the mute key and in the volume menu) (#6415)

* Add mute setting (toggled by the mute key and in the volume menu)
master
DTA7 2017-09-26 08:17:50 +02:00 committed by Loïc Blot
parent 6f1c907204
commit 9eb163ab4f
4 changed files with 70 additions and 34 deletions

View File

@ -763,6 +763,8 @@ enable_sound (Sound) bool true
sound_volume (Volume) float 0.7 0.0 1.0
mute_sound (Mute sound) bool false
[Client]
[*Network]

View File

@ -37,6 +37,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("address", "");
settings->setDefault("enable_sound", "true");
settings->setDefault("sound_volume", "0.8");
settings->setDefault("mute_sound", "false");
settings->setDefault("enable_mesh_cache", "false");
settings->setDefault("mesh_generation_interval", "0");
settings->setDefault("meshgen_block_cache_size", "20");

View File

@ -2553,14 +2553,12 @@ void Game::processKeyInput()
} else if (wasKeyDown(KeyType::NOCLIP)) {
toggleNoClip();
} else if (wasKeyDown(KeyType::MUTE)) {
float volume = g_settings->getFloat("sound_volume");
if (volume < 0.001f) {
g_settings->setFloat("sound_volume", 1.0f);
showStatusTextSimple("Volume changed to 100%");
} else {
g_settings->setFloat("sound_volume", 0.0f);
showStatusTextSimple("Volume changed to 0%");
}
bool new_mute_sound = !g_settings->getBool("mute_sound");
g_settings->setBool("mute_sound", new_mute_sound);
if (new_mute_sound)
showStatusTextSimple("Sound muted");
else
showStatusTextSimple("Sound unmuted");
runData.statustext_time = 0;
} else if (wasKeyDown(KeyType::INC_VOLUME)) {
float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f);
@ -3558,6 +3556,10 @@ void Game::updateSound(f32 dtime)
camera->getDirection(),
camera->getCameraNode()->getUpVector());
bool mute_sound = g_settings->getBool("mute_sound");
if (mute_sound) {
sound->setListenerGain(0.0f);
} else {
// Check if volume is in the proper range, else fix it.
float old_volume = g_settings->getFloat("sound_volume");
float new_volume = rangelim(old_volume, 0.0f, 1.0f);
@ -3566,6 +3568,7 @@ void Game::updateSound(f32 dtime)
if (old_volume != new_volume) {
g_settings->setFloat("sound_volume", new_volume);
}
}
LocalPlayer *player = client->getEnv().getLocalPlayer();

View File

@ -33,6 +33,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
const int ID_soundText = 263;
const int ID_soundExitButton = 264;
const int ID_soundSlider = 265;
const int ID_soundMuteButton = 266;
GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
@ -85,7 +86,7 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
*/
{
core::rect<s32> rect(0, 0, 160, 20);
rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35);
rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 70);
const wchar_t *text = wgettext("Sound Volume: ");
core::stringw volume_text = text;
@ -105,12 +106,20 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
}
{
core::rect<s32> rect(0, 0, 300, 20);
rect = rect + v2s32(size.X/2-150, size.Y/2);
rect = rect + v2s32(size.X / 2 - 150, size.Y / 2);
gui::IGUIScrollBar *e = Environment->addScrollBar(true,
rect, this, ID_soundSlider);
e->setMax(100);
e->setPos(volume);
}
{
core::rect<s32> rect(0, 0, 160, 20);
rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35);
const wchar_t *text = wgettext("Muted");
Environment->addCheckBox(g_settings->getBool("mute_sound"), rect, this,
ID_soundMuteButton, text);
delete[] text;
}
}
void GUIVolumeChange::drawMenu()
@ -136,6 +145,15 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
quitMenu();
return true;
}
} else if (event.EventType == EET_GUI_EVENT) {
if (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) {
gui::IGUIElement *e = getElementFromId(ID_soundMuteButton);
if (e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) {
g_settings->setBool("mute_sound", ((gui::IGUICheckBox*)e)->isChecked());
}
Environment->setFocus(this);
return true;
}
if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
@ -143,8 +161,18 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
quitMenu();
return true;
}
Environment->setFocus(this);
}
if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
&& isVisible()) {
if (!canTakeFocus(event.GUIEvent.Element)) {
dstream << "GUIMainMenu: Not allowing focus change."
<< std::endl;
// Returning true disables focus change
return true;
}
}
if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
if (event.GUIEvent.Caller->getID() == ID_soundSlider) {
s32 pos = ((gui::IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
@ -161,6 +189,8 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
}
}
}
return Parent ? Parent->OnEvent(event) : false;
}