191 lines
4.6 KiB
C++
191 lines
4.6 KiB
C++
#ifndef ANIMPARTS_H
|
|
#define ANIMPARTS_H
|
|
|
|
#include <QString>
|
|
#include <QDataStream>
|
|
|
|
union XAnimDynamicFrames
|
|
{
|
|
quint8 (*_1)[3];
|
|
quint16 (*_2)[3];
|
|
};
|
|
|
|
union XAnimDynamicIndices
|
|
{
|
|
quint8 _1[1];
|
|
quint16 _2[1];
|
|
};
|
|
|
|
struct XAnimPartTransFrames
|
|
{
|
|
float mins[3];
|
|
float size[3];
|
|
XAnimDynamicFrames frames;
|
|
XAnimDynamicIndices indices;
|
|
};
|
|
|
|
union XAnimPartTransData
|
|
{
|
|
XAnimPartTransFrames frames;
|
|
float frame0[3];
|
|
};
|
|
|
|
struct XAnimPartTrans
|
|
{
|
|
quint16 size;
|
|
quint8 smallTrans;
|
|
XAnimPartTransData u;
|
|
};
|
|
|
|
struct XAnimDeltaPartQuatDataFrames
|
|
{
|
|
qint16 (*frames)[2];
|
|
XAnimDynamicIndices indices;
|
|
};
|
|
|
|
union XAnimDeltaPartQuatData
|
|
{
|
|
XAnimDeltaPartQuatDataFrames frames;
|
|
qint16 frame0[2];
|
|
};
|
|
|
|
struct XAnimDeltaPartQuat
|
|
{
|
|
quint16 size;
|
|
XAnimDeltaPartQuatData u;
|
|
};
|
|
|
|
struct XAnimDeltaPart
|
|
{
|
|
XAnimPartTrans *trans;
|
|
XAnimDeltaPartQuat *quat;
|
|
};
|
|
|
|
struct XAnimNotifyInfo
|
|
{
|
|
quint16 name;
|
|
float time;
|
|
};
|
|
|
|
struct XAnimIndices
|
|
{
|
|
quint8 *_1;
|
|
quint16 *_2;
|
|
void *data;
|
|
};
|
|
|
|
struct XAnimParts
|
|
{
|
|
qint32 namePtr;
|
|
QString name;
|
|
|
|
quint16 dataByteCount;
|
|
quint16 dataShortCount;
|
|
quint16 dataIntCount;
|
|
quint16 randomDataByteCount;
|
|
quint16 randomDataIntCount;
|
|
quint16 numframes;
|
|
|
|
bool bLoop;
|
|
bool bDelta;
|
|
|
|
quint8 boneCount[12];
|
|
quint8 notifyCount;
|
|
quint8 assetType;
|
|
|
|
bool pad;
|
|
|
|
unsigned int randomDataShortCount;
|
|
unsigned int indexCount;
|
|
|
|
float framerate;
|
|
float frequency;
|
|
|
|
quint16 *names;
|
|
quint8 *dataByte;
|
|
qint16 *dataShort;
|
|
int *dataInt;
|
|
qint16 *randomDataShort;
|
|
quint8 *randomDataByte;
|
|
int *randomDataInt;
|
|
|
|
XAnimIndices indices;
|
|
|
|
qint32 notifyPtr;
|
|
XAnimNotifyInfo notify;
|
|
|
|
qint32 deltaPartPtr;
|
|
XAnimDeltaPart deltaPart;
|
|
};
|
|
|
|
QDataStream& operator<<(QDataStream& out, const XAnimParts& in) {
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.namePtr), 4);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.dataByteCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.dataShortCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.dataIntCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.randomDataByteCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.randomDataIntCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.numframes), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.bLoop), 1);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.bDelta), 1);
|
|
|
|
for (int i = 0; i < 12; i++) {
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.boneCount[i]), 1);
|
|
}
|
|
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.notifyCount), 1);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.assetType), 1);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.pad), 1);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.randomDataShortCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.indexCount), 2);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.framerate), 4);
|
|
out.writeRawData(reinterpret_cast<const char*>(&in.frequency), 4);
|
|
|
|
return out;
|
|
}
|
|
|
|
QDataStream& operator>>(QDataStream& in, XAnimParts& out) {
|
|
in.readRawData(reinterpret_cast<char*>(&out.namePtr), 4);
|
|
in.readRawData(reinterpret_cast<char*>(&out.dataByteCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.dataShortCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.dataIntCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.randomDataByteCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.randomDataIntCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.numframes), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.bLoop), 1);
|
|
in.readRawData(reinterpret_cast<char*>(&out.bDelta), 1);
|
|
|
|
for (int i = 0; i < 12; i++) {
|
|
in.readRawData(reinterpret_cast<char*>(&out.boneCount[i]), 1);
|
|
}
|
|
|
|
in.readRawData(reinterpret_cast<char*>(&out.notifyCount), 1);
|
|
in.readRawData(reinterpret_cast<char*>(&out.assetType), 1);
|
|
in.readRawData(reinterpret_cast<char*>(&out.pad), 1);
|
|
in.readRawData(reinterpret_cast<char*>(&out.randomDataShortCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.indexCount), 2);
|
|
in.readRawData(reinterpret_cast<char*>(&out.framerate), 4);
|
|
in.readRawData(reinterpret_cast<char*>(&out.frequency), 4);
|
|
|
|
return in;
|
|
}
|
|
|
|
struct Animation {
|
|
QString name;
|
|
std::shared_ptr<XAnimParts> parts;
|
|
};
|
|
|
|
QDataStream& operator<<(QDataStream& out, const Animation& in) {
|
|
out << *in.parts;
|
|
|
|
return out;
|
|
}
|
|
|
|
QDataStream& operator>>(QDataStream& in, Animation& out) {
|
|
in >> *out.parts;
|
|
|
|
return in;
|
|
}
|
|
|
|
#endif // ANIMPARTS_H
|