NS/main/source/mod/AvHParticleTemplate.cpp
2014-12-16 14:36:27 +01:00

590 lines
14 KiB
C++

#include <string.h>
#include "../util/nowarnings.h"
#include "AvHParticleTemplate.h"
#include "../common/renderingconst.h"
AvHParticleTemplate::AvHParticleTemplate()
{
// Populate with reasonable defaults
this->mMaxParticles = 10;
this->mParticleSize = 1.0f;
this->mBaseColor[0] = this->mBaseColor[1] = this->mBaseColor[2] = 1.0f;
this->mGravity[0] = this->mGravity[1] = this->mGravity[2] = 0.0f;
this->mGenerationShape = PS_Point;
memset(&this->mGenerationParams, 0, sizeof(this->mGenerationParams));
this->mDeathShape = PS_None;
memset(&this->mDeathParams, 0, sizeof(this->mDeathParams));
this->mCollisionShape = PS_None;
memset(&this->mCollisionParams, 0, sizeof(this->mCollisionParams));
this->mStartingVelocityShape = PS_None;
memset(&this->mStartingVelocityParams, 0, sizeof(this->mStartingVelocityParams));
this->mMinSpeed = 0.0f;
this->mMaxSpeed = 100.0f;
this->mParticleSystemLifetime = -1;
this->mParticleLifetime = -1;
this->mNumSpriteFrames = 1;
this->mAnimationSpeed = 1.0f;
this->mParticleScaling = 1.0f;
this->mRenderMode = (int)kRenderNormal;
//this->mInitialParticles = 0;
this->mMaxAlpha = 1.0f;
this->mFadeIn = false;
this->mGenerationEntityParameter = 0.0f;
this->mGenerationEntityIndex = -1;
this->mFlags = 0;
this->mParticleSystemIndexToGenerate = -1;
}
//AvHParticleTemplate::AvHParticleTemplate(const AvHParticleTemplate& inTemplate)
//{
// this->mMaxParticles = inTemplate.mMaxParticles;
// this->mName = inTemplate.mName;
// memcpy(&this->mBaseColor, &inTemplate.mBaseColor, sizeof(this->mBaseColor));
// memcpy(&this->mGravity, &inTemplate.mGravity, sizeof(this->mGravity));
//
// this->mGenerationRate = inTemplate.mGenerationRate;
// this->mParticleSize = inTemplate.mParticleSize;
// this->mSprite = inTemplate.mSprite;
//
// this->mGenerationShape = inTemplate.mGenerationShape;
// memcpy(&this->mGenerationParams, &inTemplate.mGenerationParams, sizeof(this->mGenerationParams));
//
// this->mDeathShape = inTemplate.mDeathShape;
// memcpy(&this->mDeathParams, &inTemplate.mDeathParams, sizeof(this->mDeathParams));
//
// this->mCollisionShape = inTemplate.mCollisionShape;
// memcpy(&this->mCollisionParams, &inTemplate.mCollisionParams, sizeof(this->mCollisionParams));
//
// this->mMinSpeed = inTemplate.mMinSpeed;
// this->mMaxParticles = inTemplate.mMaxSpeed;
//}
bool
AvHParticleTemplate::GetFadeIn() const
{
return this->mFlags & 4;
}
bool
AvHParticleTemplate::GetFadeOut() const
{
return this->mFlags & 8;
}
bool
AvHParticleTemplate::GetUseDensity() const
{
return this->mFlags & 2;
}
bool
AvHParticleTemplate::GetUseWorldGravity() const
{
return this->mFlags & 16;
}
bool
AvHParticleTemplate::GetUseTrisNotQuads() const
{
return this->mFlags & 32;
}
bool
AvHParticleTemplate::GetMinimizeEdges() const
{
return this->mFlags & 64;
}
bool
AvHParticleTemplate::GetConstrainPitch() const
{
return this->mFlags & 128;
}
bool
AvHParticleTemplate::GetCollide() const
{
return this->mFlags & 256;
}
bool
AvHParticleTemplate::GetHighDetailOnly() const
{
return this->mFlags & 512;
}
bool
AvHParticleTemplate::GetFaceUp() const
{
return this->mFlags & 1024;
}
int
AvHParticleTemplate::GetFlags() const
{
return this->mFlags;
}
void
AvHParticleTemplate::SetFlags(int inFlags)
{
this->mFlags = inFlags;
}
const string&
AvHParticleTemplate::GetName() const
{
return this->mName;
}
void
AvHParticleTemplate::SetName(const string& inName)
{
this->mName = inName;
}
//int
//AvHParticleTemplate::GetInitialParticles() const
//{
// //return this->mInitialParticles;
// return this->mMaxParticles;
//}
//void
//AvHParticleTemplate::SetInitialParticles(int inInitialParticles)
//{
// if(inInitialParticles < 0)
// inInitialParticles = 0;
//
// this->mInitialParticles = inInitialParticles;
//}
uint32
AvHParticleTemplate::GetMaxParticles() const
{
return this->mMaxParticles;
}
float
AvHParticleTemplate::GetParticleSize() const
{
return this->mParticleSize;
}
float
AvHParticleTemplate::GetParticleSystemLifetime() const
{
return this->mParticleSystemLifetime;
}
void
AvHParticleTemplate::SetParticleSystemLifetime(float inNewLifetime)
{
this->mParticleSystemLifetime = inNewLifetime;
}
float
AvHParticleTemplate::GetParticleLifetime() const
{
return this->mParticleLifetime;
}
void
AvHParticleTemplate::SetParticleLifetime(float inNewLifetime)
{
this->mParticleLifetime = inNewLifetime;
}
void
AvHParticleTemplate::SetMaxParticles(uint32 inMaxParticles)
{
this->mMaxParticles = inMaxParticles;
}
void
AvHParticleTemplate::SetParticleSize(float inSize)
{
this->mParticleSize = inSize;
}
string
AvHParticleTemplate::GetSprite() const
{
return this->mSprite;
}
void
AvHParticleTemplate::SetSprite(string inSpriteName)
{
this->mSprite = inSpriteName;
}
ShapeType
AvHParticleTemplate::GetGenerationShape() const
{
return this->mGenerationShape;
}
void
AvHParticleTemplate::SetGenerationShape(ShapeType inShape)
{
this->mGenerationShape = inShape;
}
string
AvHParticleTemplate::GetGenerationEntityName() const
{
return this->mGenerationEntityName;
}
void
AvHParticleTemplate::SetGenerationEntityName(const string& inName)
{
this->mGenerationEntityName = inName;
}
string
AvHParticleTemplate::GetParticleSystemToGenerate() const
{
return this->mParticleSystemToGenerate;
}
void
AvHParticleTemplate::SetParticleSystemToGenerate(const string& inName)
{
this->mParticleSystemToGenerate = inName;
}
int
AvHParticleTemplate::GetParticleSystemIndexToGenerate() const
{
return this->mParticleSystemIndexToGenerate;
}
void
AvHParticleTemplate::SetParticleSystemIndexToGenerate(int inIndex)
{
this->mParticleSystemIndexToGenerate = inIndex;
}
int
AvHParticleTemplate::GetGenerationEntityIndex() const
{
return this->mGenerationEntityIndex;
}
void
AvHParticleTemplate::SetGenerationEntityIndex(int inIndex)
{
this->mGenerationEntityIndex = inIndex;
}
const float
AvHParticleTemplate::GetGenerationEntityParameter() const
{
return this->mGenerationEntityParameter;
}
void
AvHParticleTemplate::SetGenerationEntityParameter(float inEntityParameter)
{
this->mGenerationEntityParameter = inEntityParameter;
}
void
AvHParticleTemplate::GetGenerationParams(ParticleParams& outParams) const
{
memcpy(outParams, this->mGenerationParams, sizeof(ParticleParams));
}
void
AvHParticleTemplate::SetGenerationParams(const ParticleParams& inParms)
{
memcpy(this->mGenerationParams, inParms, sizeof(inParms));
}
uint32
AvHParticleTemplate::GetGenerationRate() const
{
return this->mGenerationRate;
}
void
AvHParticleTemplate::SetGenerationRate(uint32 inGenRate)
{
this->mGenerationRate = inGenRate;
}
void
AvHParticleTemplate::GetGravity(PSVector& outGravity) const
{
memcpy(&outGravity, &this->mGravity, sizeof(PSVector));
}
void
AvHParticleTemplate::SetGravity(const PSVector& inGravity)
{
memcpy(&this->mGravity, &inGravity, sizeof(inGravity));
}
float
AvHParticleTemplate::GetAnimationSpeed() const
{
return this->mAnimationSpeed;
}
void
AvHParticleTemplate::SetAnimationSpeed(float inSpeed)
{
this->mAnimationSpeed = inSpeed;
}
int
AvHParticleTemplate::GetNumSpriteFrames(void) const
{
return this->mNumSpriteFrames;
}
void
AvHParticleTemplate::SetNumSpriteFrames(int inFrames)
{
this->mNumSpriteFrames = inFrames;
}
float
AvHParticleTemplate::GetMaxAlpha() const
{
return this->mMaxAlpha;
}
void
AvHParticleTemplate::SetMaxAlpha(float inMaxAlpha)
{
if(inMaxAlpha > 1.0f)
inMaxAlpha = 1.0f;
if(inMaxAlpha < 0.0f)
inMaxAlpha = 0.0f;
this->mMaxAlpha = inMaxAlpha;
}
float
AvHParticleTemplate::GetParticleScaling() const
{
return this->mParticleScaling;
}
void
AvHParticleTemplate::SetParticleScaling(float inScaling)
{
this->mParticleScaling = inScaling;
}
int
AvHParticleTemplate::GetRenderMode(void) const
{
return this->mRenderMode;
}
void
AvHParticleTemplate::SetRenderMode(int inRenderMode)
{
this->mRenderMode = inRenderMode;
}
ShapeType
AvHParticleTemplate::GetStartingVelocityShape() const
{
return this->mStartingVelocityShape;
}
void
AvHParticleTemplate::SetStartingVelocityShape(ShapeType inShape)
{
this->mStartingVelocityShape = inShape;
}
void
AvHParticleTemplate::GetStartingVelocityParams(ParticleParams& outParams) const
{
memcpy(outParams, this->mStartingVelocityParams, sizeof(ParticleParams));
}
void
AvHParticleTemplate::SetStartingVelocityParams(const ParticleParams& inParms)
{
memcpy(this->mStartingVelocityParams, inParms, sizeof(inParms));
}
void AvHParticleTemplate::operator=(const AvHParticleTemplate& other)
{
this->mName = other.mName;
this->mMaxParticles = other.mMaxParticles;
memcpy(this->mBaseColor, other.mBaseColor, sizeof(PSVector));
this->mSprite = other.mSprite;
this->mParticleSize = other.mParticleSize;
this->mParticleSystemLifetime = other.mParticleSystemLifetime;
this->mParticleLifetime = other.mParticleLifetime;
memcpy(this->mGravity, other.mGravity, sizeof(PSVector));
this->mGenerationRate = other.mGenerationRate;
this->mGenerationShape = other.mGenerationShape;
memcpy(this->mGenerationParams, other.mGenerationParams, sizeof(ParticleParams));
this->mGenerationEntityIndex = other.mGenerationEntityIndex;
this->mGenerationEntityParameter = other.mGenerationEntityParameter;
this->mGenerationEntityName = other.mGenerationEntityName;
this->mStartingVelocityShape = other.mStartingVelocityShape;
memcpy(this->mStartingVelocityParams, other.mStartingVelocityParams, sizeof(ParticleParams));
this->mDeathShape = other.mDeathShape;
memcpy(this->mDeathParams, other.mDeathParams, sizeof(ParticleParams));
this->mCollisionShape = other.mCollisionShape;
memcpy(this->mCollisionParams, other.mCollisionParams, sizeof(ParticleParams));
this->mMinSpeed = other.mMinSpeed;
this->mMaxSpeed = other.mMaxSpeed;
this->mNumSpriteFrames = other.mNumSpriteFrames;
this->mAnimationSpeed = other.mAnimationSpeed;
this->mParticleScaling = other.mParticleScaling;
this->mRenderMode = other.mRenderMode;
this->mMaxAlpha = other.mMaxAlpha;
this->mFadeIn = other.mFadeIn;
this->mFlags = other.mFlags;
this->mParticleSystemToGenerate = other.mParticleSystemToGenerate;
this->mParticleSystemIndexToGenerate = other.mParticleSystemIndexToGenerate;
}
bool AvHParticleTemplate::operator==(const AvHParticleTemplate& other) const
{
bool result=false;
if ( this->mName == other.mName &&
this->mMaxParticles == other.mMaxParticles &&
this->mBaseColor == other.mBaseColor &&
this->mSprite == other.mSprite &&
this->mParticleSize == other.mParticleSize &&
this->mParticleSystemLifetime == other.mParticleSystemLifetime &&
this->mParticleLifetime == other.mParticleLifetime &&
this->mGravity == other.mGravity &&
this->mGenerationRate == other.mGenerationRate &&
this->mGenerationShape == other.mGenerationShape &&
this->mGenerationParams == other.mGenerationParams &&
this->mGenerationEntityIndex == other.mGenerationEntityIndex &&
this->mGenerationEntityParameter == other.mGenerationEntityParameter &&
this->mGenerationEntityName == other.mGenerationEntityName &&
this->mStartingVelocityShape == other.mStartingVelocityShape &&
this->mStartingVelocityParams == other.mStartingVelocityParams &&
this->mDeathShape == other.mDeathShape &&
this->mDeathParams == other.mDeathParams &&
this->mCollisionShape == other.mCollisionShape &&
this->mCollisionParams == other.mCollisionParams &&
this->mMinSpeed == other.mMinSpeed &&
this->mMaxSpeed == other.mMaxSpeed &&
this->mNumSpriteFrames == other.mNumSpriteFrames &&
this->mAnimationSpeed == other.mAnimationSpeed &&
this->mParticleScaling == other.mParticleScaling &&
this->mRenderMode == other.mRenderMode &&
this->mMaxAlpha == other.mMaxAlpha &&
this->mFadeIn == other.mFadeIn &&
this->mFlags == other.mFlags &&
this->mParticleSystemToGenerate == other.mParticleSystemToGenerate &&
this->mParticleSystemIndexToGenerate == other.mParticleSystemIndexToGenerate )
result=true;
return result;
}
AvHParticleTemplateList::AvHParticleTemplateList()
{
}
void
AvHParticleTemplateList::Clear()
{
//for(ParticleTemplateListType::iterator theIter = this->mTemplateList.begin(); theIter != this->mTemplateList.end(); theIter++)
if ( this->mTemplateList.size() > 0 )
this->mTemplateList.erase(this->mTemplateList.begin(), this->mTemplateList.end());
}
int
AvHParticleTemplateList::CreateTemplateFromIndex(int inBaseIndex)
{
AvHParticleTemplate theNewTemplate;
if(inBaseIndex != -1)
{
ASSERT(inBaseIndex >= 0);
ASSERT(inBaseIndex < (signed)this->mTemplateList.size());
theNewTemplate = this->mTemplateList[inBaseIndex];
}
int theNewIndex = (int)this->mTemplateList.size();
this->mTemplateList[theNewIndex]=theNewTemplate;
return theNewIndex;
}
AvHParticleTemplate*
AvHParticleTemplateList::GetTemplateAtIndex(uint32 inIndex)
{
AvHParticleTemplate* theTemplate = NULL;
if(inIndex < this->mTemplateList.size())
{
theTemplate = &(this->mTemplateList[inIndex]);
}
return theTemplate;
}
const AvHParticleTemplate*
AvHParticleTemplateList::GetTemplateAtIndex(uint32 inIndex) const
{
const AvHParticleTemplate* theTemplate = NULL;
ParticleTemplateListType::const_iterator theIter=this->mTemplateList.find(inIndex);
if(theIter != this->mTemplateList.end() )
{
theTemplate = &(theIter->second);
}
return theTemplate;
}
bool
AvHParticleTemplateList::GetTemplateIndexWithName(const string& inName, uint32& outIndex) const
{
bool theSuccess = false;
uint32 theIndex = 0;
ParticleTemplateListType::const_iterator theIter;
for(theIter = this->mTemplateList.begin(); theIter != this->mTemplateList.end(); theIter++, theIndex++)
{
if(theIter->second.GetName() == inName)
{
outIndex = theIndex;
theSuccess = true;
break;
}
}
return theSuccess;
}
uint32
AvHParticleTemplateList::GetNumberTemplates() const
{
return (uint32)this->mTemplateList.size();
}