#ifndef ANIMPARTS_H #define ANIMPARTS_H #include #include 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(&in.namePtr), 4); out.writeRawData(reinterpret_cast(&in.dataByteCount), 2); out.writeRawData(reinterpret_cast(&in.dataShortCount), 2); out.writeRawData(reinterpret_cast(&in.dataIntCount), 2); out.writeRawData(reinterpret_cast(&in.randomDataByteCount), 2); out.writeRawData(reinterpret_cast(&in.randomDataIntCount), 2); out.writeRawData(reinterpret_cast(&in.numframes), 2); out.writeRawData(reinterpret_cast(&in.bLoop), 1); out.writeRawData(reinterpret_cast(&in.bDelta), 1); for (int i = 0; i < 12; i++) { out.writeRawData(reinterpret_cast(&in.boneCount[i]), 1); } out.writeRawData(reinterpret_cast(&in.notifyCount), 1); out.writeRawData(reinterpret_cast(&in.assetType), 1); out.writeRawData(reinterpret_cast(&in.pad), 1); out.writeRawData(reinterpret_cast(&in.randomDataShortCount), 2); out.writeRawData(reinterpret_cast(&in.indexCount), 2); out.writeRawData(reinterpret_cast(&in.framerate), 4); out.writeRawData(reinterpret_cast(&in.frequency), 4); return out; } QDataStream& operator>>(QDataStream& in, XAnimParts& out) { in.readRawData(reinterpret_cast(&out.namePtr), 4); in.readRawData(reinterpret_cast(&out.dataByteCount), 2); in.readRawData(reinterpret_cast(&out.dataShortCount), 2); in.readRawData(reinterpret_cast(&out.dataIntCount), 2); in.readRawData(reinterpret_cast(&out.randomDataByteCount), 2); in.readRawData(reinterpret_cast(&out.randomDataIntCount), 2); in.readRawData(reinterpret_cast(&out.numframes), 2); in.readRawData(reinterpret_cast(&out.bLoop), 1); in.readRawData(reinterpret_cast(&out.bDelta), 1); for (int i = 0; i < 12; i++) { in.readRawData(reinterpret_cast(&out.boneCount[i]), 1); } in.readRawData(reinterpret_cast(&out.notifyCount), 1); in.readRawData(reinterpret_cast(&out.assetType), 1); in.readRawData(reinterpret_cast(&out.pad), 1); in.readRawData(reinterpret_cast(&out.randomDataShortCount), 2); in.readRawData(reinterpret_cast(&out.indexCount), 2); in.readRawData(reinterpret_cast(&out.framerate), 4); in.readRawData(reinterpret_cast(&out.frequency), 4); return in; } struct Animation { QString name; std::shared_ptr 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