XPlor/libs/xassets/xclipmap.cpp

357 lines
8.7 KiB
C++
Raw Normal View History

2025-08-17 13:14:17 -04:00
#include "xclipmap.h"
XClipMap::XClipMap()
2025-09-07 12:36:08 -04:00
: 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)
{
2025-09-05 18:35:17 -04:00
SetType(ASSET_TYPE_CLIPMAP);
SetName("ClipMap");
2025-08-17 13:14:17 -04:00
}
2025-09-05 18:35:17 -04:00
XClipMap::~XClipMap()
{
2025-08-17 13:14:17 -04:00
}
2025-09-07 12:36:08 -04:00
void XClipMap::ParseData(QDataStream *aStream)
{
if (GetPtr() == -1)
{
mName.ParsePtr(aStream, false);
qint32 planePtr, staticModelPtr, materialsPtr, brushSidesPtr,
brushEdgesPtr, nodesPtr, leafsPtr, leafsBrushNodesPtr,
2025-09-07 23:11:48 -04:00
leafBrushesPtr, leafSurfacesPtr, vertPtr,
2025-09-07 12:36:08 -04:00
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
2025-09-07 23:11:48 -04:00
>> vertPtr
2025-09-07 12:36:08 -04:00
>> mTriCount
>> triIndicesPtr
>> triEdgeWalkablePtr
>> mBorderCount
>> bordersPtr
>> mPartitionCount
>> partitionsPtr
>> mAabbTreeCount
>> aabbTreesPtr
>> mNumSubModels
>> cModelsPtr
>> mNumBrushes;
aStream->skipRawData(2);
2025-09-07 23:11:48 -04:00
qint32 brushesPtr, visibilityPtr, mapEntsPtr;
2025-09-07 12:36:08 -04:00
*aStream
>> brushesPtr
>> mNumClusters
>> mClusterBytes
>> visibilityPtr
>> mVised
2025-09-07 23:11:48 -04:00
>> mapEntsPtr;
mMapEnts.ParsePtr(aStream, false);
mBoxBrush.ParsePtr(aStream, false);
2025-09-07 12:36:08 -04:00
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);
}
}
2025-08-17 13:14:17 -04:00
2025-09-07 12:36:08 -04:00
if (leafsBrushNodesPtr)
{
for (int i = 0; i < mNumLeafBrushes; i++)
{
XCLeafBrushNode newBrushNode;
newBrushNode.ParseData(aStream);
mLeafBrushNodes.append(newBrushNode);
}
}
2025-08-17 13:14:17 -04:00
2025-09-07 23:11:48 -04:00
if (leafSurfacesPtr)
{
for (int i = 0; i < mNumLeafBrushes; i++)
{
quint32 newBrush;
*aStream >> newBrush;
mLeafSurfaces.append(newBrush);
}
}
if (vertPtr)
{
for (int i = 0; i < mVertCount; i++)
{
QVector3D newVert;
*aStream
>> newVert[0]
>> newVert[1]
>> newVert[2];
mVerts.append(newVert);
}
}
if (triIndicesPtr)
{
for (int i = 0; i < mTriCount; i++)
{
quint32 newTri;
*aStream >> newTri;
mTriIndices.append(newTri);
}
}
if (triEdgeWalkablePtr)
{
aStream->readRawData(mTriEdgeIsWalkable.data(), ((3 * mTriCount + 31) >> 3) & 0xFFFFFFFC);
}
if (bordersPtr)
{
for (int i = 0; i < mBorderCount; i++)
{
XCollisionBorder newBorder;
newBorder.ParseData(aStream);
mBorders.append(newBorder);
}
}
if (partitionsPtr)
{
for (int i = 0; i < mPartitionCount; i++)
{
XCollisionPartition newPartition;
newPartition.ParseData(aStream);
mPartitions.append(newPartition);
}
}
if (aabbTreesPtr)
{
for (int i = 0; i < mAabbTreeCount; i++)
{
XCollisionAabbTree newTree;
newTree.ParseData(aStream);
mAabbTrees.append(newTree);
}
}
if (cModelsPtr)
{
for (int i = 0; i < mNumSubModels; i++)
{
XCModel newCModel;
newCModel.ParseData(aStream);
mCModels.append(newCModel);
}
}
if (brushesPtr)
{
for (int i = 0; i < mNumBrushes; i++)
{
XCBrush newCBrush;
newCBrush.ParseData(aStream);
mBrushes.append(newCBrush);
}
}
if (visibilityPtr)
{
aStream->readRawData(mVisibility.data(), mClusterBytes * mNumClusters);
}
if (mapEntsPtr)
{
mMapEnts.ParseData(aStream);
}
mBoxBrush.ParseData(aStream);
mDynEntDefList[0].ParseData(aStream);
mDynEntDefList[0].ParseData(aStream);
mDynEntPoseList[0].ParseData(aStream);
mDynEntPoseList[0].ParseData(aStream);
mDynEntClientList[0].ParseData(aStream);
mDynEntClientList[0].ParseData(aStream);
mDynEntCollList[0].ParseData(aStream);
mDynEntCollList[0].ParseData(aStream);
2025-09-07 12:36:08 -04:00
}
2025-08-17 13:14:17 -04:00
}
2025-09-05 18:35:17 -04:00
void XClipMap::Clear()
{
2025-08-17 13:14:17 -04:00
}