From 5ee5056c5d2fe8ff35e27c2084302b12ad8cbad0 Mon Sep 17 00:00:00 2001 From: Jan Date: Sun, 24 Sep 2023 14:18:15 +0200 Subject: [PATCH] Fix considering string static value to not be true for visible expressions --- .../Game/IW4/Menu/MenuConverterIW4.cpp | 2 +- .../Game/IW5/Menu/MenuConverterIW5.cpp | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp index 1d79e5fb..24f90347 100644 --- a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp +++ b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp @@ -502,7 +502,7 @@ namespace IW4 { const auto* staticValue = dynamic_cast(expression); isStatic = staticValue != nullptr; - isTruthy = isStatic && staticValue->IsTruthy(); + isTruthy = isStatic && (staticValue->m_type == SimpleExpressionValue::Type::INT || staticValue->m_type == SimpleExpressionValue::Type::DOUBLE) && staticValue->IsTruthy(); } else { diff --git a/src/ObjLoading/Game/IW5/Menu/MenuConverterIW5.cpp b/src/ObjLoading/Game/IW5/Menu/MenuConverterIW5.cpp index 503373b9..1cde69a0 100644 --- a/src/ObjLoading/Game/IW5/Menu/MenuConverterIW5.cpp +++ b/src/ObjLoading/Game/IW5/Menu/MenuConverterIW5.cpp @@ -393,9 +393,9 @@ namespace IW5 return nullptr; auto* statement = m_memory->Create(); - for(auto& result : statement->persistentState.lastResult) + for (auto& result : statement->persistentState.lastResult) result = Operand{}; - for(auto& lastExecutionTime : statement->persistentState.lastExecuteTime) + for (auto& lastExecutionTime : statement->persistentState.lastExecuteTime) lastExecutionTime = 0; statement->supportingData = nullptr; // Supporting data is set upon using it @@ -504,7 +504,7 @@ namespace IW5 { const auto* staticValue = dynamic_cast(expression); isStatic = staticValue != nullptr; - isTruthy = isStatic && staticValue->IsTruthy(); + isTruthy = isStatic && (staticValue->m_type == SimpleExpressionValue::Type::INT || staticValue->m_type == SimpleExpressionValue::Type::DOUBLE) && staticValue->IsTruthy(); } else { @@ -580,13 +580,13 @@ namespace IW5 if (!condition || !condition->m_condition) return; - if(!m_disable_optimizations && condition->m_condition->IsStatic()) + if (!m_disable_optimizations && condition->m_condition->IsStatic()) { const auto staticValueIsTruthy = condition->m_condition->EvaluateStatic().IsTruthy(); - if(staticValueIsTruthy) + if (staticValueIsTruthy) ConvertEventHandlerElements(elements, condition->m_condition_elements.get(), menu, item); - else if(condition->m_else_elements) + else if (condition->m_else_elements) ConvertEventHandlerElements(elements, condition->m_else_elements.get(), menu, item); } else @@ -663,7 +663,8 @@ namespace IW5 return outputSet; } - _NODISCARD ItemKeyHandler* ConvertKeyHandler(const std::multimap>& keyHandlers, const CommonMenuDef* menu, const CommonItemDef* item = nullptr) const + _NODISCARD ItemKeyHandler* ConvertKeyHandler(const std::multimap>& keyHandlers, const CommonMenuDef* menu, + const CommonItemDef* item = nullptr) const { if (keyHandlers.empty()) return nullptr; @@ -734,7 +735,7 @@ namespace IW5 item->window.dynamicFlags[0] |= dynamicFlagsToSet; auto* staticValuePtr = staticValue; - for(auto i = 0u; i < staticValueArraySize; i++) + for (auto i = 0u; i < staticValueArraySize; i++) { *staticValuePtr = static_cast(evaluatedValue.m_int_value); staticValuePtr++; @@ -1022,7 +1023,7 @@ namespace IW5 case CommonItemFeatureType::NONE: default: - if(item->type == ITEM_TYPE_TEXT_SCROLL) + if (item->type == ITEM_TYPE_TEXT_SCROLL) { item->typeData.scroll = static_cast(m_memory->Alloc(sizeof(textScrollDef_s))); memset(item->typeData.scroll, 0, sizeof(textScrollDef_s));