diff --git a/libs/xassets/xmodel.cpp b/libs/xassets/xmodel.cpp index bff897d..d1a19ab 100644 --- a/libs/xassets/xmodel.cpp +++ b/libs/xassets/xmodel.cpp @@ -1,42 +1,42 @@ #include "xmodel.h" XModel::XModel() - : XAsset() { + : XAsset() + , mName("") + , mNumBones(0) + , mNumRootBones(0) + , mNumSurfs(0) + , mLodRampType(0) + , mBoneNames() + , mParentList() + , mQuats() + , mTrans(0) + , mPartClassification(0) + , mBaseMat(0) + , mSurfs() + , mMaterialHandles() + , mLodInfo() + , mCollSurfs() + , mNumCollSurfs(0) + , mContents(0) + , mBoneInfo(new XBoneInfo()) + , mRadius(0) + , mMins() + , mMaxs() + , mNumLods(0) + , mCollLod(0) + , mStreamInfo() + , mMemUsage(0) + , mFlags(0) + , mPhysPreset(new XPhysPreset) + , mPhysGeoms(new XPhysGeomList) +{ } void XModel::ParseData(QDataStream *aStream) { qint32 namePtr, boneNamesPtr; - const char *name; - unsigned __int8 numBones; - unsigned __int8 numRootBones; - unsigned __int8 numsurfs; - unsigned __int8 lodRampType; - unsigned __int16 *boneNames; - unsigned __int8 *parentList; - __int16 *quats; - float *trans; - unsigned __int8 *partClassification; - DObjAnimMat *baseMat; - XSurface *surfs; - Material **materialHandles; - XModelLodInfo lodInfo[4]; - XModelCollSurf_s *collSurfs; - int numCollSurfs; - int contents; - XBoneInfo *boneInfo; - float radius; - float mins[3]; - float maxs[3]; - __int16 numLods; - __int16 collLod; - XModelStreamInfo streamInfo; - int memUsage; - unsigned __int8 flags; - PhysPreset *physPreset; - PhysGeomList *physGeoms; - *aStream >> namePtr; diff --git a/libs/xassets/xmodel.h b/libs/xassets/xmodel.h index 69ccb13..409d4d9 100644 --- a/libs/xassets/xmodel.h +++ b/libs/xassets/xmodel.h @@ -1,282 +1,55 @@ #ifndef XMODEL_H #define XMODEL_H -#include "material.h" -#include "scriptstringlist.h" - -struct XSurfaceVertexInfo -{ - qint16 vertCount[4]; - qint32 vertsBlendPtr; - quint16 vertsBlend; -}; - -union GfxColor -{ - unsigned int packed; - quint8 array[4]; -}; - -union PackedTexCoords -{ - unsigned int packed; -}; - -union PackedUnitVec -{ - unsigned int packed; -}; - -struct GfxPackedVertex -{ - float xyz[3]; - float binormalSign; - GfxColor color; - PackedTexCoords texCoord; - PackedUnitVec normal; - PackedUnitVec tangent; -}; - -struct GPUVERTEX_RAW_REQEUST -{ - quint32 Type : 2; - quint32 BaseAddress : 30; - quint32 Endian : 2; - quint32 Size : 24; - quint32 AddressClamp : 1; - quint32 : 1; - quint32 RequestSize : 2; - quint32 ClampDisable : 2; -}; - -union GPUVERTEX_FETCH_CONSTANT -{ - GPUVERTEX_RAW_REQEUST request; - unsigned int dword[2]; -}; - -struct D3DVertexBuffer : D3DResource -{ - GPUVERTEX_FETCH_CONSTANT Format; -}; - -struct XSurfaceCollisionAabb -{ - quint16 mins[3]; - quint16 maxs[3]; -}; - -struct XSurfaceCollisionNode -{ - XSurfaceCollisionAabb aabb; - quint16 childBeginIndex; - quint16 childCount; -}; - -struct XSurfaceCollisionLeaf -{ - quint16 triangleBeginIndex; -}; - -struct XSurfaceCollisionTree -{ - float trans[3]; - float scale[3]; - unsigned int nodeCount; - QVector nodes; - unsigned int leafCount; - QVector leafs; -}; - -struct XRigidVertList -{ - quint16 boneOffset; - quint16 vertCount; - quint16 triOffset; - quint16 triCount; - XSurfaceCollisionTree *collisionTree; -}; - -struct D3DIndexBuffer : D3DResource -{ - unsigned int Address; - unsigned int Size; -}; - -struct XSurface -{ - quint8 tileMode; - bool deformed; - quint16 vertCount; - quint16 triCount; - quint16 *triIndices; - XSurfaceVertexInfo vertInfo; - GfxPackedVertex *verts0; - D3DVertexBuffer vb0; - unsigned int vertListCount; - XRigidVertList *vertList; - D3DIndexBuffer indexBuffer; - int partBits[4]; -}; - -struct DObjAnimMat -{ - float quat[4]; - float trans[3]; - float transWeight; -}; - -struct XModelLodInfo -{ - float dist; - quint16 numsurfs; - quint16 surfIndex; - int partBits[4]; -}; - -struct XModelCollSurf -{ - float mins[3]; - float maxs[3]; - int boneIdx; - int contents; - int surfFlags; -}; - -struct XBoneInfo -{ - float bounds[2][3]; - float offset[3]; - float radiusSquared; -}; - -struct XModelHighMipBounds -{ - float mins[3]; - float maxs[3]; -}; - -struct XModelStreamInfo -{ - XModelHighMipBounds *highMipBounds; -}; - -struct PhysPreset -{ - qint32 namePtr; - QString name; - - int type; - - float mass; - float bounce; - float friction; - float bulletForceScale; - float explosiveForceScale; - - qint32 sndAliasPrefixPtr; - QString sndAliasPrefix; - - float piecesSpreadFraction; - float piecesUpwardVelocity; - - bool tempDefaultToCylinder; -}; - -struct CPlane -{ - float normal[3]; - float dist; - quint8 type; - quint8 signbits; - quint8 pad[2]; -}; - -struct CBrushSide -{ - qint32 planePtr; - CPlane plane; - uint materialNum; - qint16 firstAdjacentSideOffset; - quint8 edgeCount; -}; - -struct BrushWrapper -{ - float mins[3]; - int contents; - float maxs[3]; - unsigned int numsides; - CBrushSide *sides; - __int16 axialMaterialNum[2][3]; - quint8 *baseAdjacentSide; - __int16 firstAdjacentSideOffsets[2][3]; - quint8 edgeCount[2][3]; - int totalEdgeCount; - CPlane *planes; -}; - -struct PhysGeomInfo -{ - BrushWrapper *brush; - int type; - float orientation[3][3]; - float offset[3]; - float halfLengths[3]; -}; - -struct PhysMass -{ - float centerOfMass[3]; - float momentsOfInertia[3]; - float productsOfInertia[3]; -}; - -struct PhysGeomList -{ - unsigned int count; - PhysGeomInfo *geoms; - PhysMass mass; -}; - #include "xasset.h" +#include "xmodelstreaminfo.h" +#include "xphysgeomlist.h" +#include "xphyspreset.h" +#include "xscriptstringlist.h" +#include "xboneinfo.h" +#include "xmodellodinfo.h" +#include "xmodelcollsurf.h" +#include "xmaterial.h" +#include "xsurface.h" +#include "xdobjanimmat.h" class XModel : public XAsset { public: explicit XModel(); - void ParseData(QDataStream *aStream) override; + virtual void ParseData(QDataStream* aStream) override; + virtual void Clear() override; private: QString mName; - quint8 numBones; - quint8 numRootBones; - quint8 numsurfs; - quint8 lodRampType; - ScriptStringList boneNames; - quint8 *parentList; - qint16 *quats; - float *trans; - quint8 *partClassification; - DObjAnimMat *baseMat; - XSurface *surfs; - Material **materialHandles; - XModelLodInfo lodInfo[4]; - XModelCollSurf *collSurfs; - int numCollSurfs; - int contents; - XBoneInfo *boneInfo; - float radius; - float mins[3]; - float maxs[3]; - qint16 numLods; - qint16 collLod; - XModelStreamInfo streamInfo; - int memUsage; - quint8 flags; - std::shared_ptr physPreset; - PhysGeomList *physGeoms; + quint8 mNumBones; + quint8 mNumRootBones; + quint8 mNumSurfs; + quint8 mLodRampType; + XScriptStringList mBoneNames; + QVector mParentList; + QVector mQuats; + float *mTrans; + quint8 *mPartClassification; + XDObjAnimMat *mBaseMat; + QVector mSurfs; + QVector mMaterialHandles; + QVector mLodInfo; + QVector mCollSurfs; + int mNumCollSurfs; + int mContents; + XBoneInfo* mBoneInfo; + float mRadius; + QVector3D mMins; + QVector3D mMaxs; + qint16 mNumLods; + qint16 mCollLod; + XModelStreamInfo mStreamInfo; + int mMemUsage; + quint8 mFlags; + XPhysPreset* mPhysPreset; + XPhysGeomList* mPhysGeoms; }; #endif // XMODEL_H