config/lua: fix device typed reads

This commit is contained in:
imperishableSecret 2026-05-06 23:29:15 +05:30
parent 6bae1443a9
commit be2d5f3446
No known key found for this signature in database
GPG key ID: 85A6E15075A73AD6
10 changed files with 52 additions and 10 deletions

View file

@ -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<const Config::FLOAT*>(v->data());
return v->asFloat();
if (!fallback.empty() && m_configValues.contains(fallback))
return *sc<const Config::FLOAT*>(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<const Config::VEC2*>(v->data()));
return toVec(v->asVec2());
if (!fallback.empty() && m_configValues.contains(fallback))
return toVec(*sc<const Config::VEC2*>(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<const Config::STRING*>(v->data()));
return clean(v->asString());
if (!fallback.empty() && m_configValues.contains(fallback))
return clean(*sc<const Config::STRING*>(m_configValues.at(fallback)->data()));
return clean(m_configValues.at(fallback)->asString());
return "";
}

View file

@ -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;
}

View file

@ -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();

View file

@ -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;
}

View file

@ -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();

View file

@ -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 {};
}

View file

@ -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);

View file

@ -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;
}

View file

@ -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();

View file

@ -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");
}