Skip to content

Commit 24fbea5

Browse files
committed
Make sound menu options functional.
1 parent 4491aa2 commit 24fbea5

File tree

4 files changed

+131
-60
lines changed

4 files changed

+131
-60
lines changed

src/game/game.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,17 +462,20 @@ void game::setup_audio()
462462
master_volume = 1.0f;
463463
ambience_volume = 1.0f;
464464
effects_volume = 1.0f;
465-
mono_audio = false;
466465
captions = false;
467466
captions_size = 1.0f;
468467

469468
// Read audio settings
470469
read_or_write_setting(*this, "master_volume", master_volume);
471470
read_or_write_setting(*this, "ambience_volume", ambience_volume);
472471
read_or_write_setting(*this, "effects_volume", effects_volume);
473-
read_or_write_setting(*this, "mono_audio", mono_audio);
474472
read_or_write_setting(*this, "captions", captions);
475473
read_or_write_setting(*this, "captions_size", captions_size);
474+
475+
// Limit audio settings
476+
master_volume = math::clamp(master_volume, 0.0f, 1.0f);
477+
ambience_volume = math::clamp(ambience_volume, 0.0f, 1.0f);
478+
effects_volume = math::clamp(effects_volume, 0.0f, 1.0f);
476479

477480
// Init sound system
478481
debug::log_debug("Constructing sound system...");
@@ -482,6 +485,9 @@ void game::setup_audio()
482485
// Print sound system info
483486
debug::log_info("Audio playback device: {}", sound_system->get_playback_device_name());
484487

488+
// Update sound system settings
489+
sound_system->get_listener().set_gain(master_volume);
490+
485491
// Load UI sounds
486492
menu_up_sound = std::make_shared<audio::sound_que>(resource_manager->load<audio::sound_wave>("sounds/menu-up.wav"));
487493
menu_down_sound = std::make_shared<audio::sound_que>(resource_manager->load<audio::sound_wave>("sounds/menu-down.wav"));

src/game/game.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,6 @@ class game
362362
float master_volume;
363363
float ambience_volume;
364364
float effects_volume;
365-
bool mono_audio;
366365
bool captions;
367366
float captions_size;
368367
std::shared_ptr<audio::sound_que> menu_left_sound;

src/game/states/sound-menu-state.cpp

Lines changed: 119 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,26 @@ sound_menu_state::sound_menu_state(::game& ctx):
2525
ambience_volume_value_text = std::make_unique<scene::text>();
2626
effects_volume_name_text = std::make_unique<scene::text>();
2727
effects_volume_value_text = std::make_unique<scene::text>();
28-
mono_audio_name_text = std::make_unique<scene::text>();
29-
mono_audio_value_text = std::make_unique<scene::text>();
30-
captions_name_text = std::make_unique<scene::text>();
31-
captions_value_text = std::make_unique<scene::text>();
32-
captions_size_name_text = std::make_unique<scene::text>();
33-
captions_size_value_text = std::make_unique<scene::text>();
28+
//captions_name_text = std::make_unique<scene::text>();
29+
//captions_value_text = std::make_unique<scene::text>();
30+
//captions_size_name_text = std::make_unique<scene::text>();
31+
//captions_size_value_text = std::make_unique<scene::text>();
3432
back_text = std::make_unique<scene::text>();
3533

3634
// Build list of menu item texts
3735
ctx.menu_item_texts.push_back({master_volume_name_text.get(), master_volume_value_text.get()});
3836
ctx.menu_item_texts.push_back({ambience_volume_name_text.get(), ambience_volume_value_text.get()});
3937
ctx.menu_item_texts.push_back({effects_volume_name_text.get(), effects_volume_value_text.get()});
40-
ctx.menu_item_texts.push_back({mono_audio_name_text.get(), mono_audio_value_text.get()});
41-
ctx.menu_item_texts.push_back({captions_name_text.get(), captions_value_text.get()});
42-
ctx.menu_item_texts.push_back({captions_size_name_text.get(), captions_size_value_text.get()});
38+
//ctx.menu_item_texts.push_back({captions_name_text.get(), captions_value_text.get()});
39+
//ctx.menu_item_texts.push_back({captions_size_name_text.get(), captions_size_value_text.get()});
4340
ctx.menu_item_texts.push_back({back_text.get(), nullptr});
4441

