Mark scriptstrings as used even when referencing them via zone pointer

This commit is contained in:
Jan 2022-12-03 12:44:33 +01:00
parent bb613e4fcf
commit 61a42afe28
3 changed files with 20 additions and 2 deletions

View File

@ -649,6 +649,11 @@ class ZoneLoadTemplate::Internal final : BaseTemplate
LINE(MakeMemberAccess(info, member, modifier)<< " = m_stream->ConvertOffsetToPointer("<<MakeMemberAccess(info, member, modifier)<<");")
if (member->m_is_script_string && loadType == MemberLoadType::ARRAY_POINTER)
{
LINE("MarkScriptStringArrayAsUsed(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");")
}
m_intendation--;
LINE("}")
}

View File

@ -50,12 +50,24 @@ void AssetLoader::LoadScriptStringArray(const bool atStreamStart, const size_t c
}
}
void AssetLoader::MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, const size_t count)
{
for (size_t index = 0; index < count; index++)
{
const auto scrString = scrStringArray[index];
if (scrString >= m_zone->m_script_strings.Count())
continue;
m_used_script_strings.emplace(scrString);
}
}
XAssetInfoGeneric* AssetLoader::LinkAsset(std::string name, void* asset)
{
std::vector<scr_string_t> usedScriptStrings;
if(!m_used_script_strings.empty())
if (!m_used_script_strings.empty())
{
for(auto scrString : m_used_script_strings)
for (auto scrString : m_used_script_strings)
{
usedScriptStrings.push_back(scrString);
}

View File

@ -23,6 +23,7 @@ protected:
scr_string_t UseScriptString(scr_string_t scrString);
void LoadScriptStringArray(bool atStreamStart, size_t count);
void MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, size_t count);
XAssetInfoGeneric* LinkAsset(std::string name, void* asset);