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:
|
case setting_format::simple:
|
||||||
return util::to_string(value);
|
return util::to_string(value);
|
||||||
case setting_format::percent:
|
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:
|
default:
|
||||||
return "invalid format";
|
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) {
|
void SettingsHandler::setValue(const std::string& name, dynamic::Value value) {
|
||||||
auto found = map.find(name);
|
auto found = map.find(name);
|
||||||
if (found == map.end()) {
|
if (found == map.end()) {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ public:
|
|||||||
|
|
||||||
dynamic::Value getValue(const std::string& name) const;
|
dynamic::Value getValue(const std::string& name) const;
|
||||||
void setValue(const std::string& name, dynamic::Value value);
|
void setValue(const std::string& name, dynamic::Value value);
|
||||||
|
std::string toString(const std::string& name) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern std::string write_controls();
|
extern std::string write_controls();
|
||||||
|
|||||||
@ -271,4 +271,5 @@ void menus::refresh_menus(Engine* engine) {
|
|||||||
create_world_generators_panel(engine);
|
create_world_generators_panel(engine);
|
||||||
add_page_loader(engine, "main");
|
add_page_loader(engine, "main");
|
||||||
load_page(engine, "404");
|
load_page(engine, "404");
|
||||||
|
add_page_loader(engine, "settings-audio");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,39 +12,6 @@
|
|||||||
|
|
||||||
using namespace gui;
|
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) {
|
static void create_controls_panel(Engine* engine) {
|
||||||
auto menu = engine->getGUI()->getMenu();
|
auto menu = engine->getGUI()->getMenu();
|
||||||
auto panel = menus::create_page(engine, "controls", 400, 0.0f, 1);
|
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) {
|
void menus::create_settings_panel(Engine* engine) {
|
||||||
create_audio_settings_panel(engine);
|
//create_audio_settings_panel(engine);
|
||||||
create_controls_panel(engine);
|
create_controls_panel(engine);
|
||||||
|
|
||||||
auto menu = engine->getGUI()->getMenu();
|
auto menu = engine->getGUI()->getMenu();
|
||||||
|
|||||||
@ -84,6 +84,13 @@ static int l_set_setting(lua_State* L) {
|
|||||||
return 0;
|
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) {
|
static int l_quit(lua_State* L) {
|
||||||
Window::setShouldClose(true);
|
Window::setShouldClose(true);
|
||||||
return 0;
|
return 0;
|
||||||
@ -97,6 +104,7 @@ const luaL_Reg corelib [] = {
|
|||||||
{"get_bindings", lua_wrap_errors<l_get_bindings>},
|
{"get_bindings", lua_wrap_errors<l_get_bindings>},
|
||||||
{"get_setting", lua_wrap_errors<l_get_setting>},
|
{"get_setting", lua_wrap_errors<l_get_setting>},
|
||||||
{"set_setting", lua_wrap_errors<l_set_setting>},
|
{"set_setting", lua_wrap_errors<l_set_setting>},
|
||||||
|
{"str_setting", lua_wrap_errors<l_str_setting>},
|
||||||
{"quit", lua_wrap_errors<l_quit>},
|
{"quit", lua_wrap_errors<l_quit>},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user