Updated xmodel

This commit is contained in:
njohnson 2025-09-07 23:16:08 -04:00
parent 43e925ae23
commit da6233c10d
2 changed files with 147 additions and 18 deletions

View File

@ -3,7 +3,7 @@
XModel::XModel() XModel::XModel()
: XAsset() : XAsset()
, mName("") , mName()
, mNumBones(0) , mNumBones(0)
, mNumRootBones(0) , mNumRootBones(0)
, mNumSurfs(0) , mNumSurfs(0)
@ -12,15 +12,15 @@ XModel::XModel()
, mParentList() , mParentList()
, mQuats() , mQuats()
, mTrans(0) , mTrans(0)
, mPartClassification(0) , mPartClassification()
, mBaseMat(0) , mBaseMat()
, mSurfs() , mSurfs()
, mMaterialHandles() , mMaterialHandles()
, mLodInfo() , mLodInfo()
, mCollSurfs() , mCollSurfs()
, mNumCollSurfs(0) , mNumCollSurfs(0)
, mContents(0) , mContents(0)
, mBoneInfo(new XBoneInfo()) , mBoneInfo()
, mRadius(0) , mRadius(0)
, mMins() , mMins()
, mMaxs() , mMaxs()
@ -29,8 +29,8 @@ XModel::XModel()
, mStreamInfo() , mStreamInfo()
, mMemUsage(0) , mMemUsage(0)
, mFlags(0) , mFlags(0)
, mPhysPreset(new XPhysPreset) , mPhysPreset()
, mPhysGeoms(new XPhysGeomList) , mPhysGeoms()
{ {
SetType(ASSET_TYPE_XMODEL); SetType(ASSET_TYPE_XMODEL);
} }
@ -41,13 +41,142 @@ XModel::~XModel()
} }
void XModel::ParseData(QDataStream *aStream) { void XModel::ParseData(QDataStream *aStream) {
qint32 namePtr, boneNamesPtr;
mName.ParsePtr(aStream, false);
*aStream *aStream
>> namePtr; >> mNumBones
>> mNumRootBones
>> mNumSurfs
>> mLodRampType;
mName = XString::ParseCustom(aStream); qint32 boneNamesPtr, parentListPtr, quatsPtr, transPtr, partClassPtr;
*aStream
>> boneNamesPtr
>> parentListPtr
>> quatsPtr
>> transPtr
>> partClassPtr;
mBaseMat.ParsePtr(aStream, false);
qint32 surfsPtr, matHandlesPtr, lodInfoPtr, collSurfsPtr;
*aStream
>> surfsPtr
>> matHandlesPtr
>> lodInfoPtr
>> collSurfsPtr
>> mNumCollSurfs
>> mContents;
mBoneInfo.ParsePtr(aStream, false);
*aStream
>> mRadius
>> mMins
>> mMaxs
>> mNumLods
>> mCollLod;
mStreamInfo.ParseData(aStream);
*aStream
>> mMemUsage
>> mFlags;
aStream->skipRawData(3);
mPhysPreset.ParsePtr(aStream, false);
mPhysGeoms.ParsePtr(aStream, false);
mName.ParseData(aStream);
if (boneNamesPtr == -1)
{
for (int i = 0; i < mNumBones; i++)
{
quint16 bone;
*aStream >> bone;
mBoneNames.append(bone);
}
}
if (parentListPtr == -1)
{
for (int i = 0; i < mNumBones - mNumRootBones; i++)
{
quint8 parent;
*aStream >> parent;
mParentList.append(parent);
}
}
if (quatsPtr == -1)
{
for (int i = 0; i < 8 * (mNumBones - mNumRootBones); i++)
{
quint8 quat;
*aStream >> quat;
mQuats.append(quat);
}
}
if (transPtr == -1)
{
for (int i = 0; i < 16 * (mNumBones - mNumRootBones); i++)
{
quint8 trans;
*aStream >> trans;
mTrans.append(trans);
}
}
if (partClassPtr == -1)
{
for (int i = 0; i < mNumBones; i++)
{
quint8 partClass;
*aStream >> partClass;
mPartClassification.append(partClass);
}
}
mBaseMat.ParseData(aStream);
if (surfsPtr == -1)
{
for (int i = 0; i < mNumSurfs; i++)
{
XSurface newSurf;
newSurf.ParseData(aStream);
mSurfs.append(newSurf);
}
}
if (matHandlesPtr == -1)
{
for (int i = 0; i < mNumSurfs; i++)
{
XMaterial newMaterial;
newMaterial.ParseData(aStream);
mMaterialHandles.append(newMaterial);
}
}
if (collSurfsPtr == -1)
{
for (int i = 0; i < mNumCollSurfs; i++)
{
XModelCollSurf newCollSurf;
newCollSurf.ParseData(aStream);
mCollSurfs.append(newCollSurf);
}
}
mBoneInfo.ParseData(aStream);
// TODO: Fill out rest of this
} }
void XModel::Clear() void XModel::Clear()

View File

@ -23,24 +23,24 @@ public:
virtual void Clear() override; virtual void Clear() override;
private: private:
QString mName; XString mName;
quint8 mNumBones; quint8 mNumBones;
quint8 mNumRootBones; quint8 mNumRootBones;
quint8 mNumSurfs; quint8 mNumSurfs;
quint8 mLodRampType; quint8 mLodRampType;
XScriptStringList mBoneNames; QVector<quint16> mBoneNames;
QVector<quint8> mParentList; QVector<quint8> mParentList;
QVector<quint8> mQuats; QVector<quint8> mQuats;
float *mTrans; QVector<float> mTrans;
quint8 *mPartClassification; QVector<quint8> mPartClassification;
XDObjAnimMat *mBaseMat; XDObjAnimMat mBaseMat;
QVector<XSurface> mSurfs; QVector<XSurface> mSurfs;
QVector<XMaterial*> mMaterialHandles; QVector<XMaterial> mMaterialHandles;
QVector<XModelLodInfo> mLodInfo; QVector<XModelLodInfo> mLodInfo;
QVector<XModelCollSurf> mCollSurfs; QVector<XModelCollSurf> mCollSurfs;
int mNumCollSurfs; int mNumCollSurfs;
int mContents; int mContents;
XBoneInfo* mBoneInfo; XBoneInfo mBoneInfo;
float mRadius; float mRadius;
QVector3D mMins; QVector3D mMins;
QVector3D mMaxs; QVector3D mMaxs;
@ -49,8 +49,8 @@ private:
XModelStreamInfo mStreamInfo; XModelStreamInfo mStreamInfo;
int mMemUsage; int mMemUsage;
quint8 mFlags; quint8 mFlags;
XPhysPreset* mPhysPreset; XPhysPreset mPhysPreset;
XPhysGeomList* mPhysGeoms; XPhysGeomList mPhysGeoms;
}; };
#endif // XMODEL_H #endif // XMODEL_H