ugly, refactor required
This commit is contained in:
parent
d47193cbb3
commit
e456b77143
23
res/layouts/pages/settings-audio.xml
Normal file
23
res/layouts/pages/settings-audio.xml
Normal 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>
|
||||
37
res/layouts/pages/settings-audio.xml.lua
Normal file
37
res/layouts/pages/settings-audio.xml.lua
Normal 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
|
||||
@ -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";
|
||||
}
|
||||
|
||||
@ -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()) {
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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}
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user