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

204 lines
5.5 KiB
C

#ifndef AVH_PARTICLE_TEMPLATE_H
#define AVH_PARTICLE_TEMPLATE_H
//
// Describes a type of particle system
// Exists both on client and server
// Reads and writes from network stream
// A list of these are created on the server after parsing modname.ps and mapname.ps
// They are sent to the client on connect (they don't change during the game)
// Order of list is identical on both client and server
// Data and networking only, no particle behavior
//
#include "types.h"
//#include "utils/common/mathlib.h"
class AvHParticleTemplateList;
// Data only, no behavior
typedef enum
{
PS_Point = 0, // Single point
PS_Line = 1, // Line segment
PS_Triangle = 2, // Triangle
PS_Plane = 3, // Arbitrarily-oriented plane
PS_Box = 4, // Axis-aligned box
PS_Sphere = 5, // Sphere
PS_Cylinder = 6, // Cylinder
PS_Cone = 7, // Cone
PS_Blob = 8, // Gaussian blob
PS_Disc = 9, // Arbitrarily-oriented disc
PS_Rectangle = 10, // Rhombus-shaped planar region
PS_None = 11
} ParticleShape;
typedef char ShapeType;
typedef int32 ParticleParams[8];
typedef float PSVector[3];
class AvHParticleTemplate
{
public:
AvHParticleTemplate();
//AvHParticleTemplate(const AvHParticleTemplate& inTemplate);
const string& GetName() const;
void SetName(const string& inName);
uint32 GetMaxParticles() const;
void SetMaxParticles(uint32 inMaxParticles);
float GetParticleSize() const;
void SetParticleSize(float inSize);
float GetParticleSystemLifetime() const;
void SetParticleSystemLifetime(float inNewLifetime);
float GetParticleLifetime() const;
void SetParticleLifetime(float inNewLifetime);
string GetSprite() const;
void SetSprite(string inSpriteName); //@2014
ShapeType GetGenerationShape() const;
void SetGenerationShape(ShapeType inShape);
string GetGenerationEntityName() const;
void SetGenerationEntityName(const string& inName);
string GetParticleSystemToGenerate() const;
void SetParticleSystemToGenerate(const string& inName);
int GetParticleSystemIndexToGenerate() const;
void SetParticleSystemIndexToGenerate(int inIndex);
int GetGenerationEntityIndex() const;
void SetGenerationEntityIndex(int inIndex);
const float GetGenerationEntityParameter() const;
void SetGenerationEntityParameter(float inEntityParameter);
ShapeType GetStartingVelocityShape() const;
void SetStartingVelocityShape(ShapeType inShape);
void GetGenerationParams(ParticleParams& outParams) const;
void SetGenerationParams(const ParticleParams& inParms);
void GetStartingVelocityParams(ParticleParams& outParams) const;
void SetStartingVelocityParams(const ParticleParams& inParms);
//int GetInitialParticles() const;
//void SetInitialParticles(int inInitialParticles);
uint32 GetGenerationRate() const;
void SetGenerationRate(uint32 inGenRate);
bool GetFadeIn() const;
bool GetFadeOut() const;
bool GetUseDensity() const;
bool GetUseWorldGravity() const;
bool GetUseTrisNotQuads() const;
bool GetMinimizeEdges() const;
bool GetConstrainPitch() const;
bool GetCollide() const;
bool GetHighDetailOnly() const;
bool GetFaceUp() const;
int GetFlags() const;
void SetFlags(int inFlags);
void GetGravity(PSVector& outGravity) const;
void SetGravity(const PSVector& inGravity);
float GetAnimationSpeed() const;
void SetAnimationSpeed(float inSpeed);
int GetNumSpriteFrames(void) const;
void SetNumSpriteFrames(int inFrames);
float GetParticleScaling() const;
void SetParticleScaling(float inScaling);
int GetRenderMode(void) const;
void SetRenderMode(int inRenderMode);
float GetMaxAlpha() const;
void SetMaxAlpha(float inMaxAlpha);
virtual bool operator==(const AvHParticleTemplate& other) const;
virtual void operator=(const AvHParticleTemplate& other);
private:
string mName;
uint32 mMaxParticles;
PSVector mBaseColor;
string mSprite;
float mParticleSize;
float mParticleSystemLifetime;
float mParticleLifetime;
PSVector mGravity;
uint32 mGenerationRate;
ShapeType mGenerationShape;
ParticleParams mGenerationParams;
int mGenerationEntityIndex;
float mGenerationEntityParameter;
string mGenerationEntityName;
ShapeType mStartingVelocityShape;
ParticleParams mStartingVelocityParams;
ShapeType mDeathShape;
ParticleParams mDeathParams;
ShapeType mCollisionShape;
ParticleParams mCollisionParams;
float mMinSpeed;
float mMaxSpeed;
int mNumSpriteFrames;
float mAnimationSpeed;
float mParticleScaling;
int mRenderMode;
float mMaxAlpha;
//int mInitialParticles;
bool mFadeIn;
int mFlags;
string mParticleSystemToGenerate;
int mParticleSystemIndexToGenerate;
};
// the template list creates all templates
class AvHParticleTemplateList
{
public:
AvHParticleTemplateList();
virtual void Clear();
int CreateTemplateFromIndex(int inBaseIndex = -1);
AvHParticleTemplate* GetTemplateAtIndex(uint32 inIndex);
const AvHParticleTemplate* GetTemplateAtIndex(uint32 inIndex) const;
bool GetTemplateIndexWithName(const string& inName, uint32& outIndex) const;
uint32 GetNumberTemplates() const;
protected:
typedef map<int, AvHParticleTemplate> ParticleTemplateListType;
ParticleTemplateListType mTemplateList;
};
#endif