266 lines
6.3 KiB
C++
266 lines
6.3 KiB
C++
#include "xclipmap.h"
|
|
|
|
XClipMap::XClipMap()
|
|
: XAsset()
|
|
, mName()
|
|
, mIsInUse(false)
|
|
, mPlaneCount(0)
|
|
, mPlanes()
|
|
, mNumStaticModels(0)
|
|
, mStaticModelList()
|
|
, mNumMaterials(0)
|
|
, mMaterials()
|
|
, mNumBrushSides(0)
|
|
, mBrushsides()
|
|
, mNumBrushEdges(0)
|
|
, mBrushEdges()
|
|
, mNumNodes(0)
|
|
, mNodes()
|
|
, mNumLeafs(0)
|
|
, mLeafs()
|
|
, mLeafBrushNodesCount(0)
|
|
, mLeafBrushNodes()
|
|
, mNumLeafBrushes(0)
|
|
, mLeafBrushes()
|
|
, mNumLeafSurfaces(0)
|
|
, mLeafSurfaces()
|
|
, mVertCount(0)
|
|
, mVerts()
|
|
, mTriCount(0)
|
|
, mTriIndices()
|
|
, mTriEdgeIsWalkable()
|
|
, mBorderCount(0)
|
|
, mBorders()
|
|
, mPartitionCount(0)
|
|
, mPartitions()
|
|
, mAabbTreeCount(0)
|
|
, mAabbTrees()
|
|
, mNumSubModels(0)
|
|
, mCModels()
|
|
, mNumBrushes(0)
|
|
, mBrushes()
|
|
, mNumClusters(0)
|
|
, mClusterBytes(0)
|
|
, mVisibility()
|
|
, mVised(0)
|
|
, mMapEnts()
|
|
, mBoxBrush()
|
|
, mBoxModel()
|
|
, mDynEntCounts(0)
|
|
, mDynEntDefList(2)
|
|
, mDynEntPoseList(2)
|
|
, mDynEntClientList(2)
|
|
, mDynEntCollList(2)
|
|
, mChecksum(0)
|
|
{
|
|
SetType(ASSET_TYPE_CLIPMAP);
|
|
SetName("ClipMap");
|
|
}
|
|
|
|
XClipMap::~XClipMap()
|
|
{
|
|
|
|
}
|
|
|
|
void XClipMap::ParseData(QDataStream *aStream)
|
|
{
|
|
if (GetPtr() == -1)
|
|
{
|
|
mName.ParsePtr(aStream, false);
|
|
|
|
qint32 planePtr, staticModelPtr, materialsPtr, brushSidesPtr,
|
|
brushEdgesPtr, nodesPtr, leafsPtr, leafsBrushNodesPtr,
|
|
leafBrushesPtr, leafSurfacesPtr, vertPtr1, vertPtr2, vertPtr3,
|
|
triIndicesPtr, triEdgeWalkablePtr, bordersPtr, partitionsPtr, aabbTreesPtr,
|
|
cModelsPtr;
|
|
*aStream
|
|
>> mIsInUse
|
|
>> mPlaneCount
|
|
>> planePtr
|
|
>> mNumStaticModels
|
|
>> staticModelPtr
|
|
>> mNumMaterials
|
|
>> materialsPtr
|
|
>> mNumBrushSides
|
|
>> brushSidesPtr
|
|
>> mNumBrushEdges
|
|
>> brushEdgesPtr
|
|
>> mNumNodes
|
|
>> nodesPtr
|
|
>> mNumLeafs
|
|
>> leafsPtr
|
|
>> mLeafBrushNodesCount
|
|
>> leafsBrushNodesPtr
|
|
>> mNumLeafBrushes
|
|
>> leafBrushesPtr
|
|
>> mNumLeafSurfaces
|
|
>> leafSurfacesPtr
|
|
>> mVertCount
|
|
>> vertPtr1
|
|
>> vertPtr2
|
|
>> vertPtr3
|
|
>> mTriCount
|
|
>> triIndicesPtr
|
|
>> triEdgeWalkablePtr
|
|
>> mBorderCount
|
|
>> bordersPtr
|
|
>> mPartitionCount
|
|
>> partitionsPtr
|
|
>> mAabbTreeCount
|
|
>> aabbTreesPtr
|
|
>> mNumSubModels
|
|
>> cModelsPtr
|
|
>> mNumBrushes;
|
|
|
|
aStream->skipRawData(2);
|
|
|
|
qint32 brushesPtr, visibilityPtr, mapEntsPtr, boxBrushPtr;
|
|
*aStream
|
|
>> brushesPtr
|
|
>> mNumClusters
|
|
>> mClusterBytes
|
|
>> visibilityPtr
|
|
>> mVised
|
|
>> mapEntsPtr
|
|
>> boxBrushPtr;
|
|
|
|
mBoxModel.ParseData(aStream);
|
|
|
|
quint16 dynEntCount;
|
|
*aStream >> dynEntCount;
|
|
mDynEntCounts.append(dynEntCount);
|
|
*aStream >> dynEntCount;
|
|
mDynEntCounts.append(dynEntCount);
|
|
|
|
mDynEntDefList[0].ParsePtr(aStream, false);
|
|
mDynEntDefList[0].ParsePtr(aStream, false);
|
|
|
|
mDynEntPoseList[0].ParsePtr(aStream, false);
|
|
mDynEntPoseList[0].ParsePtr(aStream, false);
|
|
|
|
mDynEntClientList[0].ParsePtr(aStream, false);
|
|
mDynEntClientList[0].ParsePtr(aStream, false);
|
|
|
|
mDynEntCollList[0].ParsePtr(aStream, false);
|
|
mDynEntCollList[0].ParsePtr(aStream, false);
|
|
|
|
*aStream >> mChecksum;
|
|
|
|
if (planePtr)
|
|
{
|
|
for (int i = 0; i < mPlaneCount; i++)
|
|
{
|
|
XCPlane newCPlane;
|
|
newCPlane.ParseData(aStream);
|
|
mPlanes.append(newCPlane);
|
|
}
|
|
}
|
|
|
|
if (staticModelPtr)
|
|
{
|
|
for (int i = 0; i < mNumStaticModels; i++)
|
|
{
|
|
XCStaticModel newModel;
|
|
newModel.ParseData(aStream);
|
|
mStaticModelList.append(newModel);
|
|
}
|
|
}
|
|
|
|
if (materialsPtr)
|
|
{
|
|
for (int i = 0; i < mNumMaterials; i++)
|
|
{
|
|
XDMaterial newDMaterial;
|
|
newDMaterial.ParseData(aStream);
|
|
mMaterials.append(newDMaterial);
|
|
}
|
|
}
|
|
|
|
if (brushSidesPtr)
|
|
{
|
|
for (int i = 0; i < mNumBrushSides; i++)
|
|
{
|
|
XCBrushSide newBrushSide;
|
|
newBrushSide.ParseData(aStream);
|
|
mBrushsides.append(newBrushSide);
|
|
}
|
|
}
|
|
|
|
if (brushEdgesPtr)
|
|
{
|
|
for (int i = 0; i < mNumBrushEdges; i++)
|
|
{
|
|
quint8 newBrushEdge;
|
|
*aStream >> newBrushEdge;
|
|
mBrushEdges.append(newBrushEdge);
|
|
}
|
|
}
|
|
|
|
if (nodesPtr)
|
|
{
|
|
for (int i = 0; i < mNumNodes; i++)
|
|
{
|
|
XCNode newNode;
|
|
newNode.ParseData(aStream);
|
|
mNodes.append(newNode);
|
|
}
|
|
}
|
|
|
|
if (leafsPtr)
|
|
{
|
|
for (int i = 0; i < mNumLeafs; i++)
|
|
{
|
|
XCLeaf newLeaf;
|
|
newLeaf.ParseData(aStream);
|
|
mLeafs.append(newLeaf);
|
|
}
|
|
}
|
|
|
|
if (leafBrushesPtr)
|
|
{
|
|
for (int i = 0; i < mNumLeafBrushes; i++)
|
|
{
|
|
quint32 newBrush;
|
|
*aStream >> newBrush;
|
|
mLeafBrushes.append(newBrush);
|
|
}
|
|
}
|
|
|
|
if (leafsBrushNodesPtr)
|
|
{
|
|
for (int i = 0; i < mNumLeafBrushes; i++)
|
|
{
|
|
XCLeafBrushNode newBrushNode;
|
|
newBrushNode.ParseData(aStream);
|
|
mLeafBrushNodes.append(newBrushNode);
|
|
}
|
|
}
|
|
|
|
mLeafbrushNodes()
|
|
mLeafsurfaces()
|
|
mVerts()
|
|
mTriIndices()
|
|
mTriEdgeIsWalkable()
|
|
mBorders()
|
|
mPartitions()
|
|
mAabbTrees()
|
|
mCodels()
|
|
mBrushes()
|
|
mVisibility()
|
|
mMapEnts()
|
|
mBoxBrush()
|
|
mBoxModel()
|
|
mDynEntCount(0)
|
|
mDynEntDefList()
|
|
mDynEntPoseList()
|
|
mDynEntClientList()
|
|
mDynEntCollList()
|
|
(0)
|
|
}
|
|
}
|
|
|
|
void XClipMap::Clear()
|
|
{
|
|
|
|
}
|