XPlor/libs/xassets/xfxelemdef.cpp

176 lines
5.0 KiB
C++
Raw Normal View History

2025-09-03 13:04:54 -04:00
#include "xfxelemdef.h"
XFxElemDef::XFxElemDef()
: XAsset()
, mFlags(0)
, mSpawn()
, mSpawnRange()
, mFadeInRange()
, mFadeOutRange()
, mSpawnFrustumCullRadius(0)
, mSpawnDelayMsec()
, mLifeSpanMsec()
2025-09-07 23:12:05 -04:00
, mSpawnOrigin(3)
2025-09-03 13:04:54 -04:00
, mSpawnOffsetRadius()
, mSpawnOffsetHeight()
2025-09-07 23:12:05 -04:00
, mSpawnAngles(3)
, mAngularVelocity(3)
2025-09-03 13:04:54 -04:00
, mInitialRotation()
, mGravity()
, mReflectionFactor()
, mAtlas()
, mElemType(0)
, mVisualCount(0)
, mVelIntervalCount(0)
, mVisStateIntervalCount(0)
, mVelSamplesPtr(0)
, mVelSamples()
, mVisSamplesPtr(0)
, mVisSamples()
, mVisuals()
, mCollMins()
, mCollMaxs()
, mEffectOnImpact()
, mEffectOnDeath()
, mEffectEmitted()
, mEmitDist()
, mEmitDistVariance()
2025-09-07 23:12:05 -04:00
, mTrailDef()
2025-09-03 13:04:54 -04:00
, mSortOrder(0)
, mLightingFrac(0)
, mUseItemClip(0)
{
2025-09-10 21:58:26 -04:00
SetName("Element Definition");
2025-09-03 13:04:54 -04:00
}
XFxElemDef::~XFxElemDef()
{
}
void XFxElemDef::Clear()
{
mFlags = 0;
mSpawn.Clear();
2025-09-05 18:35:17 -04:00
mSpawnRange.Clear();
mFadeInRange.Clear();
mFadeOutRange.Clear();
2025-09-03 13:04:54 -04:00
mSpawnFrustumCullRadius = 0;
2025-09-05 18:35:17 -04:00
mSpawnDelayMsec.Clear();
mLifeSpanMsec.Clear();
mSpawnOrigin.clear();
mSpawnOffsetRadius.Clear();
mSpawnOffsetHeight.Clear();
mSpawnAngles.clear();
mAngularVelocity.clear();
mInitialRotation.Clear();
mGravity.Clear();
mReflectionFactor.Clear();
mAtlas.Clear();
2025-09-03 13:04:54 -04:00
mElemType = 0;
mVisualCount = 0;
mVelIntervalCount = 0;
mVisStateIntervalCount = 0;
mVelSamplesPtr = 0;
2025-09-05 18:35:17 -04:00
mVelSamples.clear();
2025-09-03 13:04:54 -04:00
mVisSamplesPtr = 0;
2025-09-05 18:35:17 -04:00
mVisSamples.clear();
mVisuals.Clear();
2025-09-03 13:04:54 -04:00
mCollMins = QVector3D();
mCollMaxs = QVector3D();
2025-09-05 18:35:17 -04:00
mEffectOnImpact.Clear();
mEffectOnDeath.Clear();
mEffectEmitted.Clear();
mEmitDist.Clear();
mEmitDistVariance.Clear();
2025-09-07 23:12:05 -04:00
mTrailDef.Clear();
2025-09-03 13:04:54 -04:00
mSortOrder = 0;
mLightingFrac = 0;
mUseItemClip = 0;
}
2025-09-10 21:58:26 -04:00
void XFxElemDef::ParseData(XDataStream *aStream)
2025-09-03 13:04:54 -04:00
{
2025-09-10 21:58:26 -04:00
mFlags = aStream->ParseInt32(QString("%1 flags").arg(GetName()));
2025-09-07 23:12:05 -04:00
mSpawn.ParseData(aStream);
mSpawnRange.ParseData(aStream);
mFadeInRange.ParseData(aStream);
mFadeOutRange.ParseData(aStream);
2025-09-10 21:58:26 -04:00
mSpawnFrustumCullRadius = aStream->ParseSingle(QString("%1 spawn frustum cull radius").arg(GetName()));
2025-09-07 23:12:05 -04:00
mSpawnDelayMsec.ParseData(aStream);
mLifeSpanMsec.ParseData(aStream);
2025-09-10 21:58:26 -04:00
2025-09-07 23:12:05 -04:00
for (int i = 0; i < 3; i++)
mSpawnOrigin[i].ParseData(aStream);
2025-09-10 21:58:26 -04:00
2025-09-07 23:12:05 -04:00
mSpawnOffsetRadius.ParseData(aStream);
mSpawnOffsetHeight.ParseData(aStream);
2025-09-10 21:58:26 -04:00
2025-09-07 23:12:05 -04:00
for (int i = 0; i < 3; i++)
mSpawnAngles[i].ParseData(aStream);
2025-09-10 21:58:26 -04:00
2025-09-07 23:12:05 -04:00
for (int i = 0; i < 3; i++)
mAngularVelocity[i].ParseData(aStream);
2025-09-10 21:58:26 -04:00
2025-09-07 23:12:05 -04:00
mInitialRotation.ParseData(aStream);
mGravity.ParseData(aStream);
mReflectionFactor.ParseData(aStream);
mAtlas.ParseData(aStream);
qint32 velSamplesPtr, visSamplesPtr;
2025-09-10 21:58:26 -04:00
mElemType = aStream->ParseUInt8(QString("%1 elem type").arg(GetName()));
mVisualCount = aStream->ParseUInt8(QString("%1 visual count").arg(GetName()));
mVelIntervalCount = aStream->ParseUInt8(QString("%1 vel interval count").arg(GetName()));
mVisStateIntervalCount = aStream->ParseUInt8(QString("%1 vis state interval count").arg(GetName()));
velSamplesPtr = aStream->ParseInt32(QString("%1 vel samples ptr").arg(GetName()));
visSamplesPtr = aStream->ParseInt32(QString("%1 vis samples ptr").arg(GetName()));
2025-09-07 23:12:05 -04:00
mVisuals.ParseData(aStream);
2025-09-10 21:58:26 -04:00
mCollMins.setX(aStream->ParseSingle(QString("%1 coll mins x").arg(GetName())));
mCollMins.setY(aStream->ParseSingle(QString("%1 coll mins y").arg(GetName())));
mCollMins.setZ(aStream->ParseSingle(QString("%1 coll mins z").arg(GetName())));
mCollMaxs.setX(aStream->ParseSingle(QString("%1 coll maxs x").arg(GetName())));
mCollMaxs.setY(aStream->ParseSingle(QString("%1 coll maxs y").arg(GetName())));
mCollMaxs.setZ(aStream->ParseSingle(QString("%1 coll maxs z").arg(GetName())));
2025-09-07 23:12:05 -04:00
mEffectOnImpact.ParseData(aStream);
mEffectOnDeath.ParseData(aStream);
mEffectEmitted.ParseData(aStream);
mEmitDist.ParseData(aStream);
mEmitDistVariance.ParseData(aStream);
qint32 trailDefPtr;
2025-09-10 21:58:26 -04:00
trailDefPtr = aStream->ParseInt32(QString("%1 trail def ptr").arg(GetName()));
mSortOrder = aStream->ParseUInt8(QString("%1 sort order").arg(GetName()));
mLightingFrac = aStream->ParseUInt8(QString("%1 lighting frac").arg(GetName()));
mUseItemClip = aStream->ParseUInt8(QString("%1 use item clip").arg(GetName()));
2025-09-07 23:12:05 -04:00
aStream->skipRawData(1);
if (velSamplesPtr)
{
for (int i = 0; i < mVelIntervalCount + 1; i++)
{
XFxElemVelStateSample newVelSample;
newVelSample.ParseData(aStream);
mVelSamples.append(newVelSample);
}
}
if (visSamplesPtr)
{
for (int i = 0; i < mVisStateIntervalCount + 1; i++)
{
XFxElemVisStateSample newVisSample;
newVisSample.ParseData(aStream);
mVisSamples.append(newVisSample);
}
}
// TODO: Finish this ugh
2025-09-03 13:04:54 -04:00
}