hgeparticle.h
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:4k
- /*
- ** Haaf's Game Engine 1.5
- ** Copyright (C) 2003-2004, Relish Games
- ** hge.relishgames.com
- **
- ** hgeParticleSystem helper class header
- */
- #ifndef HGEPARTICLE_H
- #define HGEPARTICLE_H
- #include "hge.h"
- #include "hgesprite.h"
- #include "hgevector.h"
- #include "hgecolor.h"
- #include "hgerect.h"
- #define MAX_PARTICLES 500
- #define MAX_PSYSTEMS 100
- struct hgeParticle
- {
- hgeVector vecLocation;
- hgeVector vecVelocity;
- float fGravity;
- float fRadialAccel;
- float fTangentialAccel;
- float fSpin;
- float fSpinDelta;
- float fSize;
- float fSizeDelta;
- hgeColor colColor; // + alpha
- hgeColor colColorDelta;
- float fAge;
- float fTerminalAge;
- };
- struct hgeParticleSystemInfo
- {
- hgeSprite* sprite; // texture + blend mode
- int nEmission; // particles per sec
- float fLifetime;
- float fParticleLifeMin;
- float fParticleLifeMax;
- float fDirection;
- float fSpread;
- bool bRelative;
- float fSpeedMin;
- float fSpeedMax;
- float fGravityMin;
- float fGravityMax;
- float fRadialAccelMin;
- float fRadialAccelMax;
- float fTangentialAccelMin;
- float fTangentialAccelMax;
- float fSizeStart;
- float fSizeEnd;
- float fSizeVar;
- float fSpinStart;
- float fSpinEnd;
- float fSpinVar;
- hgeColor colColorStart; // + alpha
- hgeColor colColorEnd;
- float fColorVar;
- float fAlphaVar;
- };
- class hgeParticleSystem
- {
- public:
- hgeParticleSystemInfo info;
-
- hgeParticleSystem(const char *filename, hgeSprite *sprite, float fps=0.0f);
- hgeParticleSystem(hgeParticleSystemInfo *psi, float fps=0.0f);
- hgeParticleSystem(const hgeParticleSystem &ps);
- ~hgeParticleSystem() { hge->Release(); }
- hgeParticleSystem& operator= (const hgeParticleSystem &ps);
- void Render();
- void FireAt(float x, float y);
- void Fire();
- void Stop(bool bKillParticles=false);
- void Update(float fDeltaTime);
- void MoveTo(float x, float y, bool bMoveParticles=false);
- void Transpose(float x, float y) { fTx=x; fTy=y; }
- void TrackBoundingBox(bool bTrack) { bUpdateBoundingBox=bTrack; }
- int GetParticlesAlive() const { return nParticlesAlive; }
- float GetAge() const { return fAge; }
- void GetPosition(float *x, float *y) const { *x=vecLocation.x; *y=vecLocation.y; }
- void GetTransposition(float *x, float *y) const { *x=fTx; *y=fTy; }
- hgeRect* GetBoundingBox(hgeRect *rect) const { memcpy(rect, &rectBoundingBox, sizeof(hgeRect)); return rect; }
- private:
- hgeParticleSystem();
- void _update(float fDeltaTime);
- static HGE *hge;
- float fUpdSpeed;
- float fResidue;
- float fAge;
- float fEmissionResidue;
- hgeVector vecPrevLocation;
- hgeVector vecLocation;
- float fTx, fTy;
- int nParticlesAlive;
- hgeRect rectBoundingBox;
- bool bUpdateBoundingBox;
- hgeParticle particles[MAX_PARTICLES];
- };
- class hgeParticleManager
- {
- public:
- hgeParticleManager(float fps=0.0f);
- ~hgeParticleManager();
- void Update(float dt);
- void Render();
- hgeParticleSystem* SpawnPS(hgeParticleSystemInfo *psi, float x, float y);
- bool IsPSAlive(hgeParticleSystem *ps) const;
- void Transpose(float x, float y);
- void GetTransposition(float *dx, float *dy) const {*dx=tX; *dy=tY;}
- void KillPS(hgeParticleSystem *ps);
- void KillAll();
- private:
- hgeParticleManager(const hgeParticleManager &);
- hgeParticleManager& operator= (const hgeParticleManager &);
- float fFPS;
- int nPS;
- float tX;
- float tY;
- hgeParticleSystem* psList[MAX_PSYSTEMS];
- };
- #endif