audio settings menu

This commit is contained in:
MihailRis
2024-03-12 23:49:42 +03:00
parent 9150af19ea
commit a971f6dccf
6 changed files with 80 additions and 3 deletions
+4
View File
@@ -356,6 +356,10 @@ Channel* audio::get_channel(int index) {
return channels.at(index).get();
}
Channel* audio::get_channel(const std::string& name) {
return get_channel(get_channel_index(name));
}
std::shared_ptr<Stream> audio::get_associated_stream(speakerid_t id) {
auto found = streams.find(id);
if (found != streams.end()) {
+16 -1
View File
@@ -55,6 +55,16 @@ namespace audio {
/// @brief Get channel name
const std::string& getName() const;
inline void setPaused(bool flag) {
if (flag == paused)
return;
if (flag) {
pause();
} else {
resume();
}
}
/// @brief Pause all speakers in channel
void pause();
@@ -472,10 +482,15 @@ namespace audio {
extern int get_channel_index(const std::string& name);
/// @brief Get channel by index. 0 - is master channel
/// @param name channel index
/// @param index channel index
/// @return channel or nullptr
extern Channel* get_channel(int index);
/// @brief Get channel by name.
/// @param name channel name
/// @return channel or nullptr
extern Channel* get_channel(const std::string& name);
/// @brief Get stream associated with speaker
/// @param id speaker id
/// @return stream or nullptr
+14 -2
View File
@@ -114,6 +114,19 @@ void Engine::updateHotkeys() {
}
}
inline constexpr float sqr(float x) {
return x*x;
}
static void updateAudio(double delta, const AudioSettings& settings) {
audio::get_channel("master")->setVolume(sqr(settings.volumeMaster));
audio::get_channel("regular")->setVolume(sqr(settings.volumeRegular));
audio::get_channel("ui")->setVolume(sqr(settings.volumeUI));
audio::get_channel("ambient")->setVolume(sqr(settings.volumeAmbient));
audio::get_channel("music")->setVolume(sqr(settings.volumeMusic));
audio::update(delta);
}
void Engine::mainloop() {
setScreen(std::make_shared<MenuScreen>(this));
@@ -125,8 +138,7 @@ void Engine::mainloop() {
assert(screen != nullptr);
updateTimers();
updateHotkeys();
audio::update(delta);
updateAudio(delta, settings.audio);
gui->act(delta);
screen->update(delta);
+36
View File
@@ -11,7 +11,42 @@
using namespace gui;
static void create_volume_trackbar(
std::shared_ptr<Panel> panel,
const std::wstring& name,
float* field
) {
panel->add(menus::create_label([=]() {
return langs::get(name, L"settings")+L": " +
std::to_wstring(int(*field*100))+L"%";
}));
auto trackbar = std::make_shared<TrackBar>(0.0, 1.0, 1.0, 0.01, 5);
trackbar->setSupplier([=]() {
return *field;
});
trackbar->setConsumer([=](double value) {
*field = value;
});
panel->add(trackbar);
}
void create_audio_settings_panel(Engine* engine) {
auto menu = engine->getGUI()->getMenu();
auto panel = menus::create_page(engine, "settings-audio", 400, 0.0f, 1);
auto& settings = engine->getSettings().audio;
create_volume_trackbar(panel, L"Master Volume", &settings.volumeMaster);
create_volume_trackbar(panel, L"Regular Sounds", &settings.volumeRegular);
create_volume_trackbar(panel, L"UI Sounds", &settings.volumeUI);
create_volume_trackbar(panel, L"Ambient", &settings.volumeAmbient);
create_volume_trackbar(panel, L"Music", &settings.volumeMusic);
panel->add(guiutil::backButton(menu));
}
void menus::create_settings_panel(Engine* engine) {
create_audio_settings_panel(engine);
auto menu = engine->getGUI()->getMenu();
auto panel = menus::create_page(engine, "settings", 400, 0.0f, 1);
@@ -125,6 +160,7 @@ void menus::create_settings_panel(Engine* engine) {
util::str2wstr_utf8(langName),
"languages", menu));
panel->add(guiutil::gotoButton(L"Audio", "settings-audio", menu));
panel->add(guiutil::gotoButton(L"Controls", "controls", menu));
panel->add(guiutil::backButton(menu));
}
+4
View File
@@ -153,6 +153,10 @@ void LevelScreen::update(float delta) {
auto player = controller->getPlayer();
auto camera = player->camera;
bool paused = hud->isPause();
audio::get_channel("regular")->setPaused(paused);
audio::get_channel("ambient")->setPaused(paused);
audio::set_listener(
camera->position-camera->dir,
player->hitbox->velocity,