2025-08-17 13:14:17 -04:00
|
|
|
#include "xanimparts.h"
|
|
|
|
|
|
|
|
|
|
XAnimParts::XAnimParts()
|
2025-09-05 18:35:17 -04:00
|
|
|
: XAsset()
|
|
|
|
|
, mName()
|
|
|
|
|
, mDataByteCount(0)
|
|
|
|
|
, mDataShortCount(0)
|
|
|
|
|
, mDataIntCount(0)
|
|
|
|
|
, mRandomDataByteCount(0)
|
|
|
|
|
, mRandomDataIntCount(0)
|
|
|
|
|
, mNumFrames(0)
|
|
|
|
|
, mIsLoop(false)
|
|
|
|
|
, mIsDelta(false)
|
|
|
|
|
, mBoneCount(12)
|
|
|
|
|
, mNotifyCount(0)
|
|
|
|
|
, mAssetType(0)
|
|
|
|
|
, mPad(false)
|
|
|
|
|
, mRandomDataShortCount(0)
|
|
|
|
|
, mIndexCount(0)
|
|
|
|
|
, mFramerate(0.0f)
|
|
|
|
|
, mFrequency(0.0f)
|
|
|
|
|
, mNames(0)
|
|
|
|
|
, mDataByte(0)
|
|
|
|
|
, mDataShort(0)
|
|
|
|
|
, mDataInt(0)
|
|
|
|
|
, mRandomDataShort(0)
|
|
|
|
|
, mRandomDataByte(0)
|
|
|
|
|
, mRandomDataInt(0)
|
|
|
|
|
, mIndices()
|
|
|
|
|
, mNotify()
|
|
|
|
|
, mDeltaPart()
|
|
|
|
|
{
|
|
|
|
|
SetType(ASSET_TYPE_XANIMPARTS);
|
2025-09-10 21:55:59 -04:00
|
|
|
SetName("Animation Parts");
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
|
2025-09-10 21:55:59 -04:00
|
|
|
void XAnimParts::ParseData(XDataStream *aStream) {
|
2025-08-17 13:14:17 -04:00
|
|
|
if (GetPtr() == -1) {
|
|
|
|
|
|
2025-09-05 18:35:17 -04:00
|
|
|
mName.ParsePtr(aStream, false);
|
|
|
|
|
|
|
|
|
|
// Parse all fields
|
2025-09-10 21:55:59 -04:00
|
|
|
mDataByteCount = aStream->ParseUInt32(QString("%1 data byte count").arg(GetName()));
|
|
|
|
|
mDataShortCount = aStream->ParseUInt32(QString("%1 data short count").arg(GetName()));
|
|
|
|
|
mDataIntCount = aStream->ParseUInt32(QString("%1 data int count").arg(GetName()));
|
|
|
|
|
mRandomDataByteCount = aStream->ParseUInt32(QString("%1 random date byte count").arg(GetName()));
|
|
|
|
|
mRandomDataIntCount = aStream->ParseUInt32(QString("%1 random data int count").arg(GetName()));
|
|
|
|
|
mNumFrames = aStream->ParseUInt32(QString("%1 # frames").arg(GetName()));
|
|
|
|
|
|
|
|
|
|
quint8 loopDelta = aStream->ParseUInt8(QString("%1 loop delta").arg(GetName()));
|
2025-08-17 13:14:17 -04:00
|
|
|
mIsLoop = (loopDelta & 0x1) != 0;
|
|
|
|
|
mIsDelta = (loopDelta & 0x2) != 0;
|
|
|
|
|
|
2025-09-05 18:35:17 -04:00
|
|
|
for (int i = 0; i < 12; i++)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mBoneCount[i] = aStream->ParseUInt8(QString("%1 bone count %2").arg(GetName()).arg(i));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
2025-08-17 13:14:17 -04:00
|
|
|
|
2025-09-10 21:55:59 -04:00
|
|
|
mNotifyCount = aStream->ParseUInt8(QString("%1 notify count").arg(GetName()));
|
|
|
|
|
mAssetType = aStream->ParseUInt8(QString("%1 asset type").arg(GetName()));
|
|
|
|
|
mPad = aStream->ParseUInt32(QString("%1 pad").arg(GetName())) != 0;
|
2025-08-17 13:14:17 -04:00
|
|
|
|
2025-09-05 18:35:17 -04:00
|
|
|
qint32 namesPtr, dataBytePtr, dataShortPtr, dataIntPtr,
|
|
|
|
|
randomDataShortPtr, randomDataBytePtr, randomDataIntPtr;
|
|
|
|
|
|
2025-09-10 21:55:59 -04:00
|
|
|
mRandomDataShortCount = aStream->ParseUInt32(QString("%1 random data short count").arg(GetName()));
|
|
|
|
|
mIndexCount = aStream->ParseUInt32(QString("%1 index count").arg(GetName()));
|
|
|
|
|
mFramerate = aStream->ParseSingle(QString("%1 frame rate").arg(GetName()));
|
|
|
|
|
mFrequency = aStream->ParseSingle(QString("%1 frequency").arg(GetName()));
|
|
|
|
|
namesPtr = aStream->ParseInt32(QString("%1 names ptr").arg(GetName()));
|
|
|
|
|
dataBytePtr = aStream->ParseInt32(QString("%1 data byte ptr").arg(GetName()));
|
|
|
|
|
dataShortPtr = aStream->ParseInt32(QString("%1 data short ptr").arg(GetName()));
|
|
|
|
|
dataIntPtr = aStream->ParseInt32(QString("%1 data int ptr").arg(GetName()));
|
|
|
|
|
randomDataShortPtr = aStream->ParseInt32(QString("%1 random data short ptr").arg(GetName()));
|
|
|
|
|
randomDataBytePtr = aStream->ParseInt32(QString("%1 random data byte ptr").arg(GetName()));
|
|
|
|
|
randomDataIntPtr = aStream->ParseInt32(QString("%1 random data int ptr").arg(GetName()));
|
2025-08-17 13:14:17 -04:00
|
|
|
|
|
|
|
|
// Parse indices
|
|
|
|
|
mIndices.ParseData(aStream);
|
2025-09-05 18:35:17 -04:00
|
|
|
mNotify.ParsePtr(aStream, false);
|
|
|
|
|
mDeltaPart.ParsePtr(aStream, false);
|
2025-08-17 13:14:17 -04:00
|
|
|
|
2025-09-05 18:35:17 -04:00
|
|
|
mName.ParseData(aStream);
|
|
|
|
|
if (namesPtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mNames = aStream->ParseInt32(QString("%1 names").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
mNotify.ParseData(aStream);
|
2025-08-17 13:14:17 -04:00
|
|
|
mDeltaPart.ParseData(aStream);
|
2025-09-05 18:35:17 -04:00
|
|
|
if (dataBytePtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mDataByte = aStream->ParseUInt8(QString("%1 data byte").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
if (dataShortPtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mDataShort = aStream->ParseInt16(QString("%1 data short").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
if (dataIntPtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mDataInt = aStream->ParseInt32(QString("%1 data int").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
if (randomDataShortPtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mRandomDataShort = aStream->ParseInt16(QString("%1 random data short").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
if (randomDataBytePtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mRandomDataByte = aStream->ParseUInt8(QString("%1 random data byte").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
if (randomDataIntPtr)
|
|
|
|
|
{
|
2025-09-10 21:55:59 -04:00
|
|
|
mRandomDataInt = aStream->ParseInt32(QString("%1 random data int").arg(GetName()));
|
2025-09-05 18:35:17 -04:00
|
|
|
}
|
|
|
|
|
mIndices.ParseData(aStream);
|
2025-08-17 13:14:17 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-05 18:35:17 -04:00
|
|
|
void XAnimParts::Clear()
|
|
|
|
|
{
|
2025-08-17 13:14:17 -04:00
|
|
|
|
|
|
|
|
}
|