XPlor/libs/xassets/xanimparts.cpp

141 lines
3.0 KiB
C++
Raw Normal View History

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);
SetName("XAnimParts");
}
XAnimParts::~XAnimParts()
{
2025-08-17 13:14:17 -04:00
}
void XAnimParts::ParseData(QDataStream *aStream) {
if (GetPtr() == -1) {
2025-09-05 18:35:17 -04:00
mName.ParsePtr(aStream, false);
// Parse all fields
*aStream
>> mDataByteCount
>> mDataShortCount
>> mDataIntCount
>> mRandomDataByteCount
>> mRandomDataIntCount
>> mNumFrames;
2025-08-17 13:14:17 -04:00
quint8 loopDelta;
2025-09-05 18:35:17 -04:00
*aStream >> loopDelta;
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++)
{
*aStream >> mBoneCount[i];
}
2025-08-17 13:14:17 -04:00
2025-09-05 18:35:17 -04:00
*aStream
>> mNotifyCount
>> mAssetType;
2025-08-17 13:14:17 -04:00
2025-09-05 18:35:17 -04:00
quint16 pad;
*aStream >> pad;
mPad = (pad != 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;
*aStream
>> mRandomDataShortCount
>> mIndexCount
>> mFramerate
>> mFrequency
>> namesPtr
>> mNames
>> dataBytePtr
>> mDataByte
>> dataShortPtr
>> mDataShort
>> dataIntPtr
>> mDataInt
>> randomDataShortPtr
>> mRandomDataShort
>> randomDataBytePtr
>> mRandomDataByte
>> randomDataIntPtr
>> mRandomDataInt;
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-08-17 13:14:17 -04:00
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)
{
*aStream >> mDataByte;
}
if (dataShortPtr)
{
*aStream >> mDataShort;
}
if (dataIntPtr)
{
*aStream >> mDataInt;
}
if (randomDataShortPtr)
{
*aStream >> mDataInt;
}
if (randomDataBytePtr)
{
*aStream >> mRandomDataByte;
}
if (randomDataIntPtr)
{
*aStream >> mRandomDataInt;
}
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
}