diff --git a/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp b/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp index 4fa3b446..bbabd757 100644 --- a/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp +++ b/src/ObjLoading/AssetLoading/AssetLoadingManager.cpp @@ -86,6 +86,11 @@ XAssetInfoGeneric* AssetLoadingManager::LoadAssetDependency(const asset_type_t a return nullptr; } + // 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]); + 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; m_last_dependency_loaded = nullptr; diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp index 61a084ed..3ab13566 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneWriteTemplate.cpp @@ -128,6 +128,7 @@ class ZoneWriteTemplate::Internal final : BaseTemplate { LINE("varScriptString = " << MakeMemberAccess(info, member, modifier) << ";") LINE("WriteScriptStringArray(true, " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");") + LINE("m_stream->MarkFollowing("<MarkFollowing("<second; + + std::ostringstream str; + str << "Unable to find script string \"" << value << "\""; + throw std::runtime_error(str.str()); +} + size_t ZoneScriptStrings::Count() const { return m_scr_strings.size(); diff --git a/src/ZoneCommon/Zone/ZoneScriptStrings.h b/src/ZoneCommon/Zone/ZoneScriptStrings.h index 6d75b1e6..ebe10776 100644 --- a/src/ZoneCommon/Zone/ZoneScriptStrings.h +++ b/src/ZoneCommon/Zone/ZoneScriptStrings.h @@ -15,6 +15,7 @@ class ZoneScriptStrings public: scr_string_t AddScriptString(const std::string& value); + scr_string_t GetScriptString(const std::string& value) const; _NODISCARD size_t Count() const; _NODISCARD bool Empty() const; diff --git a/src/ZoneWriting/Writing/AssetWriter.cpp b/src/ZoneWriting/Writing/AssetWriter.cpp index 6f18dbcc..9999d5d5 100644 --- a/src/ZoneWriting/Writing/AssetWriter.cpp +++ b/src/ZoneWriting/Writing/AssetWriter.cpp @@ -1,8 +1,6 @@ #include "AssetWriter.h" #include -#include -#include AssetWriter::AssetWriter(XAssetInfoGeneric* asset, Zone* zone, IZoneOutputStream* stream) : ContentWriterBase(zone, stream), @@ -19,15 +17,7 @@ scr_string_t AssetWriter::UseScriptString(const scr_string_t scrString) const return scrString; const auto strValue = m_asset->m_zone->m_script_strings[scrString]; - const auto scrStringEntry = std::find(m_zone->m_script_strings.begin(), m_zone->m_script_strings.end(), strValue); - assert(scrStringEntry != m_zone->m_script_strings.end()); - - if (scrStringEntry != m_zone->m_script_strings.end()) - { - return static_cast(std::distance(scrStringEntry, m_zone->m_script_strings.begin())); - } - - return 0; + return m_zone->m_script_strings.GetScriptString(strValue); } void AssetWriter::WriteScriptStringArray(const bool atStreamStart, const size_t count)