mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-05-10 06:24:57 +00:00
ZoneCodeGenerator: Add support for scriptstring array pointers
This commit is contained in:
parent
1606f62ee7
commit
b8bd20f693
@ -17,40 +17,48 @@ m_stream->Load<$TypeDeclaration(member.Member.VariableType)$$PrintFollowingRefer
|
|||||||
$endif$
|
$endif$
|
||||||
%>
|
%>
|
||||||
|
|
||||||
|
LoadArrayPointer_ScriptString(context, structure, member, reference) ::= <%
|
||||||
|
$TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$ = m_stream->Alloc<$TypeDeclaration(member.Member.VariableType)$$PrintFollowingReferences(reference.FollowingReferences)$>(alignof($TypeDeclaration(member.Member.VariableType)$$PrintFollowingReferences(reference.FollowingReferences)$));$\n$
|
||||||
|
|
||||||
|
varScriptString = $TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$;$\n$
|
||||||
|
LoadScriptStringArray(true, $PrintEvaluation(reference.ArrayPointerCountEvaluation)$);
|
||||||
|
|
||||||
|
%>
|
||||||
|
|
||||||
|
LoadArrayPointer_TypeCheck(context, structure, member, reference) ::= <%
|
||||||
|
$if(member.IsScriptString)$
|
||||||
|
$LoadArrayPointer_ScriptString(context, structure, member, reference)$
|
||||||
|
$else$
|
||||||
|
$LoadArrayPointer_Loading(context, structure, member, reference)$
|
||||||
|
$endif$
|
||||||
|
%>
|
||||||
|
|
||||||
LoadArrayPointer_PointerCheck(context, structure, member, reference) ::= <<
|
LoadArrayPointer_PointerCheck(context, structure, member, reference) ::= <<
|
||||||
if ($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$)
|
if ($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$)
|
||||||
{
|
{
|
||||||
$if(member.IsReusable)$
|
$if(member.IsReusable)$
|
||||||
if($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$ == PTR_FOLLOWING)
|
if($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$ == PTR_FOLLOWING)
|
||||||
{
|
{
|
||||||
$LoadArrayPointer_Loading(context, structure, member, reference)$
|
$LoadArrayPointer_TypeCheck(context, structure, member, reference)$
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$ = m_stream->ConvertOffsetToPointer($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$);
|
$TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$ = m_stream->ConvertOffsetToPointer($TypeVarName(structure)$->$member.Member.Name$$PrintArrayIndices(reference)$);
|
||||||
}
|
}
|
||||||
$else$
|
$else$
|
||||||
$LoadArrayPointer_Loading(context, structure, member, reference)$
|
$LoadArrayPointer_TypeCheck(context, structure, member, reference)$
|
||||||
$endif$
|
$endif$
|
||||||
}
|
}
|
||||||
>>
|
>>
|
||||||
|
|
||||||
LoadArrayPointer_TypeCheck(context, structure, member, reference) ::= <%
|
|
||||||
$if(member.IsScriptString)$
|
|
||||||
// ScriptString $member.Member.Name$
|
|
||||||
$else$
|
|
||||||
$LoadArrayPointer_PointerCheck(context, structure, member, reference)$
|
|
||||||
$endif$
|
|
||||||
%>
|
|
||||||
|
|
||||||
LoadArrayPointer_Condition(context, structure, member, reference) ::= <<
|
LoadArrayPointer_Condition(context, structure, member, reference) ::= <<
|
||||||
$if(member.Condition)$$\\$
|
$if(member.Condition)$$\\$
|
||||||
if($PrintEvaluation(member.Condition)$)
|
if($PrintEvaluation(member.Condition)$)
|
||||||
{
|
{
|
||||||
$LoadArrayPointer_TypeCheck(context, structure, member, reference)$
|
$LoadArrayPointer_PointerCheck(context, structure, member, reference)$
|
||||||
}
|
}
|
||||||
$else$$\\$
|
$else$$\\$
|
||||||
$LoadArrayPointer_TypeCheck(context, structure, member, reference)$$\\$
|
$LoadArrayPointer_PointerCheck(context, structure, member, reference)$$\\$
|
||||||
$endif$
|
$endif$
|
||||||
>>
|
>>
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "AssetLoader.h"
|
#include "AssetLoader.h"
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
AssetLoader::AssetLoader(const asset_type_t assetType, IZoneScriptStringProvider* scriptStringProvider, Zone* zone, IZoneInputStream* stream)
|
AssetLoader::AssetLoader(const asset_type_t assetType, IZoneScriptStringProvider* scriptStringProvider, Zone* zone, IZoneInputStream* stream)
|
||||||
{
|
{
|
||||||
@ -47,6 +48,20 @@ scr_string_t AssetLoader::UseScriptString(const scr_string_t scrString)
|
|||||||
return scriptStringIndex;
|
return scriptStringIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AssetLoader::LoadScriptStringArray(const bool atStreamStart, const size_t count)
|
||||||
|
{
|
||||||
|
assert(varScriptString != nullptr);
|
||||||
|
|
||||||
|
if (atStreamStart)
|
||||||
|
m_stream->Load<scr_string_t>(varScriptString, count);
|
||||||
|
|
||||||
|
for (size_t index = 0; index < count; index++)
|
||||||
|
{
|
||||||
|
*varScriptString = UseScriptString(*varScriptString);
|
||||||
|
varScriptString++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void* AssetLoader::LinkAsset(std::string name, void* asset)
|
void* AssetLoader::LinkAsset(std::string name, void* asset)
|
||||||
{
|
{
|
||||||
return m_zone->GetPools()->AddAsset(m_asset_type, std::move(name), asset, m_used_script_strings, m_dependencies);
|
return m_zone->GetPools()->AddAsset(m_asset_type, std::move(name), asset, m_used_script_strings, m_dependencies);
|
||||||
|
@ -14,10 +14,14 @@ class AssetLoader : public ContentLoader
|
|||||||
protected:
|
protected:
|
||||||
IZoneScriptStringProvider* m_script_string_provider;
|
IZoneScriptStringProvider* m_script_string_provider;
|
||||||
|
|
||||||
|
scr_string_t* varScriptString;
|
||||||
|
|
||||||
AssetLoader(asset_type_t assetType, IZoneScriptStringProvider* scriptStringProvider, Zone* zone, IZoneInputStream* stream);
|
AssetLoader(asset_type_t assetType, IZoneScriptStringProvider* scriptStringProvider, Zone* zone, IZoneInputStream* stream);
|
||||||
|
|
||||||
void AddDependency(asset_type_t type, std::string& name);
|
void AddDependency(asset_type_t type, std::string& name);
|
||||||
|
|
||||||
scr_string_t UseScriptString(scr_string_t scrString);
|
scr_string_t UseScriptString(scr_string_t scrString);
|
||||||
|
void LoadScriptStringArray(bool atStreamStart, size_t count);
|
||||||
|
|
||||||
void* LinkAsset(std::string name, void* asset);
|
void* LinkAsset(std::string name, void* asset);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user