audio settings menu
This commit is contained in:
parent
9150af19ea
commit
a971f6dccf
@ -23,6 +23,7 @@ menu.Controls=Управление
|
|||||||
menu.Back to Main Menu=Вернуться в Меню
|
menu.Back to Main Menu=Вернуться в Меню
|
||||||
menu.Settings=Настройки
|
menu.Settings=Настройки
|
||||||
menu.Content=Контент
|
menu.Content=Контент
|
||||||
|
menu.Audio=Звук
|
||||||
world.Seed=Зерно
|
world.Seed=Зерно
|
||||||
world.Name=Название
|
world.Name=Название
|
||||||
|
|
||||||
@ -41,6 +42,11 @@ settings.Fog Curve=Кривая Тумана
|
|||||||
settings.Backlight=Подсветка
|
settings.Backlight=Подсветка
|
||||||
settings.V-Sync=Вертикальная Синхронизация
|
settings.V-Sync=Вертикальная Синхронизация
|
||||||
settings.Camera Shaking=Тряска Камеры
|
settings.Camera Shaking=Тряска Камеры
|
||||||
|
settings.Master Volume=Общая Громкость
|
||||||
|
settings.Regular Sounds=Обычные Звуки
|
||||||
|
settings.UI Sounds=Звуки Интерфейса
|
||||||
|
settings.Ambient=Фон
|
||||||
|
settings.Music=Музыка
|
||||||
|
|
||||||
settings.FOV=Поле Зрения
|
settings.FOV=Поле Зрения
|
||||||
settings.Mouse Sensitivity=Чувствительность Мыши
|
settings.Mouse Sensitivity=Чувствительность Мыши
|
||||||
|
|||||||
@ -356,6 +356,10 @@ Channel* audio::get_channel(int index) {
|
|||||||
return channels.at(index).get();
|
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) {
|
std::shared_ptr<Stream> audio::get_associated_stream(speakerid_t id) {
|
||||||
auto found = streams.find(id);
|
auto found = streams.find(id);
|
||||||
if (found != streams.end()) {
|
if (found != streams.end()) {
|
||||||
|
|||||||
@ -55,6 +55,16 @@ namespace audio {
|
|||||||
/// @brief Get channel name
|
/// @brief Get channel name
|
||||||
const std::string& getName() const;
|
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
|
/// @brief Pause all speakers in channel
|
||||||
void pause();
|
void pause();
|
||||||
|
|
||||||
@ -472,10 +482,15 @@ namespace audio {
|
|||||||
extern int get_channel_index(const std::string& name);
|
extern int get_channel_index(const std::string& name);
|
||||||
|
|
||||||
/// @brief Get channel by index. 0 - is master channel
|
/// @brief Get channel by index. 0 - is master channel
|
||||||
/// @param name channel index
|
/// @param index channel index
|
||||||
/// @return channel or nullptr
|
/// @return channel or nullptr
|
||||||
extern Channel* get_channel(int index);
|
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
|
/// @brief Get stream associated with speaker
|
||||||
/// @param id speaker id
|
/// @param id speaker id
|
||||||
/// @return stream or nullptr
|
/// @return stream or nullptr
|
||||||
|
|||||||
@ -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() {
|
void Engine::mainloop() {
|
||||||
setScreen(std::make_shared<MenuScreen>(this));
|
setScreen(std::make_shared<MenuScreen>(this));
|
||||||
|
|
||||||
@ -125,8 +138,7 @@ void Engine::mainloop() {
|
|||||||
assert(screen != nullptr);
|
assert(screen != nullptr);
|
||||||
updateTimers();
|
updateTimers();
|
||||||
updateHotkeys();
|
updateHotkeys();
|
||||||
|
updateAudio(delta, settings.audio);
|
||||||
audio::update(delta);
|
|
||||||
|
|
||||||
gui->act(delta);
|
gui->act(delta);
|
||||||
screen->update(delta);
|
screen->update(delta);
|
||||||
|
|||||||
@ -11,7 +11,42 @@
|
|||||||
|
|
||||||
using namespace gui;
|
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) {
|
void menus::create_settings_panel(Engine* engine) {
|
||||||
|
create_audio_settings_panel(engine);
|
||||||
|
|
||||||
auto menu = engine->getGUI()->getMenu();
|
auto menu = engine->getGUI()->getMenu();
|
||||||
auto panel = menus::create_page(engine, "settings", 400, 0.0f, 1);
|
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),
|
util::str2wstr_utf8(langName),
|
||||||
"languages", menu));
|
"languages", menu));
|
||||||
|
|
||||||
|
panel->add(guiutil::gotoButton(L"Audio", "settings-audio", menu));
|
||||||
panel->add(guiutil::gotoButton(L"Controls", "controls", menu));
|
panel->add(guiutil::gotoButton(L"Controls", "controls", menu));
|
||||||
panel->add(guiutil::backButton(menu));
|
panel->add(guiutil::backButton(menu));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -153,6 +153,10 @@ void LevelScreen::update(float delta) {
|
|||||||
|
|
||||||
auto player = controller->getPlayer();
|
auto player = controller->getPlayer();
|
||||||
auto camera = player->camera;
|
auto camera = player->camera;
|
||||||
|
|
||||||
|
bool paused = hud->isPause();
|
||||||
|
audio::get_channel("regular")->setPaused(paused);
|
||||||
|
audio::get_channel("ambient")->setPaused(paused);
|
||||||
audio::set_listener(
|
audio::set_listener(
|
||||||
camera->position-camera->dir,
|
camera->position-camera->dir,
|
||||||
player->hitbox->velocity,
|
player->hitbox->velocity,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user