Update model structures

This commit is contained in:
Nicholas Johnson 2025-09-03 13:02:54 -04:00
parent ee4a680d6d
commit 60ddd31101
2 changed files with 69 additions and 296 deletions

View File

@ -1,42 +1,42 @@
#include "xmodel.h" #include "xmodel.h"
XModel::XModel() 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) { void XModel::ParseData(QDataStream *aStream) {
qint32 namePtr, boneNamesPtr; 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 *aStream
>> namePtr; >> namePtr;

View File

@ -1,282 +1,55 @@
#ifndef XMODEL_H #ifndef XMODEL_H
#define 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<XSurfaceCollisionNode> nodes;
unsigned int leafCount;
QVector<XSurfaceCollisionLeaf> 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 "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 class XModel : public XAsset
{ {
public: public:
explicit XModel(); explicit XModel();
void ParseData(QDataStream *aStream) override; virtual void ParseData(QDataStream* aStream) override;
virtual void Clear() override;
private: private:
QString mName; QString mName;
quint8 numBones; quint8 mNumBones;
quint8 numRootBones; quint8 mNumRootBones;
quint8 numsurfs; quint8 mNumSurfs;
quint8 lodRampType; quint8 mLodRampType;
ScriptStringList boneNames; XScriptStringList mBoneNames;
quint8 *parentList; QVector<quint8> mParentList;
qint16 *quats; QVector<quint8> mQuats;
float *trans; float *mTrans;
quint8 *partClassification; quint8 *mPartClassification;
DObjAnimMat *baseMat; XDObjAnimMat *mBaseMat;
XSurface *surfs; QVector<XSurface> mSurfs;
Material **materialHandles; QVector<XMaterial*> mMaterialHandles;
XModelLodInfo lodInfo[4]; QVector<XModelLodInfo> mLodInfo;
XModelCollSurf *collSurfs; QVector<XModelCollSurf> mCollSurfs;
int numCollSurfs; int mNumCollSurfs;
int contents; int mContents;
XBoneInfo *boneInfo; XBoneInfo* mBoneInfo;
float radius; float mRadius;
float mins[3]; QVector3D mMins;
float maxs[3]; QVector3D mMaxs;
qint16 numLods; qint16 mNumLods;
qint16 collLod; qint16 mCollLod;
XModelStreamInfo streamInfo; XModelStreamInfo mStreamInfo;
int memUsage; int mMemUsage;
quint8 flags; quint8 mFlags;
std::shared_ptr<PhysPreset> physPreset; XPhysPreset* mPhysPreset;
PhysGeomList *physGeoms; XPhysGeomList* mPhysGeoms;
}; };
#endif // XMODEL_H #endif // XMODEL_H