100 lines
2.9 KiB
C++
100 lines
2.9 KiB
C++
#include "xgfxcell.h"
|
|
|
|
XGfxCell::XGfxCell()
|
|
: XAsset()
|
|
, mMins()
|
|
, mMaxs()
|
|
, mAabbTreeCount(0)
|
|
, mAabbTree()
|
|
, mPortalCount(0)
|
|
, mPortals()
|
|
, mCullGroupCount(0)
|
|
, mCullGroups()
|
|
, mReflectionProbeCount(0)
|
|
, mReflectionProbes()
|
|
{
|
|
SetName("GFX Cell");
|
|
}
|
|
|
|
XGfxCell::~XGfxCell()
|
|
{
|
|
|
|
}
|
|
|
|
void XGfxCell::ParseData(XDataStream *aStream)
|
|
{
|
|
qint32 aabbTreePtr, portalsPtr, cullGroupsPtr, reflectionProbesPtr;
|
|
|
|
mMins.setX(aStream->ParseSingle(QString("%1 mins x").arg(GetName())));
|
|
mMins.setY(aStream->ParseSingle(QString("%1 mins y").arg(GetName())));
|
|
mMins.setZ(aStream->ParseSingle(QString("%1 mins z").arg(GetName())));
|
|
|
|
mMaxs.setX(aStream->ParseSingle(QString("%1 maxs x").arg(GetName())));
|
|
mMaxs.setY(aStream->ParseSingle(QString("%1 maxs y").arg(GetName())));
|
|
mMaxs.setZ(aStream->ParseSingle(QString("%1 maxs z").arg(GetName())));
|
|
|
|
mAabbTreeCount = aStream->ParseInt32(QString("%1 aabb tree count").arg(GetName()));
|
|
aabbTreePtr = aStream->ParseInt32(QString("%1 aabb tree ptr").arg(GetName()));
|
|
|
|
mPortalCount = aStream->ParseInt32(QString("%1 portal count").arg(GetName()));
|
|
portalsPtr = aStream->ParseInt32(QString("%1 portals ptr").arg(GetName()));
|
|
|
|
mCullGroupCount = aStream->ParseInt32(QString("%1 cull group count").arg(GetName()));
|
|
cullGroupsPtr = aStream->ParseInt32(QString("%1 cull groups ptr").arg(GetName()));
|
|
|
|
mReflectionProbeCount = aStream->ParseUInt8(QString("%1 reflection probe count").arg(GetName()));
|
|
reflectionProbesPtr = aStream->ParseInt32(QString("%1 reflection probes ptr").arg(GetName()));
|
|
|
|
if (aabbTreePtr)
|
|
{
|
|
for (int i = 0; i < mAabbTreeCount; i++)
|
|
{
|
|
XGfxAabbTree newTree;
|
|
newTree.ParseData(aStream);
|
|
mAabbTree.append(newTree);
|
|
}
|
|
}
|
|
|
|
if (portalsPtr)
|
|
{
|
|
for (int i = 0; i < mPortalCount; i++)
|
|
{
|
|
XGfxPortal newPortal;
|
|
newPortal.ParseData(aStream);
|
|
mPortals.append(newPortal);
|
|
}
|
|
}
|
|
|
|
if (cullGroupsPtr)
|
|
{
|
|
for (int i = 0; i < mCullGroupCount; i++)
|
|
{
|
|
qint32 newCullGroup = aStream->ParseInt32(QString("%1 cull group %2").arg(GetName()).arg(i));
|
|
mCullGroups.append(newCullGroup);
|
|
}
|
|
}
|
|
|
|
if (reflectionProbesPtr)
|
|
{
|
|
for (int i = 0; i < mReflectionProbeCount; i++)
|
|
{
|
|
quint8 newReflectionProbe = aStream->ParseUInt8(QString("%1 reflection probe %2").arg(GetName()).arg(i));
|
|
mReflectionProbes.append(newReflectionProbe);
|
|
}
|
|
}
|
|
}
|
|
|
|
void XGfxCell::Clear()
|
|
{
|
|
mMins = QVector3D();
|
|
mMaxs = QVector3D();
|
|
mAabbTreeCount = 0;
|
|
mAabbTree.clear();
|
|
mPortalCount = 0;
|
|
mPortals.clear();
|
|
mCullGroupCount = 0;
|
|
mCullGroups.clear();
|
|
mReflectionProbeCount = 0;
|
|
mReflectionProbes.clear();
|
|
}
|