forked from 0ad/0ad
Ykkrosh
d39a4fac21
# Attempted to make compilation faster by including as little as possible in some .h files, and moving it into .cpp. Fixed BaseTechCollection memory leak. This was SVN commit r3992.
147 lines
4.4 KiB
C++
147 lines
4.4 KiB
C++
/////////////////////////////////////////////////////
|
|
// File Name: ParticleEngine.h
|
|
// Date: 6/29/05
|
|
// Author: Will Dull
|
|
// Purpose: The particle engine system.
|
|
// controls and maintain particles
|
|
// through emitters that are passed
|
|
// into each of the main functions.
|
|
/////////////////////////////////////////////////////
|
|
|
|
#ifndef _PARTICLEENGINE_H_
|
|
#define _PARTICLEENGINE_H_
|
|
|
|
#include "ParticleEmitter.h"
|
|
#include "lib/res/graphics/tex.h"
|
|
#include "lib/res/graphics/ogl_tex.h"
|
|
#include "graphics/Texture.h"
|
|
|
|
#include "ps/CLogger.h"
|
|
#include "ps/Loader.h"
|
|
|
|
#include "lib/ogl.h"
|
|
#include "renderer/Renderer.h"
|
|
|
|
// Different textures
|
|
enum PText { DEFAULTTEXT, MAX_TEXTURES };
|
|
// Different emitters
|
|
enum PEmit { DEFAULTEMIT, MAX_EMIT };
|
|
|
|
class CParticleEngine
|
|
{
|
|
public:
|
|
virtual ~CParticleEngine(void);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: GetInstance
|
|
//Date: 8/1/05
|
|
//Author: Will Dull
|
|
//Purpose: returns the instance of the singleton class
|
|
//////////////////////////////////////////////////////////////
|
|
static CParticleEngine* GetInstance();
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: DeleteInstance
|
|
//Date: 8/1/05
|
|
//Author: Will Dull
|
|
//Purpose: deletes the instance of the singleton class
|
|
//////////////////////////////////////////////////////////////
|
|
static void DeleteInstance();
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: initParticleSystem
|
|
//Date: 6/29/05
|
|
//Author: Will Dull
|
|
//Out: True if particle system initialized correctly,
|
|
// false otherwise
|
|
//Purpose: inits particle system.
|
|
//////////////////////////////////////////////////////////////
|
|
bool initParticleSystem(void);
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: addEmitter
|
|
//Date: 7/20/05
|
|
//Author: Will Dull
|
|
//In: emitter to add, texture type, id of emitter
|
|
//Out: True if emitter added correctly,
|
|
// false otherwise
|
|
//Purpose: adds the emitter to the engines list
|
|
//////////////////////////////////////////////////////////////
|
|
bool addEmitter(CEmitter *emitter, int type = DEFAULTTEXT, int ID = DEFAULTEMIT);
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: findEmitter
|
|
//Date: 7/21/05
|
|
//Author: Will Dull
|
|
//In: id of emitter to find
|
|
//Out: the emitter if found,
|
|
// NULL otherwise
|
|
//Purpose: finds the emitter using its ID
|
|
//////////////////////////////////////////////////////////////
|
|
CEmitter* findEmitter(int ID);
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: updateEmitters
|
|
//Date: 7/20/05
|
|
//Author: Will Dull
|
|
//Purpose: Checks if the emitter is ready to be deleted
|
|
// and removed. If not it calls the emitters update
|
|
// function.
|
|
//////////////////////////////////////////////////////////////
|
|
void updateEmitters();
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: renderParticles
|
|
//Date: 7/20/05
|
|
//Author: Will Dull
|
|
//Purpose: Renders the emitter and all it's particles
|
|
//////////////////////////////////////////////////////////////
|
|
void renderParticles();
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: destroyAllEmitters
|
|
//Date: 8/1/05
|
|
//Author: Will Dull
|
|
//In: fade - if true, will allow the emitter to fade itself out
|
|
// if false, emitter and particles will disappear instantly
|
|
//Purpose: Destroys every active emitter on screen.
|
|
//////////////////////////////////////////////////////////////
|
|
void destroyAllEmitters(bool fade = true);
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Func Name: cleanup
|
|
//Date: 8/3/05
|
|
//Author: Will Dull
|
|
//Purpose: Any cleanup not done in the destructor.
|
|
//////////////////////////////////////////////////////////////
|
|
void cleanup();
|
|
|
|
void EnterParticleContext(void);
|
|
void LeaveParticleContext(void);
|
|
|
|
int getTotalParticles() { return totalParticles; }
|
|
void SetTotalParticles(int particles) { totalParticles = particles; }
|
|
void AddToTotalParticles(int addAmount) { totalParticles += addAmount; }
|
|
void SubToTotalParticles(int subAmount) { totalParticles -= subAmount; }
|
|
|
|
private:
|
|
CParticleEngine(void);
|
|
static CParticleEngine* m_pInstance; // The singleton instance
|
|
|
|
CTexture idTexture[MAX_TEXTURES];
|
|
int totalParticles; // Total Amount of particles of all emitters.
|
|
|
|
struct tEmitterNode
|
|
{
|
|
CEmitter *pEmitter;
|
|
tEmitterNode *prev, *next;
|
|
int ID;
|
|
};
|
|
|
|
tEmitterNode *m_pHead;
|
|
friend class CEmitter;
|
|
};
|
|
|
|
#endif
|