From 5fbcbaf3c713f40dddf73c0157847bf01583b388 Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 23 Mar 2021 00:42:41 +0100 Subject: [PATCH] Fix not straight up inserting scriptstrings on loading from zone --- src/ObjLoading/AssetLoading/AssetLoadingManager.cpp | 2 +- src/ZoneCommon/Zone/ZoneScriptStrings.cpp | 11 +++++++++-- src/ZoneCommon/Zone/ZoneScriptStrings.h | 5 +++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp b/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp index bbabd757..71b139d3 100644 --- a/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp +++ b/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp @@ -89,7 +89,7 @@ XAssetInfoGeneric* AssetLoadingManager::LoadAssetDependency(const asset_type_t a // Make sure any used script string is available in the created zone // The replacement of the scr_string_t values will be done upon writing for(auto scrString : existingAsset->m_used_script_strings) - m_context.m_zone->m_script_strings.AddScriptString(existingAsset->m_zone->m_script_strings[scrString]); + m_context.m_zone->m_script_strings.AddOrGetScriptString(existingAsset->m_zone->m_script_strings[scrString]); AddAsset(existingAsset->m_type, existingAsset->m_name, existingAsset->m_ptr, std::move(dependencies), existingAsset->m_used_script_strings, existingAsset->m_zone); auto* lastDependency = m_last_dependency_loaded; diff --git a/src/ZoneCommon/Zone/ZoneScriptStrings.cpp b/src/ZoneCommon/Zone/ZoneScriptStrings.cpp index 059b33e4..fc8cd6ed 100644 --- a/src/ZoneCommon/Zone/ZoneScriptStrings.cpp +++ b/src/ZoneCommon/Zone/ZoneScriptStrings.cpp @@ -3,9 +3,16 @@ #include #include -scr_string_t ZoneScriptStrings::AddScriptString(const std::string& value) +void ZoneScriptStrings::AddScriptString(const std::string& value) { - if(m_scr_strings.empty()) + const auto newScrStringIndex = static_cast(m_scr_strings.size()); + m_scr_strings.emplace_back(value); + m_scr_string_lookup[value] = newScrStringIndex; +} + +scr_string_t ZoneScriptStrings::AddOrGetScriptString(const std::string& value) +{ + if (m_scr_strings.empty()) { m_scr_strings.emplace_back(""); m_scr_string_lookup[""] = static_cast(0); diff --git a/src/ZoneCommon/Zone/ZoneScriptStrings.h b/src/ZoneCommon/Zone/ZoneScriptStrings.h index ebe10776..088bcd09 100644 --- a/src/ZoneCommon/Zone/ZoneScriptStrings.h +++ b/src/ZoneCommon/Zone/ZoneScriptStrings.h @@ -14,8 +14,9 @@ class ZoneScriptStrings std::unordered_map m_scr_string_lookup; public: - scr_string_t AddScriptString(const std::string& value); - scr_string_t GetScriptString(const std::string& value) const; + void AddScriptString(const std::string& value); + scr_string_t AddOrGetScriptString(const std::string& value); + _NODISCARD scr_string_t GetScriptString(const std::string& value) const; _NODISCARD size_t Count() const; _NODISCARD bool Empty() const;