ugly, refactor required

This commit is contained in:
MihailRis 2024-04-01 20:16:45 +03:00
parent d47193cbb3
commit e456b77143
8 changed files with 81 additions and 35 deletions

View File

@ -0,0 +1,23 @@
<panel size='400' color='0' interval='1'>
<label id='l_master'>-</label>
<trackbar min='0' max='1' value='1' step='0.01' track-width='5'
consumer='on_master_change'
supplier='core.get_setting("audio.volume-master")'/>
<label id='l_regular'>-</label>
<trackbar min='0' max='1' value='1' step='0.01' track-width='5'
consumer='on_regular_change'
supplier='core.get_setting("audio.volume-regular")'/>
<label id='l_ui'>-</label>
<trackbar min='0' max='1' value='1' step='0.01' track-width='5'
consumer='on_ui_change'
supplier='core.get_setting("audio.volume-ui")'/>
<label id='l_ambient'>-</label>
<trackbar min='0' max='1' value='1' step='0.01' track-width='5'
consumer='on_ambient_change'
supplier='core.get_setting("audio.volume-ambient")'/>
<label id='l_music'>-</label>
<trackbar min='0' max='1' value='1' step='0.01' track-width='5'
consumer='on_music_change'
supplier='core.get_setting("audio.volume-music")'/>
<button padding='10' onclick='menu:back()'>@Back</button>
</panel>

View File

@ -0,0 +1,37 @@
function on_open()
on_master_change()
on_regular_change()
on_ui_change()
on_ambient_change()
on_music_change()
end
function on_volume_change(setting, label, name, val)
if val ~= nil then
core.set_setting(setting, val)
end
label.text = (
gui.str(name, "settings")..": "..
core.str_setting(setting)
)
end
function on_master_change(val)
on_volume_change("audio.volume-master", document.l_master, "Master Volume", val)
end
function on_regular_change(val)
on_volume_change("audio.volume-regular", document.l_regular, "Regular Sounds", val)
end
function on_ui_change(val)
on_volume_change("audio.volume-ui", document.l_ui, "UI Sounds", val)
end
function on_ambient_change(val)
on_volume_change("audio.volume-ambient", document.l_ambient, "Ambient", val)
end
function on_music_change(val)
on_volume_change("audio.volume-music", document.l_music, "Music", val)
end

View File

@ -7,7 +7,7 @@ std::string NumberSetting::toString() const {
case setting_format::simple:
return util::to_string(value);
case setting_format::percent:
return std::to_string(static_cast<integer_t>(value * 100)) + "%";
return std::to_string(static_cast<integer_t>(round(value * 100))) + "%";
default:
return "invalid format";
}

View File

@ -32,6 +32,15 @@ dynamic::Value SettingsHandler::getValue(const std::string& name) const {
}
}
std::string SettingsHandler::toString(const std::string& name) const {
auto found = map.find(name);
if (found == map.end()) {
throw std::runtime_error("setting '"+name+"' does not exist");
}
auto setting = found->second;
return setting->toString();
}
void SettingsHandler::setValue(const std::string& name, dynamic::Value value) {
auto found = map.find(name);
if (found == map.end()) {

View File

@ -17,6 +17,7 @@ public:
dynamic::Value getValue(const std::string& name) const;
void setValue(const std::string& name, dynamic::Value value);
std::string toString(const std::string& name) const;
};
extern std::string write_controls();

View File

@ -271,4 +271,5 @@ void menus::refresh_menus(Engine* engine) {
create_world_generators_panel(engine);
add_page_loader(engine, "main");
load_page(engine, "404");
add_page_loader(engine, "settings-audio");
}

View File

@ -12,39 +12,6 @@
using namespace gui;
static void create_volume_trackbar(
std::shared_ptr<Panel> panel,
const std::wstring& name,
NumberSetting* field
) {
panel->add(menus::create_label([=]() {
return langs::get(name, L"settings")+L": " +
util::str2wstr_utf8(field->toString());
}));
auto trackbar = std::make_shared<TrackBar>(0.0, 1.0, 1.0, 0.01, 5);
trackbar->setSupplier([=]() {
return field->get();
});
trackbar->setConsumer([=](double value) {
field->set(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);
@ -88,7 +55,7 @@ static void create_controls_panel(Engine* engine) {
}
void menus::create_settings_panel(Engine* engine) {
create_audio_settings_panel(engine);
//create_audio_settings_panel(engine);
create_controls_panel(engine);
auto menu = engine->getGUI()->getMenu();

View File

@ -84,6 +84,13 @@ static int l_set_setting(lua_State* L) {
return 0;
}
static int l_str_setting(lua_State* L) {
auto name = lua_tostring(L, 1);
const auto string = scripting::engine->getSettingsHandler().toString(name);
scripting::state->pushstring(string);
return 1;
}
static int l_quit(lua_State* L) {
Window::setShouldClose(true);
return 0;
@ -97,6 +104,7 @@ const luaL_Reg corelib [] = {
{"get_bindings", lua_wrap_errors<l_get_bindings>},
{"get_setting", lua_wrap_errors<l_get_setting>},
{"set_setting", lua_wrap_errors<l_set_setting>},
{"str_setting", lua_wrap_errors<l_str_setting>},
{"quit", lua_wrap_errors<l_quit>},
{NULL, NULL}
};