metaforce/DataSpec/DNAMP3/CHAR.cpp

184 lines
4.9 KiB
C++
Raw Normal View History

2015-09-25 20:12:08 -07:00
#include "CHAR.hpp"
2017-12-29 00:08:12 -08:00
namespace DataSpec::DNAMP3
2015-09-25 20:12:08 -07:00
{
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::EVNT::SFXEvent::Enumerate<BigDNA::Read>(athena::io::IStreamReader& reader)
2015-09-25 20:12:08 -07:00
{
EventBase::read(reader);
caudId.read(reader);
unk1 = reader.readUint32Big();
unk2 = reader.readUint32Big();
unk3 = reader.readUint32Big();
2015-09-26 20:48:53 -07:00
reader.enumerateBig(unk3Vals, unk3);
2015-09-25 20:12:08 -07:00
extraType = reader.readUint32Big();
if (extraType == 1)
extraFloat = reader.readFloatBig();
else if (extraType == 2)
2016-03-04 15:04:53 -08:00
reader.seek(35, athena::Current);
2015-09-25 20:12:08 -07:00
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::EVNT::SFXEvent::Enumerate<BigDNA::Write>(athena::io::IStreamWriter& writer)
2015-09-25 20:12:08 -07:00
{
EventBase::write(writer);
caudId.write(writer);
writer.writeUint32Big(unk1);
writer.writeUint32Big(unk2);
writer.writeUint32Big(unk3);
2015-09-26 20:48:53 -07:00
writer.enumerateBig(unk3Vals);
2015-09-25 20:12:08 -07:00
writer.writeUint32Big(extraType);
if (extraType == 1)
writer.writeFloatBig(extraFloat);
else if (extraType == 2)
2016-03-04 15:04:53 -08:00
writer.seek(35, athena::Current);
2015-09-25 20:12:08 -07:00
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::EVNT::SFXEvent::Enumerate<BigDNA::BinarySize>(size_t& __isz)
{
2018-02-21 23:24:51 -08:00
EventBase::binarySize(__isz);
caudId.binarySize(__isz);
__isz += 16;
__isz += unk3Vals.size() * 4;
if (extraType == 1)
__isz += 4;
else if (extraType == 2)
__isz += 35;
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::EVNT::SFXEvent::Enumerate<BigDNA::ReadYaml>(athena::io::YAMLDocReader& reader)
2015-09-25 20:12:08 -07:00
{
2016-01-03 21:31:02 -08:00
EventBase::read(reader);
2015-09-25 20:12:08 -07:00
reader.enumerate("caudId", caudId);
unk1 = reader.readUint32("unk1");
unk2 = reader.readUint32("unk2");
2016-03-04 15:04:53 -08:00
unk3 = reader.enumerate("unk3Vals", unk3Vals);
2015-09-25 20:12:08 -07:00
extraType = reader.readUint32("extraType");
if (extraType == 1)
extraFloat = reader.readFloat("extraFloat");
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::EVNT::SFXEvent::Enumerate<BigDNA::WriteYaml>(athena::io::YAMLDocWriter& writer)
2015-09-25 20:12:08 -07:00
{
2016-01-03 21:31:02 -08:00
EventBase::write(writer);
2015-09-25 20:12:08 -07:00
writer.enumerate("caudId", caudId);
writer.writeUint32("unk1", unk1);
writer.writeUint32("unk2", unk2);
2015-09-26 20:48:53 -07:00
writer.enumerate("unk3Vals", unk3Vals);
2015-09-25 20:12:08 -07:00
writer.writeUint32("extraType", extraType);
if (extraType == 1)
writer.writeFloat("extraFloat", extraFloat);
}
2015-09-30 17:40:21 -07:00
const char* CHAR::AnimationInfo::EVNT::SFXEvent::DNAType()
{
2016-03-04 15:04:53 -08:00
return "urde::DNAMP3::CHAR::AnimationInfo::EVNT::SFXEvent";
2015-09-30 17:40:21 -07:00
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::MetaAnimFactory::Enumerate<BigDNA::Read>(athena::io::IStreamReader& reader)
2015-09-25 20:12:08 -07:00
{
IMetaAnim::Type type(IMetaAnim::Type(reader.readUint32Big()));
switch (type)
{
2015-11-20 17:16:07 -08:00
case IMetaAnim::Type::Primitive:
2015-09-25 20:12:08 -07:00
m_anim.reset(new struct MetaAnimPrimitive);
m_anim->read(reader);
break;
2015-11-20 17:16:07 -08:00
case IMetaAnim::Type::Blend:
2015-09-25 20:12:08 -07:00
m_anim.reset(new struct MetaAnimBlend);
m_anim->read(reader);
break;
2015-11-20 17:16:07 -08:00
case IMetaAnim::Type::PhaseBlend:
2015-09-25 20:12:08 -07:00
m_anim.reset(new struct MetaAnimPhaseBlend);
m_anim->read(reader);
break;
2015-11-20 17:16:07 -08:00
case IMetaAnim::Type::Random:
2015-09-25 20:12:08 -07:00
m_anim.reset(new struct MetaAnimRandom);
m_anim->read(reader);
break;
2015-11-20 17:16:07 -08:00
case IMetaAnim::Type::Sequence:
2015-09-25 20:12:08 -07:00
m_anim.reset(new struct MetaAnimSequence);
m_anim->read(reader);
break;
default:
m_anim.reset(nullptr);
break;
}
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::MetaAnimFactory::Enumerate<BigDNA::Write>(athena::io::IStreamWriter& writer)
2015-09-25 20:12:08 -07:00
{
if (!m_anim)
return;
2015-11-20 17:16:07 -08:00
writer.writeInt32Big(atInt32(m_anim->m_type));
2015-09-25 20:12:08 -07:00
m_anim->write(writer);
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::MetaAnimFactory::Enumerate<BigDNA::BinarySize>(size_t& __isz)
{
if (!m_anim)
2018-02-21 23:24:51 -08:00
return;
__isz += 4;
m_anim->binarySize(__isz);
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::MetaAnimFactory::Enumerate<BigDNA::ReadYaml>(athena::io::YAMLDocReader& reader)
2015-09-25 20:12:08 -07:00
{
std::string type = reader.readString("type");
std::transform(type.begin(), type.end(), type.begin(), tolower);
if (!type.compare("primitive"))
{
m_anim.reset(new struct MetaAnimPrimitive);
2016-01-03 21:31:02 -08:00
m_anim->read(reader);
2015-09-25 20:12:08 -07:00
}
else if (!type.compare("blend"))
{
m_anim.reset(new struct MetaAnimBlend);
2016-01-03 21:31:02 -08:00
m_anim->read(reader);
2015-09-25 20:12:08 -07:00
}
else if (!type.compare("phaseblend"))
{
m_anim.reset(new struct MetaAnimPhaseBlend);
2016-01-03 21:31:02 -08:00
m_anim->read(reader);
2015-09-25 20:12:08 -07:00
}
else if (!type.compare("random"))
{
m_anim.reset(new struct MetaAnimRandom);
2016-01-03 21:31:02 -08:00
m_anim->read(reader);
2015-09-25 20:12:08 -07:00
}
else if (!type.compare("sequence"))
{
m_anim.reset(new struct MetaAnimSequence);
2016-01-03 21:31:02 -08:00
m_anim->read(reader);
2015-09-25 20:12:08 -07:00
}
else
{
m_anim.reset(nullptr);
}
}
2018-02-21 23:24:51 -08:00
template <>
void CHAR::AnimationInfo::MetaAnimFactory::Enumerate<BigDNA::WriteYaml>(athena::io::YAMLDocWriter& writer)
2015-09-25 20:12:08 -07:00
{
if (!m_anim)
return;
writer.writeString("type", m_anim->m_typeStr);
2016-01-03 21:31:02 -08:00
m_anim->write(writer);
2015-09-25 20:12:08 -07:00
}
2015-09-30 17:40:21 -07:00
const char* CHAR::AnimationInfo::MetaAnimFactory::DNAType()
{
2016-03-04 15:04:53 -08:00
return "urde::DNAMP3::CHAR::AnimationInfo::MetaAnimFactory";
2015-09-30 17:40:21 -07:00
}
2015-09-25 20:12:08 -07:00
}