⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 particle.h

📁 一个自己写的游戏引擎,用DirectX 写成
💻 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 + -