4542
// Set content of menu item texts
4643
master_volume_name_text->set_content(get_string(ctx, "sound_menu_master_volume"));
4744
ambience_volume_name_text->set_content(get_string(ctx, "sound_menu_ambience_volume"));
4845
effects_volume_name_text->set_content(get_string(ctx, "sound_menu_effects_volume"));
49-
mono_audio_name_text->set_content(get_string(ctx, "sound_menu_mono_audio"));
50-
captions_name_text->set_content(get_string(ctx, "sound_menu_captions"));
51-
captions_size_name_text->set_content(get_string(ctx, "sound_menu_captions_size"));
46+
//captions_name_text->set_content(get_string(ctx, "sound_menu_captions"));
47+
//captions_size_name_text->set_content(get_string(ctx, "sound_menu_captions_size"));
5248
back_text->set_content(get_string(ctx, "back"));
5349
update_value_text_content();
5450

@@ -61,45 +57,119 @@ sound_menu_state::sound_menu_state(::game& ctx):
6157
::menu::add_text_to_ui(ctx);
6258

6359
// Construct menu item callbacks
64-
auto increase_volume_callback = [this, &ctx](float* volume)
60+
61+
auto increase_master_volume_callback = [this, &ctx]()
6562
{
6663
// Increase volume
6764
if (ctx.menu_modifier_action.is_active())
68-
*volume += 0.01f;
65+
ctx.master_volume += 0.01f;
6966
else
70-
*volume += 0.1f;
71-
67+
ctx.master_volume += 0.1f;
68+
7269
// Limit volume
73-
if (*volume > 1.0f)
74-
*volume = 1.0f;
75-
70+
ctx.master_volume = math::clamp(ctx.master_volume, 0.0f, 1.0f);
71+
72+
// Update listener gain
73+
ctx.sound_system->get_listener().set_gain(ctx.master_volume);
74+
75+
// Update master volume setting
76+
(*ctx.settings)["master_volume"] = ctx.master_volume;
77+
7678
this->update_value_text_content();
7779
::menu::align_text(ctx);
7880
};
79-
auto decrease_volume_callback = [this, &ctx](float* volume)
81+
auto decrease_master_volume_callback = [this, &ctx]()
8082
{
8183
// Decrease volume
8284
if (ctx.menu_modifier_action.is_active())
83-
*volume -= 0.01f;
85+
ctx.master_volume -= 0.01f;
8486
else
85-
*volume -= 0.1f;
86-
87+
ctx.master_volume -= 0.1f;
88+
8789
// Limit volume
88-
if (*volume < 0.0f)
89-
*volume = 0.0f;
90-
90+
ctx.master_volume = math::clamp(ctx.master_volume, 0.0f, 1.0f);
91+
92+
// Update listener gain
93+
ctx.sound_system->get_listener().set_gain(ctx.master_volume);
94+
95+
// Update master volume setting
96+
(*ctx.settings)["master_volume"] = ctx.master_volume;
97+
9198
this->update_value_text_content();
9299
::menu::align_text(ctx);
93100
};
94-
95-
auto toggle_mono_audio_callback = [this, &ctx]()
101+
102+
auto increase_ambience_volume_callback = [this, &ctx]()
96103
{
97-
ctx.mono_audio = !ctx.mono_audio;
98-
104+
// Increase volume
105+
if (ctx.menu_modifier_action.is_active())
106+
ctx.ambience_volume += 0.01f;
107+
else
108+
ctx.ambience_volume += 0.1f;
109+
110+
// Limit volume
111+
ctx.ambience_volume = math::clamp(ctx.ambience_volume, 0.0f, 1.0f);
112+
113+
// Update volume setting
114+
(*ctx.settings)["ambience_volume"] = ctx.ambience_volume;
115+
116+
this->update_value_text_content();
117+
::menu::align_text(ctx);
118+
};
119+
auto decrease_ambience_volume_callback = [this, &ctx]()
120+
{
121+
// Decrease volume
122+
if (ctx.menu_modifier_action.is_active())
123+
ctx.ambience_volume -= 0.01f;
124+
else
125+
ctx.ambience_volume -= 0.1f;
126+
127+
// Limit volume
128+
ctx.ambience_volume = math::clamp(ctx.ambience_volume, 0.0f, 1.0f);
129+
130+
// Update volume setting
131+
(*ctx.settings)["ambience_volume"] = ctx.ambience_volume;
132+
133+
this->update_value_text_content();
134+
::menu::align_text(ctx);
135+
};
136+
137+
auto increase_effects_volume_callback = [this, &ctx]()
138+
{
139+
// Increase volume
140+
if (ctx.menu_modifier_action.is_active())
141+
ctx.effects_volume += 0.01f;
142+
else
143+
ctx.effects_volume += 0.1f;
144+
145+
// Limit volume
146+
ctx.effects_volume = math::clamp(ctx.effects_volume, 0.0f, 1.0f);
147+
148+
// Update volume setting
149+
(*ctx.settings)["effects_volume"] = ctx.effects_volume;
150+
151+
this->update_value_text_content();
152+
::menu::align_text(ctx);
153+
};
154+
auto decrease_effects_volume_callback = [this, &ctx]()
155+
{
156+
// Decrease volume
157+
if (ctx.menu_modifier_action.is_active())
158+
ctx.effects_volume -= 0.01f;
159+
else
160+
ctx.effects_volume -= 0.1f;
161+
162+
// Limit volume
163+
ctx.effects_volume = math::clamp(ctx.effects_volume, 0.0f, 1.0f);
164+
165+
// Update volume setting
166+
(*ctx.settings)["effects_volume"] = ctx.effects_volume;
167+
99168
this->update_value_text_content();
100169
::menu::align_text(ctx);
101170
};
102171

