Update XFxElemDef parsing logic

This commit is contained in:
njohnson 2025-09-07 23:12:05 -04:00
parent 00618f8081
commit 0da6a4aee7

View File

@ -1,5 +1,4 @@
#include "xfxelemdef.h"
#include "xfxtraildef.h"
XFxElemDef::XFxElemDef()
: XAsset()
@ -11,11 +10,11 @@ XFxElemDef::XFxElemDef()
, mSpawnFrustumCullRadius(0)
, mSpawnDelayMsec()
, mLifeSpanMsec()
, mSpawnOrigin()
, mSpawnOrigin(3)
, mSpawnOffsetRadius()
, mSpawnOffsetHeight()
, mSpawnAngles()
, mAngularVelocity()
, mSpawnAngles(3)
, mAngularVelocity(3)
, mInitialRotation()
, mGravity()
, mReflectionFactor()
@ -36,8 +35,7 @@ XFxElemDef::XFxElemDef()
, mEffectEmitted()
, mEmitDist()
, mEmitDistVariance()
, mTrailDefPtr(0)
, mTrailDef(new XFxTrailDef())
, mTrailDef()
, mSortOrder(0)
, mLightingFrac(0)
, mUseItemClip(0)
@ -85,8 +83,7 @@ void XFxElemDef::Clear()
mEffectEmitted.Clear();
mEmitDist.Clear();
mEmitDistVariance.Clear();
mTrailDefPtr = 0;
mTrailDef->Clear();
mTrailDef.Clear();
mSortOrder = 0;
mLightingFrac = 0;
mUseItemClip = 0;
@ -94,5 +91,90 @@ void XFxElemDef::Clear()
void XFxElemDef::ParseData(QDataStream *aStream)
{
*aStream >> mFlags;
mSpawn.ParseData(aStream);
mSpawnRange.ParseData(aStream);
mFadeInRange.ParseData(aStream);
mFadeOutRange.ParseData(aStream);
*aStream >> mSpawnFrustumCullRadius;
mSpawnDelayMsec.ParseData(aStream);
mLifeSpanMsec.ParseData(aStream);
for (int i = 0; i < 3; i++)
{
mSpawnOrigin[i].ParseData(aStream);
}
mSpawnOffsetRadius.ParseData(aStream);
mSpawnOffsetHeight.ParseData(aStream);
for (int i = 0; i < 3; i++)
{
mSpawnAngles[i].ParseData(aStream);
}
for (int i = 0; i < 3; i++)
{
mAngularVelocity[i].ParseData(aStream);
}
mInitialRotation.ParseData(aStream);
mGravity.ParseData(aStream);
mReflectionFactor.ParseData(aStream);
mAtlas.ParseData(aStream);
qint32 velSamplesPtr, visSamplesPtr;
*aStream
>> mElemType
>> mVisualCount
>> mVelIntervalCount
>> mVisStateIntervalCount
>> velSamplesPtr
>> visSamplesPtr;
mVisuals.ParseData(aStream);
*aStream
>> mCollMins[0]
>> mCollMins[1]
>> mCollMins[2]
>> mCollMaxs[0]
>> mCollMaxs[1]
>> mCollMaxs[2];
mEffectOnImpact.ParseData(aStream);
mEffectOnDeath.ParseData(aStream);
mEffectEmitted.ParseData(aStream);
mEmitDist.ParseData(aStream);
mEmitDistVariance.ParseData(aStream);
mEffectOnImpact.ParseData(aStream);
qint32 trailDefPtr;
*aStream
>> trailDefPtr
>> mSortOrder
>> mLightingFrac
>> mUseItemClip;
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
}