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()
: XAsset()
, mName("")
, mName()
, mNumBones(0)
, mNumRootBones(0)
, mNumSurfs(0)
@ -12,15 +12,15 @@ XModel::XModel()
, mParentList()
, mQuats()
, mTrans(0)
, mPartClassification(0)
, mBaseMat(0)
, mPartClassification()
, mBaseMat()
, mSurfs()
, mMaterialHandles()
, mLodInfo()
, mCollSurfs()
, mNumCollSurfs(0)
, mContents(0)
, mBoneInfo(new XBoneInfo())
, mBoneInfo()
, mRadius(0)
, mMins()
, mMaxs()
@ -29,8 +29,8 @@ XModel::XModel()
, mStreamInfo()
, mMemUsage(0)
, mFlags(0)
, mPhysPreset(new XPhysPreset)
, mPhysGeoms(new XPhysGeomList)
, mPhysPreset()
, mPhysGeoms()
{
SetType(ASSET_TYPE_XMODEL);
}
@ -41,13 +41,142 @@ XModel::~XModel()
}
void XModel::ParseData(QDataStream *aStream) {
qint32 namePtr, boneNamesPtr;
mName.ParsePtr(aStream, false);
*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()

View File

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