172+
/*
103173
auto toggle_captions_callback = [this, &ctx]()
104174
{
105175
ctx.captions = !ctx.captions;
@@ -139,6 +209,8 @@ sound_menu_state::sound_menu_state(::game& ctx):
139209
this->update_value_text_content();
140210
::menu::align_text(ctx);
141211
};
212+
*/
213+
142214
auto select_back_callback = [&ctx]()
143215
{
144216
// Disable menu controls
@@ -163,30 +235,27 @@ sound_menu_state::sound_menu_state(::game& ctx):
163235
};
164236

165237
// Build list of menu select callbacks
166-
ctx.menu_select_callbacks.push_back(std::bind(increase_volume_callback, &ctx.master_volume));
167-
ctx.menu_select_callbacks.push_back(std::bind(increase_volume_callback, &ctx.ambience_volume));
168-
ctx.menu_select_callbacks.push_back(std::bind(increase_volume_callback, &ctx.effects_volume));
169-
ctx.menu_select_callbacks.push_back(toggle_mono_audio_callback);
170-
ctx.menu_select_callbacks.push_back(toggle_captions_callback);
171-
ctx.menu_select_callbacks.push_back(increase_captions_size_callback);
238+
ctx.menu_select_callbacks.push_back(std::bind(increase_master_volume_callback));
239+
ctx.menu_select_callbacks.push_back(std::bind(increase_ambience_volume_callback));
240+
ctx.menu_select_callbacks.push_back(std::bind(increase_effects_volume_callback));
241+
//ctx.menu_select_callbacks.push_back(toggle_captions_callback);
242+
//ctx.menu_select_callbacks.push_back(increase_captions_size_callback);
172243
ctx.menu_select_callbacks.push_back(select_back_callback);
173244

174245
// Build list of menu left callbacks
175-
ctx.menu_left_callbacks.push_back(std::bind(decrease_volume_callback, &ctx.master_volume));
176-
ctx.menu_left_callbacks.push_back(std::bind(decrease_volume_callback, &ctx.ambience_volume));
177-
ctx.menu_left_callbacks.push_back(std::bind(decrease_volume_callback, &ctx.effects_volume));
178-
ctx.menu_left_callbacks.push_back(toggle_mono_audio_callback);
179-
ctx.menu_left_callbacks.push_back(toggle_captions_callback);
180-
ctx.menu_left_callbacks.push_back(decrease_captions_size_callback);
246+
ctx.menu_left_callbacks.push_back(std::bind(decrease_master_volume_callback));
247+
ctx.menu_left_callbacks.push_back(std::bind(decrease_ambience_volume_callback));
248+
ctx.menu_left_callbacks.push_back(std::bind(decrease_effects_volume_callback));
249+
//ctx.menu_left_callbacks.push_back(toggle_captions_callback);
250+
//ctx.menu_left_callbacks.push_back(decrease_captions_size_callback);
181251
ctx.menu_left_callbacks.push_back(nullptr);
182252

