XPlor/libs/xassets/xpathdata.cpp
2025-09-05 18:35:17 -04:00

83 lines
1.9 KiB
C++

#include "xpathdata.h"
XPathData::XPathData()
: XAsset() {
}
void XPathData::ParseData(QDataStream *aStream) {
// Parse the PathData structure
if (GetPtr() == -1) {
*aStream >> mNodeCount;
// Clear existing data before parsing new data
mNodes.clear();
mBaseNodes.clear();
mChainNodeForNode.clear();
mNodeForChainNode.clear();
mPathVis.clear();
mNodeTrees.clear();
// Parse nodes
for (unsigned int i = 0; i < mNodeCount; ++i) {
XPathNode node;
node.ParseData(aStream);
mNodes.append(node);
}
// Parse base nodes count and array
unsigned int baseNodeCount;
*aStream >> baseNodeCount;
for (unsigned int i = 0; i < baseNodeCount; ++i) {
XPathBaseNode baseNode;
baseNode.ParseData(aStream);
mBaseNodes.append(baseNode);
}
// Parse chain node count and arrays
*aStream >> mChainNodeCount;
for (int i = 0; i < mChainNodeCount; i++)
{
unsigned short chainNode;
*aStream >> chainNode;
mChainNodeForNode << chainNode;
unsigned short node;
*aStream >> node;
mNodeForChainNode << node;
}
// Parse visBytes and pathVis
*aStream >> mVisBytes;
if (mVisBytes > 0) {
mPathVis.resize(mVisBytes);
aStream->readRawData(mPathVis.data(), mVisBytes);
}
// Parse nodeTreeCount and nodeTrees
aStream->readRawData((char*)&mNodeTreeCount, sizeof(int));
for (int i = 0; i < mNodeTreeCount; ++i) {
XPathNodeTree nodeTree;
nodeTree.ParseData(aStream);
mNodeTrees.append(nodeTree);
}
}
}
unsigned int XPathData::GetNodeCount() const {
return mNodeCount;
}
void XPathData::SetNodeCount(unsigned int count) {
mNodeCount = count;
}