diff --git a/src/config/lua/ConfigManager.cpp b/src/config/lua/ConfigManager.cpp index ecc1e32c3..0dd962000 100644 --- a/src/config/lua/ConfigManager.cpp +++ b/src/config/lua/ConfigManager.cpp @@ -721,9 +721,9 @@ int CConfigManager::getDeviceInt(const std::string& dev, const std::string& fiel float CConfigManager::getDeviceFloat(const std::string& dev, const std::string& field, const std::string& fb) { std::string fallback = luaConfigValueName(fb); if (auto* v = findDeviceValue(normalizeDeviceName(dev), luaConfigValueName(field)); v && v->setByUser()) - return *sc(v->data()); + return v->asFloat(); if (!fallback.empty() && m_configValues.contains(fallback)) - return *sc(m_configValues.at(fallback)->data()); + return m_configValues.at(fallback)->asFloat(); return 0.F; } @@ -731,9 +731,9 @@ Vector2D CConfigManager::getDeviceVec(const std::string& dev, const std::string& std::string fallback = luaConfigValueName(fb); auto toVec = [](const Config::VEC2& v) -> Vector2D { return {v.x, v.y}; }; if (auto* v = findDeviceValue(normalizeDeviceName(dev), luaConfigValueName(field)); v && v->setByUser()) - return toVec(*sc(v->data())); + return toVec(v->asVec2()); if (!fallback.empty() && m_configValues.contains(fallback)) - return toVec(*sc(m_configValues.at(fallback)->data())); + return toVec(m_configValues.at(fallback)->asVec2()); return {0, 0}; } @@ -741,9 +741,9 @@ std::string CConfigManager::getDeviceString(const std::string& dev, const std::s std::string fallback = luaConfigValueName(fb); auto clean = [](const Config::STRING& s) -> std::string { return s == STRVAL_EMPTY ? "" : s; }; if (auto* v = findDeviceValue(normalizeDeviceName(dev), luaConfigValueName(field)); v && v->setByUser()) - return clean(*sc(v->data())); + return clean(v->asString()); if (!fallback.empty() && m_configValues.contains(fallback)) - return clean(*sc(m_configValues.at(fallback)->data())); + return clean(m_configValues.at(fallback)->asString()); return ""; } diff --git a/src/config/lua/types/LuaConfigFloat.cpp b/src/config/lua/types/LuaConfigFloat.cpp index 9d2574b68..be3fd7497 100644 --- a/src/config/lua/types/LuaConfigFloat.cpp +++ b/src/config/lua/types/LuaConfigFloat.cpp @@ -71,6 +71,10 @@ void CLuaConfigFloat::push(lua_State* s) { lua_pushnumber(s, m_data); } +Config::FLOAT CLuaConfigFloat::asFloat() { + return m_data; +} + const Config::FLOAT& CLuaConfigFloat::parsed() { return m_data; } diff --git a/src/config/lua/types/LuaConfigFloat.hpp b/src/config/lua/types/LuaConfigFloat.hpp index e6602b5a3..16263b7ef 100644 --- a/src/config/lua/types/LuaConfigFloat.hpp +++ b/src/config/lua/types/LuaConfigFloat.hpp @@ -16,6 +16,7 @@ namespace Config::Lua { virtual std::string toString(); virtual void push(lua_State* s); virtual void reset(); + virtual Config::FLOAT asFloat(); const Config::FLOAT& parsed(); diff --git a/src/config/lua/types/LuaConfigString.cpp b/src/config/lua/types/LuaConfigString.cpp index c16a587bb..e35d5f1ba 100644 --- a/src/config/lua/types/LuaConfigString.cpp +++ b/src/config/lua/types/LuaConfigString.cpp @@ -47,6 +47,10 @@ void CLuaConfigString::push(lua_State* s) { lua_pushstring(s, m_data.c_str()); } +Config::STRING CLuaConfigString::asString() { + return m_data; +} + const Config::STRING& CLuaConfigString::parsed() { return m_data; } diff --git a/src/config/lua/types/LuaConfigString.hpp b/src/config/lua/types/LuaConfigString.hpp index d976b6abc..c823e553e 100644 --- a/src/config/lua/types/LuaConfigString.hpp +++ b/src/config/lua/types/LuaConfigString.hpp @@ -18,6 +18,7 @@ namespace Config::Lua { virtual std::string toString(); virtual void push(lua_State* s); virtual void reset(); + virtual Config::STRING asString(); const Config::STRING& parsed(); diff --git a/src/config/lua/types/LuaConfigValue.cpp b/src/config/lua/types/LuaConfigValue.cpp index 6b1643da1..8d3027cd4 100644 --- a/src/config/lua/types/LuaConfigValue.cpp +++ b/src/config/lua/types/LuaConfigValue.cpp @@ -25,3 +25,18 @@ Config::INTEGER ILuaConfigValue::asInt() { RASSERT(false, "Lua config value cannot be read as int"); return 0; } + +Config::FLOAT ILuaConfigValue::asFloat() { + RASSERT(false, "Lua config value cannot be read as float"); + return 0.F; +} + +Config::VEC2 ILuaConfigValue::asVec2() { + RASSERT(false, "Lua config value cannot be read as vec2"); + return {}; +} + +Config::STRING ILuaConfigValue::asString() { + RASSERT(false, "Lua config value cannot be read as string"); + return {}; +} diff --git a/src/config/lua/types/LuaConfigValue.hpp b/src/config/lua/types/LuaConfigValue.hpp index f1090a782..93e8b755a 100644 --- a/src/config/lua/types/LuaConfigValue.hpp +++ b/src/config/lua/types/LuaConfigValue.hpp @@ -42,6 +42,9 @@ namespace Config::Lua { virtual void reset() = 0; virtual Config::INTEGER asInt(); + virtual Config::FLOAT asFloat(); + virtual Config::VEC2 asVec2(); + virtual Config::STRING asString(); virtual void resetSetByUser(); virtual bool setByUser(); virtual void setRefreshBits(Supplementary::PropRefreshBits bits); diff --git a/src/config/lua/types/LuaConfigVec2.cpp b/src/config/lua/types/LuaConfigVec2.cpp index 5e92de620..cfda0c1b6 100644 --- a/src/config/lua/types/LuaConfigVec2.cpp +++ b/src/config/lua/types/LuaConfigVec2.cpp @@ -91,6 +91,10 @@ void CLuaConfigVec2::push(lua_State* s) { lua_setfield(s, -2, "y"); } +Config::VEC2 CLuaConfigVec2::asVec2() { + return m_data; +} + const Config::VEC2& CLuaConfigVec2::parsed() { return m_data; } diff --git a/src/config/lua/types/LuaConfigVec2.hpp b/src/config/lua/types/LuaConfigVec2.hpp index c65601210..80a8ce735 100644 --- a/src/config/lua/types/LuaConfigVec2.hpp +++ b/src/config/lua/types/LuaConfigVec2.hpp @@ -18,6 +18,7 @@ namespace Config::Lua { virtual std::string toString(); virtual void push(lua_State* s); virtual void reset(); + virtual Config::VEC2 asVec2(); const Config::VEC2& parsed(); diff --git a/tests/config/lua/LuaConfigUtils.cpp b/tests/config/lua/LuaConfigUtils.cpp index dba478a2b..5a7af36f4 100644 --- a/tests/config/lua/LuaConfigUtils.cpp +++ b/tests/config/lua/LuaConfigUtils.cpp @@ -104,12 +104,21 @@ TEST(ConfigLuaUtils, fromGenericValueCopiesRefreshBits) { EXPECT_EQ(out->refreshBits(), REFRESH); } -TEST(ConfigLuaUtils, asIntReadsBoolAndIntValues) { - CLuaConfigBool boolFalse(false); - CLuaConfigBool boolTrue(true); - CLuaConfigInt intValue(2); +TEST(ConfigLuaUtils, typedAccessorsReadStoredValues) { + CLuaConfigBool boolFalse(false); + CLuaConfigBool boolTrue(true); + CLuaConfigInt intValue(2); + CLuaConfigFloat floatValue(1.25F); + CLuaConfigVec2 vecValue({3, 4}); + CLuaConfigString stringValue("value"); EXPECT_EQ(boolFalse.asInt(), 0); EXPECT_EQ(boolTrue.asInt(), 1); EXPECT_EQ(intValue.asInt(), 2); + EXPECT_FLOAT_EQ(floatValue.asFloat(), 1.25F); + + const auto vec = vecValue.asVec2(); + EXPECT_EQ(vec.x, 3); + EXPECT_EQ(vec.y, 4); + EXPECT_EQ(stringValue.asString(), "value"); }