feature/test #9
@ -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;
|
||||
|
||||
|
||||
@ -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<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 "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> physPreset;
|
||||
PhysGeomList *physGeoms;
|
||||
quint8 mNumBones;
|
||||
quint8 mNumRootBones;
|
||||
quint8 mNumSurfs;
|
||||
quint8 mLodRampType;
|
||||
XScriptStringList mBoneNames;
|
||||
QVector<quint8> mParentList;
|
||||
QVector<quint8> mQuats;
|
||||
float *mTrans;
|
||||
quint8 *mPartClassification;
|
||||
XDObjAnimMat *mBaseMat;
|
||||
QVector<XSurface> mSurfs;
|
||||
QVector<XMaterial*> mMaterialHandles;
|
||||
QVector<XModelLodInfo> mLodInfo;
|
||||
QVector<XModelCollSurf> 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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user