2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 13:47:43 +00:00

Added binarySize method to DNA implementations

This commit is contained in:
Jack Andersen
2015-10-17 18:08:45 -10:00
parent 6bd5c42a9e
commit 9529fad78f
21 changed files with 668 additions and 15 deletions

View File

@@ -59,6 +59,24 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::write(
}
}
size_t ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::binarySize(size_t __isz) const
{
__isz += 12;
switch (DataType(parmType))
{
case DataType::DTInt32:
case DataType::DTUInt32:
case DataType::DTEnum:
case DataType::DTFloat:
__isz += 8;
break;
case DataType::DTBool:
__isz += 2;
break;
}
return __isz;
}
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::ParmInfo::fromYAML(Athena::io::YAMLDocReader& reader)
{
parmType = reader.readUint32("parmType");
@@ -200,6 +218,32 @@ void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::write(Athena::io
}
}
size_t ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::binarySize(size_t __isz) const
{
__isz += 12;
__isz = __EnumerateSize(__isz, parmInfos);
__isz += animInfos.size() * 4;
for (const ParmInfo& pi : parmInfos)
{
switch (ParmInfo::DataType(pi.parmType))
{
case ParmInfo::DTInt32:
case ParmInfo::DTUInt32:
case ParmInfo::DTEnum:
case ParmInfo::DTFloat:
__isz += animInfos.size() * 4;
break;
case ParmInfo::DTBool:
__isz += animInfos.size();
break;
default: break;
}
}
return __isz;
}
void ANCS::CharacterSet::CharacterInfo::PASDatabase::AnimState::fromYAML(Athena::io::YAMLDocReader& reader)
{
id = reader.readUint32("id");
@@ -416,6 +460,70 @@ void ANCS::CharacterSet::CharacterInfo::write(Athena::io::IStreamWriter& writer)
}
}
size_t ANCS::CharacterSet::CharacterInfo::binarySize(size_t __isz) const
{
__isz += 6;
atUint16 sectionCount;
if (partResData.elsc.size())
sectionCount = 6;
else if (animIdxs.size())
sectionCount = 5;
else if (cmdlOverlay)
sectionCount = 4;
else if (effects.size())
sectionCount = 3;
else if (animAABBs.size())
sectionCount = 2;
else
sectionCount = 1;
__isz += name.size() + 1;
__isz += 12;
__isz += 4;
__isz = __EnumerateSize(__isz, animations);
__isz = pasDatabase.binarySize(__isz);
__isz += 4;
__isz = __EnumerateSize(__isz, partResData.part);
__isz += 4;
__isz = __EnumerateSize(__isz, partResData.swhc);
__isz += 4;
__isz = __EnumerateSize(__isz, partResData.unk);
if (sectionCount > 5)
{
__isz += 4;
__isz = __EnumerateSize(__isz, partResData.elsc);
}
__isz += 4;
if (sectionCount > 1)
{
__isz += 4;
__isz = __EnumerateSize(__isz, animAABBs);
}
if (sectionCount > 2)
{
__isz += 4;
__isz = __EnumerateSize(__isz, effects);
}
if (sectionCount > 3)
__isz += 8;
if (sectionCount > 4)
__isz += 4 + animIdxs.size() * 4;
return __isz;
}
void ANCS::CharacterSet::CharacterInfo::fromYAML(Athena::io::YAMLDocReader& reader)
{
idx = reader.readUint32("idx");
@@ -591,6 +699,13 @@ void ANCS::AnimationSet::MetaAnimFactory::write(Athena::io::IStreamWriter& write
m_anim->write(writer);
}
size_t ANCS::AnimationSet::MetaAnimFactory::binarySize(size_t __isz) const
{
if (!m_anim)
return __isz;
return m_anim->binarySize(__isz + 4);
}
void ANCS::AnimationSet::MetaAnimFactory::fromYAML(Athena::io::YAMLDocReader& reader)
{
std::string type = reader.readString("type");
@@ -675,6 +790,13 @@ void ANCS::AnimationSet::MetaTransFactory::write(Athena::io::IStreamWriter& writ
m_trans->write(writer);
}
size_t ANCS::AnimationSet::MetaTransFactory::binarySize(size_t __isz) const
{
if (!m_trans)
return __isz + 4;
return m_trans->binarySize(__isz + 4);
}
void ANCS::AnimationSet::MetaTransFactory::fromYAML(Athena::io::YAMLDocReader& reader)
{
std::string type = reader.readString("type");
@@ -794,6 +916,47 @@ void ANCS::AnimationSet::write(Athena::io::IStreamWriter& writer) const
}
}
size_t ANCS::AnimationSet::binarySize(size_t __isz) const
{
atUint16 sectionCount;
if (animResources.size())
sectionCount = 4;
else if (halfTransitions.size())
sectionCount = 3;
else if (additiveAnims.size())
sectionCount = 2;
else
sectionCount = 1;
__isz += 6;
__isz = __EnumerateSize(__isz, animations);
__isz += 4;
__isz = __EnumerateSize(__isz, transitions);
__isz = defaultTransition.binarySize(__isz);
if (sectionCount > 1)
{
__isz += 4;
__isz = __EnumerateSize(__isz, additiveAnims);
__isz += 8;
}
if (sectionCount > 2)
{
__isz += 4;
__isz = __EnumerateSize(__isz, halfTransitions);
}
if (sectionCount > 3)
{
__isz += 4;
__isz = __EnumerateSize(__isz, animResources);
}
return __isz;
}
void ANCS::AnimationSet::fromYAML(Athena::io::YAMLDocReader& reader)
{
atUint16 sectionCount = reader.readUint16("sectionCount");