#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 ParticleTemplateListType; ParticleTemplateListType mTemplateList; }; #endif