1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "fsCParticleParameter.h"

#include "fsCParticleParameterModifier.h"


void fsCParticleParameter::finalise(fsS32 pRunningTime)
{
	if (mModifier)
	{
		mVal = mModifier->finalise(pRunningTime, mConstantModifier);
	}
}

void fsCParticleParameter::update(fsS32 pRunningTime, fsS32 pTimeDelta)
{
	if (mModifier)
	{
		mVal += mModifier->update(pRunningTime, pTimeDelta, mConstantModifier);
	}
}

void fsCParticleParameter::initialise()
{
	if (mModifier)
	{
		if (mModifier->constant())
		{
			mConstantModifier = mModifier->initialise();
			mVal = mEmitVal + fsCParticleParameterModifier::rndF32Get(static_cast<fsS32>(mEmitRandomRange));
		}
		else
		{
			mVal = mModifier->initialise();
		}
	}
	else
	{
		mVal = mEmitVal + fsCParticleParameterModifier::rndF32Get(static_cast<fsS32>(mEmitRandomRange));
	}
}

void fsCParticleParameter::randomRangeLoadDo(fsStr& pParamVals)
{
	pParamVals.leadingWhitespaceTrim();
	fsStr val = pParamVals.chomp(" ");
	mEmitVal = mValueLoadFn(val);

	pParamVals.leadingWhitespaceTrim();
	val = pParamVals.chunk();
	fsCParticleParameterModifier::charStrip(pParamVals);
	fsF32 fltRange = mValueLoadFn(pParamVals);
	mEmitVal -= fltRange;
	fltRange *= 2.0f * 1024.0f;
	mEmitRandomRange = fltRange;
}

void fsCParticleParameter::randomRangeLoad(fsStr& pParamVals)
{
	randomRangeLoadDo(pParamVals);
}

void fsCParticleParameter::legacyParameterLoad(fsStr& pFileData)
{
	fsCParticleParameterModifier::charStrip(pFileData);
	fsStr paramVals = pFileData.chomp(";") + ",";
	randomRangeLoad(paramVals);
}

void fsCParticleParameter::legacyParameterDeltaLoad(fsStr& pFileData)
{
	fsCParticleParameterModifier::charStrip(pFileData);
	fsStr paramVals = pFileData.chomp(";") + ",";
	if (!mModifier)
	{
		mModifier = std::make_shared<fsCParticleParameterModifier>(mValueLoadFn);
	}
	mModifier->randomRangeLoad(paramVals);
}

void fsCParticleParameter::parameterLoad(fsStr& pFileData)
{
	fsCParticleParameterModifier::charStrip(pFileData);
	fsStr paramVals = pFileData.chomp(";") + ",";

	if (!mModifier)
	{
		mModifier = std::make_shared<fsCParticleParameterModifier>(mValueLoadFn);
	}
	mModifier->tableLoad(paramVals);
}

fsF32 fsCParticleParameter::valueLoad(fsStr& pParamVals)
{
	fsF32 val;
	pParamVals.leadingWhitespaceTrim();
	val = fsCParticleParameterModifier::f32Get(pParamVals);
	return val;
}

void fsCParticleParameter::copy(fsCParticleParameter* const pClone)<--- Parameter 'pClone' can be declared as pointer to const
{
	mConstantModifier = pClone->mConstantModifier;
	mEmitRandomRange = pClone->mEmitRandomRange;
	mEmitVal = pClone->mEmitVal;
	mModifier = pClone->mModifier;
}

fsCParticleParameter::fsCParticleParameter(fsF32 (*pValueLoadFn)(fsStr& pFileData)) :
	mEmitVal(0.0f),
	mEmitRandomRange(0.0f),
	mVal(0.0f),
	mConstantModifier(0.0f)
{
	if (pValueLoadFn)
	{
		mValueLoadFn = pValueLoadFn;
	}
	else
	{
		mValueLoadFn = valueLoad;
	}
}

fsCParticleParameter::~fsCParticleParameter()
{
}