feature/test #9
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user