diff options
Diffstat (limited to 'StarsEx/AudioConfig.cpp')
-rw-r--r-- | StarsEx/AudioConfig.cpp | 177 |
1 files changed, 86 insertions, 91 deletions
diff --git a/StarsEx/AudioConfig.cpp b/StarsEx/AudioConfig.cpp index 8d4d74a..b025c41 100644 --- a/StarsEx/AudioConfig.cpp +++ b/StarsEx/AudioConfig.cpp @@ -13,6 +13,8 @@ #include "AudioConfig.h" +#include <algorithm> + #include "DataLoader.h" #include "ParseUtil.h" #include "Button.h" @@ -20,27 +22,30 @@ // +--------------------------------------------------------------------+ -static AudioConfig* audio_config = 0; +static AudioConfig* audio_config = nullptr; // +--------------------------------------------------------------------+ -AudioConfig::AudioConfig() - : menu_music(90), - game_music(90), - efx_volume(90), - gui_volume(90), - wrn_volume(90), - vox_volume(90), - training(false) +AudioConfig::AudioConfig() : + master_volume(100), + music_volume(100), + world_volume(100), + menu_music(80), + game_music(80), + efx_volume(80), + gui_volume(80), + wrn_volume(80), + vox_volume(80), + training(false) { if (!audio_config) - audio_config = this; + audio_config = this; } AudioConfig::~AudioConfig() { if (audio_config == this) - audio_config = 0; + audio_config = nullptr; } // +--------------------------------------------------------------------+ @@ -50,14 +55,14 @@ AudioConfig::Initialize() { audio_config = new AudioConfig; if (audio_config) - audio_config->Load(); + audio_config->Load(); } void AudioConfig::Close() { delete audio_config; - audio_config = 0; + audio_config = nullptr; } AudioConfig* @@ -68,12 +73,19 @@ AudioConfig::GetInstance() // +--------------------------------------------------------------------+ +static constexpr +int +denormalize(const double& v) +{ + return -50 * (100.0 - v); +} + int AudioConfig::MenuMusic() { if (audio_config) - return -50 * (100 - audio_config->menu_music); - + return denormalize( + audio_config->menu_music * (audio_config->music_volume / 100.0) * (audio_config->master_volume / 100.0)); return 0; } @@ -83,7 +95,8 @@ AudioConfig::GameMusic() int vol = 0; if (audio_config) { - vol = -50 * (100 - audio_config->game_music); + vol = denormalize( + audio_config->game_music * (audio_config->music_volume / 100.0) * (audio_config->master_volume / 100.0)); if (audio_config->training) vol -= 2000; @@ -98,7 +111,8 @@ AudioConfig::EfxVolume() int vol = 0; if (audio_config) { - vol = -50 * (100 - audio_config->efx_volume); + vol = denormalize( + audio_config->efx_volume * (audio_config->world_volume / 100.0) * (audio_config->master_volume / 100.0)); if (audio_config->training) vol -= 2000; @@ -111,8 +125,7 @@ int AudioConfig::GuiVolume() { if (audio_config) - return -50 * (100 - audio_config->gui_volume); - + return denormalize(audio_config->gui_volume * (audio_config->master_volume / 100.0)); return 0; } @@ -122,7 +135,8 @@ AudioConfig::WrnVolume() int vol = 0; if (audio_config) { - vol = -50 * (100 - audio_config->wrn_volume); + vol = denormalize( + audio_config->wrn_volume * (audio_config->world_volume / 100.0) * (audio_config->master_volume / 100.0)); if (audio_config->training) vol -= 2000; @@ -137,7 +151,8 @@ AudioConfig::VoxVolume() int vol = 0; if (audio_config) { - vol = -50 * (100 - audio_config->vox_volume); + vol = denormalize( + audio_config->vox_volume * (audio_config->world_volume / 100.0) * (audio_config->master_volume / 100.0)); if (audio_config->training && vol < -750) vol = -750; @@ -162,59 +177,59 @@ AudioConfig::SetTraining(bool t) // +--------------------------------------------------------------------+ void -AudioConfig::SetMenuMusic(int v) +AudioConfig::SetMasterVolume(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; + master_volume = std::clamp(v, 0, 100); + Button::SetVolume(GuiVolume()); +} - menu_music = v; +void +AudioConfig::SetMusicVolume(int v) +{ + music_volume = std::clamp(v, 0, 100); } void -AudioConfig::SetGameMusic(int v) +AudioConfig::SetWorldVolume(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; + world_volume = std::clamp(v, 0, 100); +} - game_music = v; +void +AudioConfig::SetMenuMusic(int v) +{ + menu_music = std::clamp(v, 0, 100); } void -AudioConfig::SetEfxVolume(int v) +AudioConfig::SetGameMusic(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; + game_music = std::clamp(v, 0, 100); +} - efx_volume = v; +void +AudioConfig::SetEfxVolume(int v) +{ + efx_volume = std::clamp(v, 0, 100); } void AudioConfig::SetGuiVolume(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; - - gui_volume = v; - Button::SetVolume(-50 * (100 - gui_volume)); + gui_volume = std::clamp(v, 0, 100); + Button::SetVolume(GuiVolume()); } void AudioConfig::SetWrnVolume(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; - - wrn_volume = v; - Button::SetVolume(-50 * (100 - wrn_volume)); + wrn_volume = std::clamp(v, 0, 100); } void AudioConfig::SetVoxVolume(int v) { - if (v < 0) v = 0; - else if (v > 100) v = 100; - - vox_volume = v; + vox_volume = std::clamp(v, 0, 100); } // +--------------------------------------------------------------------+ @@ -274,72 +289,49 @@ AudioConfig::Load() TermDef* def = term->isDef(); if (def) { - if (def->name()->value() == "menu_music") { + if (def->name()->value() == "master_volume") { GetDefNumber(v, def, filename); + SetMasterVolume(v); + } - if (v < 0 || v > 100) { - Print("WARNING: Invalid menu_music (%d) in '%s'\n", v, filename); - } - else { - menu_music = v; - } + if (def->name()->value() == "music_volume") { + GetDefNumber(v, def, filename); + SetMusicVolume(v); } - else if (def->name()->value() == "game_music") { + if (def->name()->value() == "world_volume") { + GetDefNumber(v, def, filename); + SetWorldVolume(v); + } + + if (def->name()->value() == "menu_music") { GetDefNumber(v, def, filename); + SetMenuMusic(v); + } - if (v < 0 || v > 100) { - Print("WARNING: Invalid game_music (%d) in '%s'\n", v, filename); - } - else { - game_music = v; - } + else if (def->name()->value() == "game_music") { + GetDefNumber(v, def, filename); + SetGameMusic(v); } else if (def->name()->value() == "efx_volume") { GetDefNumber(v, def, filename); - - if (v < 0 || v > 100) { - Print("WARNING: Invalid efx_volume (%d) in '%s'\n", v, filename); - } - else { - efx_volume = v; - } + SetEfxVolume(v); } else if (def->name()->value() == "gui_volume") { GetDefNumber(v, def, filename); - - if (v < 0 || v > 100) { - Print("WARNING: Invalid gui_volume (%d) in '%s'\n", v, filename); - } - else { - gui_volume = v; - - Button::SetVolume(-50 * (100 - gui_volume)); - } + SetGuiVolume(v); } else if (def->name()->value() == "wrn_volume") { GetDefNumber(v, def, filename); - - if (v < 0 || v > 100) { - Print("WARNING: Invalid wrn_volume (%d) in '%s'\n", v, filename); - } - else { - wrn_volume = v; - } + SetWrnVolume(v); } else if (def->name()->value() == "vox_volume") { GetDefNumber(v, def, filename); - - if (v < 0 || v > 100) { - Print("WARNING: Invalid vox_volume (%d) in '%s'\n", v, filename); - } - else { - vox_volume = v; - } + SetVoxVolume(v); } else @@ -366,6 +358,9 @@ AudioConfig::Save() fopen_s(&f, "audio.cfg", "wb"); if (f) { fprintf(f, "AUDIO\n\n"); + fprintf(f, "master_volume: %3d\n", master_volume); + fprintf(f, "music_volume: %3d\n", music_volume); + fprintf(f, "world_volume: %3d\n\n", world_volume); fprintf(f, "menu_music: %3d\n", menu_music); fprintf(f, "game_music: %3d\n\n", game_music); fprintf(f, "efx_volume: %3d\n", efx_volume); |