LuaState tovalue, pushvalue for dynamic::Value

This commit is contained in:
MihailRis
2024-04-01 00:04:10 +03:00
parent 8950f4ecd5
commit 75a7b89fc8
9 changed files with 126 additions and 31 deletions
+35
View File
@@ -19,6 +19,41 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
map.emplace("camera.sensitivity", &settings.camera.sensitivity);
}
dynamic::Value SettingsHandler::getValue(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;
if (auto number = dynamic_cast<NumberSetting*>(setting)) {
return dynamic::Value::of((number_t)number->get());
} else {
throw std::runtime_error("type is not implemented for '"+name+"'");
}
}
void SettingsHandler::setValue(const std::string& name, dynamic::Value value) {
auto found = map.find(name);
if (found == map.end()) {
throw std::runtime_error("setting '"+name+"' does not exist");
}
auto setting = found->second;
if (auto number = dynamic_cast<NumberSetting*>(setting)) {
switch (value.type) {
case dynamic::valtype::integer:
number->set(std::get<integer_t>(value.value));
break;
case dynamic::valtype::number:
number->set(std::get<number_t>(value.value));
break;
default:
throw std::runtime_error("type error, numeric value expected");
}
} else {
throw std::runtime_error("type is not implement - setting '"+name+"'");
}
}
toml::Wrapper* create_wrapper(EngineSettings& settings) {
auto wrapper = std::make_unique<toml::Wrapper>();