183253
// Build list of menu right callbacks
184-
ctx.menu_right_callbacks.push_back(std::bind(increase_volume_callback, &ctx.master_volume));
185-
ctx.menu_right_callbacks.push_back(std::bind(increase_volume_callback, &ctx.ambience_volume));
186-
ctx.menu_right_callbacks.push_back(std::bind(increase_volume_callback, &ctx.effects_volume));
187-
ctx.menu_right_callbacks.push_back(toggle_mono_audio_callback);
188-
ctx.menu_right_callbacks.push_back(toggle_captions_callback);
189-
ctx.menu_right_callbacks.push_back(increase_captions_size_callback);
254+
ctx.menu_right_callbacks.push_back(std::bind(increase_master_volume_callback));
255+
ctx.menu_right_callbacks.push_back(std::bind(increase_ambience_volume_callback));
256+
ctx.menu_right_callbacks.push_back(std::bind(increase_effects_volume_callback));
257+
//ctx.menu_right_callbacks.push_back(toggle_captions_callback);
258+
//ctx.menu_right_callbacks.push_back(increase_captions_size_callback);
190259
ctx.menu_right_callbacks.push_back(nullptr);
191260

192261
// Set menu back callback
@@ -222,7 +291,6 @@ void sound_menu_state::update_value_text_content()
222291
std::get<1>(ctx.menu_item_texts[0])->set_content(std::to_string(static_cast<int>(std::round(ctx.master_volume * 100.0f))) + "%");
223292
std::get<1>(ctx.menu_item_texts[1])->set_content(std::to_string(static_cast<int>(std::round(ctx.ambience_volume * 100.0f))) + "%");
224293
std::get<1>(ctx.menu_item_texts[2])->set_content(std::to_string(static_cast<int>(std::round(ctx.effects_volume * 100.0f))) + "%");
225-
std::get<1>(ctx.menu_item_texts[3])->set_content((ctx.mono_audio) ? string_on : string_off);
226-
std::get<1>(ctx.menu_item_texts[4])->set_content((ctx.captions) ? string_on : string_off);
227-
std::get<1>(ctx.menu_item_texts[5])->set_content(std::to_string(static_cast<int>(std::round(ctx.captions_size * 100.0f))) + "%");
294+
//std::get<1>(ctx.menu_item_texts[4])->set_content((ctx.captions) ? string_on : string_off);
295+
//std::get<1>(ctx.menu_item_texts[5])->set_content(std::to_string(static_cast<int>(std::round(ctx.captions_size * 100.0f))) + "%");
228296
}

src/game/states/sound-menu-state.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,10 @@ class sound_menu_state: public game_state
2323
std::unique_ptr<scene::text> ambience_volume_value_text;
2424
std::unique_ptr<scene::text> effects_volume_name_text;
2525
std::unique_ptr<scene::text> effects_volume_value_text;
26-
std::unique_ptr<scene::text> mono_audio_name_text;
27-
std::unique_ptr<scene::text> mono_audio_value_text;
28-
std::unique_ptr<scene::text> captions_name_text;
29-
std::unique_ptr<scene::text> captions_value_text;
30-
std::unique_ptr<scene::text> captions_size_name_text;
31-
std::unique_ptr<scene::text> captions_size_value_text;
26+
//std::unique_ptr<scene::text> captions_name_text;
27+
//std::unique_ptr<scene::text> captions_value_text;
28+
//std::unique_ptr<scene::text> captions_size_name_text;
29+
//std::unique_ptr<scene::text> captions_size_value_text;
3230
std::unique_ptr<scene::text> back_text;
3331
};
3432

0 commit comments

Comments
 (0)