#include "menu.h" #include "menu_commons.h" #include "../locale/langs.h" #include "../gui/GUI.h" #include "../gui/gui_util.h" #include "../../engine.h" #include "../../util/stringutil.h" #include "../../window/Events.h" #include using namespace gui; static void create_volume_trackbar( std::shared_ptr 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(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)); } static void create_controls_panel(Engine* engine) { auto menu = engine->getGUI()->getMenu(); auto panel = menus::create_page(engine, "controls", 400, 0.0f, 1); /* Camera sensitivity setting track bar */{ panel->add(menus::create_label([=]() { float s = engine->getSettings().camera.sensitivity; return langs::get(L"Mouse Sensitivity", L"settings")+L": "+ util::to_wstring(s, 1); })); auto trackbar = std::make_shared(0.1, 10.0, 2.0, 0.1, 4); trackbar->setSupplier([=]() { return engine->getSettings().camera.sensitivity; }); trackbar->setConsumer([=](double value) { engine->getSettings().camera.sensitivity = value; }); panel->add(trackbar); } auto scrollPanel = std::make_shared(glm::vec2(400, 200), glm::vec4(2.0f), 1.0f); scrollPanel->setColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.3f)); scrollPanel->setMaxLength(400); for (auto& entry : Events::bindings){ std::string bindname = entry.first; auto subpanel = std::make_shared(glm::vec2(400, 40), glm::vec4(5.0f), 1.0f); subpanel->setColor(glm::vec4(0.0f)); subpanel->setOrientation(Orientation::horizontal); subpanel->add(std::make_shared(entry.second)); auto label = std::make_shared