diff --git a/libs/xassets/xmodel.cpp b/libs/xassets/xmodel.cpp index 655d9a2..277dc3d 100644 --- a/libs/xassets/xmodel.cpp +++ b/libs/xassets/xmodel.cpp @@ -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() diff --git a/libs/xassets/xmodel.h b/libs/xassets/xmodel.h index 550f9f5..cd470ed 100644 --- a/libs/xassets/xmodel.h +++ b/libs/xassets/xmodel.h @@ -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 mBoneNames; QVector mParentList; QVector mQuats; - float *mTrans; - quint8 *mPartClassification; - XDObjAnimMat *mBaseMat; + QVector mTrans; + QVector mPartClassification; + XDObjAnimMat mBaseMat; QVector mSurfs; - QVector mMaterialHandles; + QVector mMaterialHandles; QVector mLodInfo; QVector 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