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
|
|
|
}
|