summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/AudioConfig.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'StarsEx/AudioConfig.cpp')
-rw-r--r--StarsEx/AudioConfig.cpp177
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);