Skip to content

Commit

Permalink
Add mute setting (toggled by the mute key and in the volume menu) (#6415
Browse files Browse the repository at this point in the history
)

* Add mute setting (toggled by the mute key and in the volume menu)
  • Loading branch information
DTA7 authored and nerzhul committed Sep 26, 2017
1 parent 6f1c907 commit 9eb163a
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 34 deletions.
2 changes: 2 additions & 0 deletions builtin/settingtypes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
1 change: 1 addition & 0 deletions src/defaultsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
31 changes: 17 additions & 14 deletions src/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -3558,13 +3556,18 @@ void Game::updateSound(f32 dtime)
camera->getDirection(),
camera->getCameraNode()->getUpVector());

// 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);
sound->setListenerGain(new_volume);
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);
sound->setListenerGain(new_volume);

if (old_volume != new_volume) {
g_settings->setFloat("sound_volume", new_volume);
if (old_volume != new_volume) {
g_settings->setFloat("sound_volume", new_volume);
}
}

LocalPlayer *player = client->getEnv().getLocalPlayer();
Expand Down
70 changes: 50 additions & 20 deletions src/guiVolumeChange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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()
Expand All @@ -136,29 +145,50 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
quitMenu();
return true;
}
}

if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
if (event.GUIEvent.Caller->getID() == ID_soundExitButton) {
quitMenu();
} 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_SCROLL_BAR_CHANGED) {
if (event.GUIEvent.Caller->getID() == ID_soundSlider) {
s32 pos = ((gui::IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
g_settings->setFloat("sound_volume", (float) pos / 100);

gui::IGUIElement *e = getElementFromId(ID_soundText);
const wchar_t *text = wgettext("Sound Volume: ");
core::stringw volume_text = text;
delete [] text;
if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
if (event.GUIEvent.Caller->getID() == ID_soundExitButton) {
quitMenu();
return true;
}
Environment->setFocus(this);
}

volume_text += core::stringw(pos) + core::stringw("%");
e->setText(volume_text.c_str());
return true;
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();
g_settings->setFloat("sound_volume", (float) pos / 100);

gui::IGUIElement *e = getElementFromId(ID_soundText);
const wchar_t *text = wgettext("Sound Volume: ");
core::stringw volume_text = text;
delete [] text;

volume_text += core::stringw(pos) + core::stringw("%");
e->setText(volume_text.c_str());
return true;
}
}

}

return Parent ? Parent->OnEvent(event) : false;
Expand Down

0 comments on commit 9eb163a

Please sign in to comment.