📄 particle.h
字号:
//--------------------------------------------------
// Desc: Particle
// Date: 2006.11.9 /update
// Author: hge.relishgames.com
//
// Copyright (C) 2003-2004, Relish Games
//
// ADD: particle位置变化
//
//--------------------------------------------------
#ifndef _PARTICLE_
#define _PARTICLE_
#include <Windows.h>
#include "Vector2D.h"
#define MAX_PARTICLES 500
#define MAX_PSYSTEMS 100
struct Particle
{
Vector2D vecLocation;
Vector2D vecVelocity;
float fGravity;
float fRadialAccel;
float fTangentialAccel;
float fSpin;
float fSpinDelta;
float fSize;
float fSizeDelta;
float fAColor;
float fRColor;
float fGColor;
float fBColor;
float fADelta;
float fRDelta;
float fGDelta;
float fBDelta;
float fAge;
float fTerminalAge;
};
struct ParticleSystemInfo
{
float fEmission; // particles per sec
int EmissionNum;
float fLifetime;
//2006_11_21------------
float fXPosMin;
float fXPosMax;
float fYPosMin;
float fYPosMax;
//----------------------
float fParticleLifeMin;
float fParticleLifeMax;
float fDirection;
float fSpread;
int Relative;
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;
DWORD dwColorStart; // + alpha
DWORD dwColorEnd;
float fColorVar;
float fAlphaVar;
};
class ASE_DLL ParticleSystem
{
public:
ParticleSystemInfo info;
ParticleSystem();
ParticleSystem(char *filename, DWORD htex);
ParticleSystem(ParticleSystemInfo *pPsi, DWORD htex);
~ParticleSystem();
void SetSystem(ParticleSystemInfo *pPsi, DWORD htex);
void LoadIniFile(const char *Inifile);
void Render();
void FireAt(float x, float y);
void Fire();
void Stop(bool bKillParticles = false);
void Update();
void MoveTo(float x, float y, bool bMoveParticles = false);
void Transpose(float x, float y) { fTx=x; fTy=y; }
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; }
private:
void Update(float fDeltaTime);
float fUpdSpeed;
float fResidue;
DWORD dwUpdatetm;
Vector2D vecPrevLocation;
Vector2D vecLocation;
float fTx, fTy;
float fEmissionResidue;
int nParticlesAlive;
float fAge;
DWORD hHandle;
Particle particles[MAX_PARTICLES];
};
class ASE_DLL ParticleManager
{
public:
ParticleManager();
~ParticleManager();
void Update(void);
void Render(void);
bool IsPSAlive(const ParticleSystem *ps);
void Transpose(float x, float y);
void GetTransposition(float *dx, float *dy) const { *dx = tX; *dy = tY; }
void RemovePS(const ParticleSystem *ps);
void RemoveAll();
ParticleSystem* AddPS(const char *pFileName);
private:
int nPS;
float tX;
float tY;
ParticleSystem* psList[MAX_PSYSTEMS];
};
#endif // _PARTICLE_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -