From 336dc6c04e5bd0b1ebeadab81970da6367345f4f Mon Sep 17 00:00:00 2001 From: ImperishableSecret <57067794+imperishableSecret@users.noreply.github.com> Date: Thu, 7 May 2026 01:18:30 +0530 Subject: config/lua: fix device bool int reads (#14313) * config/lua: fix device bool int reads * config/lua: fix device typed reads --- src/config/lua/ConfigManager.cpp | 16 ++++++++-------- src/config/lua/types/LuaConfigBool.cpp | 4 ++++ src/config/lua/types/LuaConfigBool.hpp | 1 + src/config/lua/types/LuaConfigFloat.cpp | 4 ++++ src/config/lua/types/LuaConfigFloat.hpp | 1 + src/config/lua/types/LuaConfigInt.cpp | 4 ++++ src/config/lua/types/LuaConfigInt.hpp | 1 + src/config/lua/types/LuaConfigString.cpp | 4 ++++ src/config/lua/types/LuaConfigString.hpp | 1 + src/config/lua/types/LuaConfigUtils.hpp | 2 +- src/config/lua/types/LuaConfigValue.cpp | 22 ++++++++++++++++++++++ src/config/lua/types/LuaConfigValue.hpp | 4 ++++ src/config/lua/types/LuaConfigVec2.cpp | 4 ++++ src/config/lua/types/LuaConfigVec2.hpp | 1 + 14 files changed, 60 insertions(+), 9 deletions(-) (limited to 'src/config') diff --git a/src/config/lua/ConfigManager.cpp b/src/config/lua/ConfigManager.cpp index 0fe75b18..0dd96200 100644 --- a/src/config/lua/ConfigManager.cpp +++ b/src/config/lua/ConfigManager.cpp @@ -712,18 +712,18 @@ ILuaConfigValue* CConfigManager::findDeviceValue(const std::string& dev, const s int CConfigManager::getDeviceInt(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 (int)*sc(v->data()); + return v->asInt(); if (!fallback.empty() && m_configValues.contains(fallback)) - return (int)*sc(m_configValues.at(fallback)->data()); + return m_configValues.at(fallback)->asInt(); return 0; } 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/LuaConfigBool.cpp b/src/config/lua/types/LuaConfigBool.cpp index 15413598..2162d0b0 100644 --- a/src/config/lua/types/LuaConfigBool.cpp +++ b/src/config/lua/types/LuaConfigBool.cpp @@ -43,6 +43,10 @@ void CLuaConfigBool::push(lua_State* s) { lua_pushboolean(s, m_data); } +Config::INTEGER CLuaConfigBool::asInt() { + return m_data ? 1 : 0; +} + const Config::BOOL& CLuaConfigBool::parsed() { return m_data; } diff --git a/src/config/lua/types/LuaConfigBool.hpp b/src/config/lua/types/LuaConfigBool.hpp index b4644aa4..bda06adc 100644 --- a/src/config/lua/types/LuaConfigBool.hpp +++ b/src/config/lua/types/LuaConfigBool.hpp @@ -14,6 +14,7 @@ namespace Config::Lua { virtual std::string toString(); virtual void push(lua_State* s); virtual void reset(); + virtual Config::INTEGER asInt(); const Config::BOOL& parsed(); diff --git a/src/config/lua/types/LuaConfigFloat.cpp b/src/config/lua/types/LuaConfigFloat.cpp index 9d2574b6..be3fd749 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 e6602b5a..16263b7e 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/LuaConfigInt.cpp b/src/config/lua/types/LuaConfigInt.cpp index ef96a056..24220e87 100644 --- a/src/config/lua/types/LuaConfigInt.cpp +++ b/src/config/lua/types/LuaConfigInt.cpp @@ -79,6 +79,10 @@ void CLuaConfigInt::push(lua_State* s) { lua_pushinteger(s, m_data); } +Config::INTEGER CLuaConfigInt::asInt() { + return m_data; +} + const Config::INTEGER& CLuaConfigInt::parsed() { return m_data; } diff --git a/src/config/lua/types/LuaConfigInt.hpp b/src/config/lua/types/LuaConfigInt.hpp index 7ff2f39c..02322159 100644 --- a/src/config/lua/types/LuaConfigInt.hpp +++ b/src/config/lua/types/LuaConfigInt.hpp @@ -19,6 +19,7 @@ namespace Config::Lua { virtual std::string toString(); virtual void push(lua_State* s); virtual void reset(); + virtual Config::INTEGER asInt(); const Config::INTEGER& parsed(); diff --git a/src/config/lua/types/LuaConfigString.cpp b/src/config/lua/types/LuaConfigString.cpp index c16a587b..e35d5f1b 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 d976b6ab..c823e553 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/LuaConfigUtils.hpp b/src/config/lua/types/LuaConfigUtils.hpp index d61cf47a..44b3d189 100644 --- a/src/config/lua/types/LuaConfigUtils.hpp +++ b/src/config/lua/types/LuaConfigUtils.hpp @@ -6,4 +6,4 @@ namespace Config::Lua { UP fromGenericValue(SP v); -}; \ No newline at end of file +}; diff --git a/src/config/lua/types/LuaConfigValue.cpp b/src/config/lua/types/LuaConfigValue.cpp index 38141baa..8d3027cd 100644 --- a/src/config/lua/types/LuaConfigValue.cpp +++ b/src/config/lua/types/LuaConfigValue.cpp @@ -1,5 +1,7 @@ #include "LuaConfigValue.hpp" +#include "../../../macros.hpp" + using namespace Config; using namespace Config::Lua; @@ -18,3 +20,23 @@ void ILuaConfigValue::setRefreshBits(Supplementary::PropRefreshBits bits) { Supplementary::PropRefreshBits ILuaConfigValue::refreshBits() const { return m_refreshBits; } + +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 2cce98e3..93e8b755 100644 --- a/src/config/lua/types/LuaConfigValue.hpp +++ b/src/config/lua/types/LuaConfigValue.hpp @@ -41,6 +41,10 @@ namespace Config::Lua { virtual void push(lua_State* s) = 0; 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 5e92de62..cfda0c1b 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 c6560121..80a8ce73 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(); -- cgit v1.2.3