Particle System
This commit is contained in:
parent
b544487854
commit
bd9e5917df
276
include/ZE_ZBaseParticleSystem.h
Executable file
276
include/ZE_ZBaseParticleSystem.h
Executable file
@ -0,0 +1,276 @@
|
||||
/*******************************************************************************
|
||||
This file is Part of the ZEngine Library for 2D game development.
|
||||
Copyright (C) 2002, 2003 James Turk
|
||||
|
||||
Licensed under a BSD-style license.
|
||||
|
||||
The maintainer of this library is James Turk (james@conceptofzero.net)
|
||||
and the home of this Library is http://www.zengine.sourceforge.net
|
||||
*******************************************************************************/
|
||||
|
||||
/*!
|
||||
\file ZE_ZBaseParticleSystem.h
|
||||
\brief Definition and implementation file for the base of the ZEngine Particle System.
|
||||
|
||||
Definition and implementation file for ZEngine particle system class ZBaseParticleSystem.
|
||||
Due to problems with template classes the template implementation needs to be in the same file as the declaration.
|
||||
<br>$id$<br>
|
||||
\author James Turk
|
||||
**/
|
||||
|
||||
#ifndef __ze_zbaseparticlesystem_h__
|
||||
#define __ze_zbaseparticlesystem_h__
|
||||
|
||||
#include "ZEngine.h"
|
||||
|
||||
namespace ZE
|
||||
{
|
||||
|
||||
/*!
|
||||
\brief Basic particle class for ZEngine particle systems.
|
||||
|
||||
Basic particle class, all particles used should derive from this class so that needed members are available.
|
||||
(No default constructor is needed because NewParticle should initialize members.)
|
||||
**/
|
||||
class ZBaseParticle
|
||||
{
|
||||
public:
|
||||
/*!
|
||||
\brief Virtual destructor.
|
||||
|
||||
Empty virtual destructor to make inheritance safe.
|
||||
**/
|
||||
virtual ~ZBaseParticle()
|
||||
{} // empty definition here, since ZBaseParticleSystem has no cpp file and this would be all that would be in it
|
||||
|
||||
//! X Position of particle.
|
||||
float xPos;
|
||||
//! Y Position of particle.
|
||||
float yPos;
|
||||
//! Energy of particle (particles die if energy is 0).
|
||||
float energy;
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Base particle system, a virtual class defining an outline for a fully functional particle system.
|
||||
|
||||
Virtual class providing outline of basic particle system, designed so that a working particle system can be
|
||||
derived with minimal waste. Uses templated system to allow particle systems to work with their own types of
|
||||
particles, the particleType template parameter must be a type that has the members of ZBaseParticle.
|
||||
(Note: If you need a very specific particle system it's probably best to write your own fit to your needs.)
|
||||
**/
|
||||
template <class particleType>
|
||||
class ZBaseParticleSystem
|
||||
{
|
||||
protected:
|
||||
//! Pointer to ZEngine singleton.
|
||||
ZEngine *rEngine;
|
||||
//! Pointer to array of particles.
|
||||
particleType *rParticles;
|
||||
//! Maximum number of particles, and size of rParticles array.
|
||||
unsigned int rMaxParticles;
|
||||
//! Current number of particles.
|
||||
unsigned int rCurParticles;
|
||||
//! Number of particles to release per second.
|
||||
unsigned int rNumParticlesPerSec;
|
||||
//! Millisecond format time of last update.
|
||||
Uint32 rLastUpdate;
|
||||
|
||||
/*!
|
||||
\brief Adds a new particle.
|
||||
|
||||
Finds room in array with dead particle, and adds new particle using NewParticle, called by Emit.
|
||||
**/
|
||||
void AddParticle();
|
||||
|
||||
/*!
|
||||
\brief Pure virtual function to initialize and return a new particle.
|
||||
|
||||
Pure virtual function, overload should set up a new particle with desired traits, called by AddParticle.
|
||||
**/
|
||||
virtual particleType NewParticle()=0;
|
||||
|
||||
/*!
|
||||
\brief Pure virtual function to update a particle.
|
||||
|
||||
Pure virtual function, overload should update the particle `rParticles[index]`, called by Update.
|
||||
\param index Index of particle in rParticles array to update.
|
||||
\param elapsedTime Decimal portion of a second since last call.
|
||||
**/
|
||||
virtual void UpdateParticle(int index, float elapsedTime)=0;
|
||||
|
||||
public:
|
||||
/*!
|
||||
\brief Basic constructor for ZBaseParticleSystem.
|
||||
|
||||
Basic constructor for ZBaseParticle system, initializes all values to 0.
|
||||
**/
|
||||
ZBaseParticleSystem();
|
||||
|
||||
/*!
|
||||
\brief Virtual destructor for ZBaseParticleSystem.
|
||||
|
||||
Virtual destructor for ZBaseParticleSystem, destroys all particles, virtual to make class inheritance-safe.
|
||||
**/
|
||||
virtual ~ZBaseParticleSystem();
|
||||
|
||||
/*!
|
||||
\brief Pure virtual function, renders the particles.
|
||||
|
||||
Pure virtual so that each particle system can render it's member particles in it's own way.
|
||||
**/
|
||||
virtual void Render()=0;
|
||||
|
||||
/*!
|
||||
\brief Emit a given number of particles.
|
||||
|
||||
Emits a given number of particles, will not emit particles if system is full.
|
||||
\param numParticles Number of particles to emit.
|
||||
**/
|
||||
void Emit(int numParticles);
|
||||
|
||||
/*!
|
||||
\brief Updates status of particle system.
|
||||
|
||||
Updates entire particle system, calling update on every particle, emitting necessary new
|
||||
particles, removing particles which have an energy <= 0 or are off the screen.
|
||||
**/
|
||||
void Update();
|
||||
|
||||
/*!
|
||||
\brief Sets max particles allowed in system.
|
||||
|
||||
Set maximum number of particles allowed in system, particles are not emitted when system is full.
|
||||
When this resizes the array contents are moved to the new array, if it shrinks the array particles may be lost.
|
||||
\param max Maximum number of particles for system.
|
||||
**/
|
||||
void SetMaxParticles(int max);
|
||||
|
||||
/*!
|
||||
\brief Sets release rate of particles.
|
||||
|
||||
Set number of particles to release per second.
|
||||
\param rate Number of particles to release over the duration of one second.
|
||||
**/
|
||||
void SetRate(int rate);
|
||||
};
|
||||
|
||||
//implementation//
|
||||
|
||||
template <class particleType>
|
||||
void ZBaseParticleSystem<particleType>::AddParticle()
|
||||
{
|
||||
//empty space is always at end, function is private so no checking is needed (Emit does that)
|
||||
rParticles[rCurParticles] = NewParticle();
|
||||
++rCurParticles;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
ZBaseParticleSystem<particleType>::ZBaseParticleSystem()
|
||||
{
|
||||
rEngine = ZEngine::GetInstance();
|
||||
rParticles = NULL;
|
||||
rMaxParticles = rCurParticles = rNumParticlesPerSec = 0;
|
||||
rLastUpdate = rEngine->GetTime();
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
ZBaseParticleSystem<particleType>::~ZBaseParticleSystem()
|
||||
{
|
||||
if(rParticles)
|
||||
delete []rParticles;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZBaseParticleSystem<particleType>::Emit(int numParticles)
|
||||
{
|
||||
while(numParticles > 0 && rCurParticles < rMaxParticles)
|
||||
{
|
||||
AddParticle();
|
||||
--numParticles;
|
||||
}
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZBaseParticleSystem<particleType>::Update()
|
||||
{
|
||||
float elapsed = (rEngine->GetTime()-rLastUpdate)/1000.0f;
|
||||
double emitAmount;
|
||||
static double overflow=0;
|
||||
|
||||
//update every particle and remove dead particles
|
||||
for(unsigned int i=0; i < rCurParticles; ++i)
|
||||
{
|
||||
UpdateParticle(i,elapsed);
|
||||
if(rParticles[i].xPos < 0 || rParticles[i].xPos > rEngine->Width()
|
||||
|| rParticles[i].yPos < 0 || rParticles[i].yPos > rEngine->Height() || rParticles[i].energy <= 0)
|
||||
{
|
||||
rParticles[i] = rParticles[--rCurParticles];
|
||||
--i; //go back one to process that particle
|
||||
}
|
||||
}
|
||||
|
||||
rLastUpdate = rEngine->GetTime();
|
||||
|
||||
emitAmount = elapsed*rNumParticlesPerSec;
|
||||
overflow += emitAmount - static_cast<int>(emitAmount); //only floating point portion of emitAmount
|
||||
Emit(static_cast<int>(emitAmount));
|
||||
if(overflow >= .95) //a little lower than one, for tolerance
|
||||
{
|
||||
Emit(1);
|
||||
overflow = 0; //dump & clear overflow
|
||||
}
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZBaseParticleSystem<particleType>::SetMaxParticles(int max)
|
||||
{
|
||||
particleType *temp;
|
||||
unsigned int i;
|
||||
|
||||
if(max)
|
||||
{
|
||||
if(max != rMaxParticles) //only do this if size changed
|
||||
{
|
||||
if(rCurParticles)
|
||||
{
|
||||
rCurParticles %= max;
|
||||
//copy current particles to temp
|
||||
temp = new particleType[rCurParticles];
|
||||
for(i=0; i < rCurParticles; ++i)
|
||||
temp[i] = rParticles[i];
|
||||
}
|
||||
|
||||
//change size of rParticles
|
||||
if(rParticles)
|
||||
delete []rParticles;
|
||||
rParticles = new particleType[max];
|
||||
rMaxParticles = max;
|
||||
|
||||
if(rCurParticles)
|
||||
{
|
||||
//copy particles from temp back to rParticles
|
||||
for(i=0; i < rCurParticles; ++i)
|
||||
rParticles[i] = temp[i];
|
||||
|
||||
delete []temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rMaxParticles = rCurParticles = 0;
|
||||
if(rParticles)
|
||||
delete []rParticles;
|
||||
}
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZBaseParticleSystem<particleType>::SetRate(int rate)
|
||||
{
|
||||
rNumParticlesPerSec = rate;
|
||||
}
|
||||
|
||||
} //namespace ZE
|
||||
|
||||
#endif //__ze_zbaseparticlesystem_h__
|
390
include/ZE_ZSimpleParticleSystem.h
Executable file
390
include/ZE_ZSimpleParticleSystem.h
Executable file
@ -0,0 +1,390 @@
|
||||
/*******************************************************************************
|
||||
This file is Part of the ZEngine Library for 2D game development.
|
||||
Copyright (C) 2002, 2003 James Turk
|
||||
|
||||
Licensed under a BSD-style license.
|
||||
|
||||
The maintainer of this library is James Turk (james@conceptofzero.net)
|
||||
and the home of this Library is http://www.zengine.sourceforge.net
|
||||
*******************************************************************************/
|
||||
|
||||
/*!
|
||||
\file ZE_ZSimpleParticleSystem.h
|
||||
\brief Definition and implementation file for a simple particle system for ZEngine.
|
||||
|
||||
Definition and implementation file for ZEngine simple particle system, ZSimpleParticleSystem based on ZBaseParticleSystem.
|
||||
Due to problems with template classes the template implementation needs to be in the same file as the declaration.
|
||||
<br>$id$<br>
|
||||
\author James Turk
|
||||
**/
|
||||
|
||||
#ifndef __ze_zsimpleparticlesystem_h__
|
||||
#define __ze_zsimpleparticlesystem_h__
|
||||
|
||||
#include "ZEngine.h"
|
||||
|
||||
namespace ZE
|
||||
{
|
||||
|
||||
/*!
|
||||
\brief Simple particle class for ZSimpleParticleSystem.
|
||||
|
||||
General purpose particle, contains needed variables for a functional particle system.
|
||||
**/
|
||||
class ZSimpleParticle : public ZBaseParticle
|
||||
{
|
||||
public:
|
||||
//! Previous X position of particle.
|
||||
float xPrev;
|
||||
//! Previous Y position of particle.
|
||||
float yPrev;
|
||||
//! X Velocity of particle per second.
|
||||
float xVel;
|
||||
//! Y Velocity of particle per second.
|
||||
float yVel;
|
||||
//! Energy change per second.
|
||||
float energyDelta;
|
||||
//! Size of particle.
|
||||
float size;
|
||||
//! Size change per second.
|
||||
float sizeDelta;
|
||||
//! Red component of particle color.
|
||||
Uint8 r;
|
||||
//! Green component of particle color.
|
||||
Uint8 g;
|
||||
//! Blue component of particle color.
|
||||
Uint8 b;
|
||||
//! Alpha component of particle color.
|
||||
Uint8 a;
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief Possible draw styles for ZSimpleParticleSystem.
|
||||
|
||||
Possible draw styles for ZSimpleParticleSystem, each specifies different code with which the particles will be drawn.
|
||||
**/
|
||||
enum ParticleDrawStyle
|
||||
{
|
||||
DS_POINT, /*!< Draw particles as simple points. */
|
||||
DS_LINE, /*!< Draw particles as lines between the current position and the last. */
|
||||
DS_IMAGE /*!< Draw particles as an image. */
|
||||
};
|
||||
|
||||
/*!
|
||||
\brief ZSimpleParticleSystem class, a simple particle system provided originally as an example.
|
||||
|
||||
ZSimpleParticleSystem class, example of implementation of a particle system on top of ZBaseParticleSystem base,
|
||||
designed for flexibility and ease of use over speed. More specific, therefore even less optimized for specific
|
||||
circumstances. Should be concidered usable but not optimal. (Although it is a great source of code for your
|
||||
own implementations.)
|
||||
**/
|
||||
template <class particleType>
|
||||
class ZSimpleParticleSystem : public ZBaseParticleSystem<particleType>
|
||||
{
|
||||
protected:
|
||||
//! Draw style, one of the three enumerated values specifying how particles will be drawn.
|
||||
ParticleDrawStyle rStyle;
|
||||
//! Image to draw (only used if rStyle is DS_IMAGE).
|
||||
ZImage rImage;
|
||||
//! Minimum X value for starting position.
|
||||
float rMinX;
|
||||
//! Maximum X value for starting position.
|
||||
float rMaxX;
|
||||
//! Minimum Y value for starting position.
|
||||
float rMinY;
|
||||
//! Maximum Y value for starting position.
|
||||
float rMaxY;
|
||||
//! Minimum X velocity, particle moves it's velocity every second.
|
||||
float rMinXVel;
|
||||
//! Maximum X velocity, particle moves it's velocity every second.
|
||||
float rMaxXVel;
|
||||
//! Minimum Y velocity, particle moves it's velocity every second.
|
||||
float rMinYVel;
|
||||
//! Maximum Y velocity, particle moves it's velocity every second.
|
||||
float rMaxYVel;
|
||||
//! Minimum starting energy. (Remember particles with energy values <= 0 are removed.)
|
||||
float rMinEnergy;
|
||||
//! Maximum starting energy.
|
||||
float rMaxEnergy;
|
||||
//! Minimum energy change per second.
|
||||
float rMinEnergyDelta;
|
||||
//! Maximum energy change per second.
|
||||
float rMaxEnergyDelta;
|
||||
//! Minimum starting size.
|
||||
float rMinSize;
|
||||
//! Maximum starting size.
|
||||
float rMaxSize;
|
||||
//! Minimum size change per second.
|
||||
float rMinSizeDelta;
|
||||
//! Maximum size change per second.
|
||||
float rMaxSizeDelta;
|
||||
//! Minimum red component of color, 0-255.
|
||||
Uint8 rMinRed;
|
||||
//! Maximum red component of color, 0-255.
|
||||
Uint8 rMaxRed;
|
||||
//! Minimum green component of color, 0-255.
|
||||
Uint8 rMinGreen;
|
||||
//! Maximum green component of color, 0-255.
|
||||
Uint8 rMaxGreen;
|
||||
//! Minimum blue component of color, 0-255.
|
||||
Uint8 rMinBlue;
|
||||
//! Maximum blue component of color, 0-255.
|
||||
Uint8 rMaxBlue;
|
||||
//! Minimum alpha of particle, 0-255.
|
||||
Uint8 rMinAlpha;
|
||||
//! Maximum alpha of particle, 0-255.
|
||||
Uint8 rMaxAlpha;
|
||||
|
||||
/*!
|
||||
\brief Function which creates a new particle.
|
||||
|
||||
Implementation of pure virtual NewParticle from ZBaseParticleSystem, creates a new particle with
|
||||
it's members set to values between their min and max value as set by the system.
|
||||
**/
|
||||
virtual particleType NewParticle();
|
||||
|
||||
/*!
|
||||
\brief Updates a given particle given it's index and the elapsedTime.
|
||||
|
||||
Implementation of pure virtual UpdateParticle from ZBaseParticleSystem, updates a given particle
|
||||
relative to the elapsed time.
|
||||
\param index Index of particle in rParticles array to update.
|
||||
\param elapsedTime Decimal portion of a second since last call.
|
||||
**/
|
||||
virtual void UpdateParticle(int index, float elapsedTime);
|
||||
|
||||
public:
|
||||
/*!
|
||||
\brief Draws all particles.
|
||||
|
||||
Implementation of pure virtual Render from ZBaseParticleSystem, draws all particles in specified
|
||||
ParticleDrawStyle.
|
||||
**/
|
||||
virtual void Render();
|
||||
|
||||
/*!
|
||||
\brief Sets ParticleDrawStyle for this system.
|
||||
|
||||
Sets the method of drawing particles, point, line, or image particles.
|
||||
\param style ParticleDrawStyle for this particle system to use.
|
||||
**/
|
||||
void SetDrawStyle(ParticleDrawStyle style);
|
||||
|
||||
/*!
|
||||
\brief Sets image for particle system.
|
||||
|
||||
Sets image for particle system to use, assuming the drawing style is DS_IMAGE.
|
||||
\brief filename Filename of image to load for the system.
|
||||
**/
|
||||
void SetImage(std::string filename);
|
||||
|
||||
/*!
|
||||
\brief Sets the range of initial positions.
|
||||
|
||||
Sets the range of initial positions for a new particle.
|
||||
\param minX Minimum X coordinate for new particles.
|
||||
\param minY Minimum Y coordinate for new particles.
|
||||
\param maxX Maximum X coordinate for new particles.
|
||||
\param maxY Maximum Y coordinate for new particles.
|
||||
**/
|
||||
void SetPosRange(float minX, float minY, float maxX, float maxY);
|
||||
|
||||
/*!
|
||||
\brief Sets range of velocities for particles.
|
||||
|
||||
Sets range from which a new particle obtains it's random velocity,
|
||||
\param minXVel Minimum X velocity of a particle.
|
||||
\param minYVel Minimum Y velocity of a particle.
|
||||
\param maxXVel Maximum X velocity of a particle.
|
||||
\param maxYVel Maximum Y velocity of a particle.
|
||||
**/
|
||||
void SetVelocityRange(float minXVel, float minYVel, float maxXVel, float maxYVel);
|
||||
|
||||
/*!
|
||||
\brief Sets range of initial energy and energyDelta.
|
||||
|
||||
Sets the possible ranges for a particles starting energy and it's energyDelta. Particles with
|
||||
energy less than or equal to 0 are deleted by ZBaseParticleSystem::Update.
|
||||
\param minEnergy Minimum initial energy.
|
||||
\param maxEnergy Maximum initial energy.
|
||||
\param minEnergyDelta Minimum energy delta.
|
||||
\param maxEnergyDelta Maximum energy delta.
|
||||
**/
|
||||
void SetEnergyRange(float minEnergy, float maxEnergy, float minEnergyDelta=0, float maxEnergyDelta=0);
|
||||
|
||||
/*!
|
||||
\brief Sets range of initial size and sizeDelta.
|
||||
|
||||
Sets the possible ranges for a particles starting size and it's sizeDelta.
|
||||
\param minSize Minimum initial size.
|
||||
\param maxSize Maximum initial size.
|
||||
\param minSizeDelta Minimum size delta.
|
||||
\param maxSizeDelta Maximum size delta.
|
||||
**/
|
||||
void SetSizeRange(float minSize, float maxSize, float minSizeDelta=0, float maxSizeDelta=0);
|
||||
|
||||
/*!
|
||||
\brief Set range of color for a new particle.
|
||||
|
||||
Sets range of possible colors, by component, for a new particle.
|
||||
\param minRed Minimum value of red component (0-255).
|
||||
\param maxRed Minimum value of red component (0-255).
|
||||
\param minGreen Minimum value of green component (0-255).
|
||||
\param maxGreen Minimum value of green component (0-255).
|
||||
\param minBlue Minimum value of blue component (0-255).
|
||||
\param maxBlue Minimum value of blue component (0-255).
|
||||
\param minAlpha Minimum value of alpha value (0-255).
|
||||
\param maxAlpha Minimum value of alpha value (0-255).
|
||||
**/
|
||||
void SetColorRange(Uint8 minRed, Uint8 maxRed, Uint8 minGreen, Uint8 maxGreen,
|
||||
Uint8 minBlue, Uint8 maxBlue, Uint8 minAlpha, Uint8 maxAlpha);
|
||||
};
|
||||
|
||||
//implementation//
|
||||
|
||||
template <class particleType>
|
||||
particleType ZSimpleParticleSystem<particleType>::NewParticle()
|
||||
{
|
||||
particleType p;
|
||||
|
||||
p.xPrev = p.xPos = rEngine->Rand(rMinX,rMaxX);
|
||||
p.yPrev = p.yPos = rEngine->Rand(rMinY,rMaxY);
|
||||
p.xVel = rEngine->Rand(rMinXVel,rMaxXVel);
|
||||
p.yVel = rEngine->Rand(rMinYVel,rMaxYVel);
|
||||
p.energy = rEngine->Rand(rMinEnergy,rMaxEnergy);
|
||||
p.energyDelta = rEngine->Rand(rMinEnergyDelta,rMaxEnergyDelta);
|
||||
p.size = rEngine->Rand(rMinSize,rMaxSize);
|
||||
p.sizeDelta = rEngine->Rand(rMinSizeDelta,rMaxSizeDelta);
|
||||
p.r = rEngine->Rand(rMinRed,rMaxRed);
|
||||
p.g = rEngine->Rand(rMinGreen,rMaxGreen);
|
||||
p.b = rEngine->Rand(rMinBlue,rMaxBlue);
|
||||
p.a = rEngine->Rand(rMinAlpha,rMaxAlpha);
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::UpdateParticle(int index, float elapsedTime)
|
||||
{
|
||||
rParticles[index].xPrev = rParticles[index].xPos;
|
||||
rParticles[index].yPrev = rParticles[index].yPos;
|
||||
rParticles[index].xPos += rParticles[index].xVel*elapsedTime;
|
||||
rParticles[index].yPos += rParticles[index].yVel*elapsedTime;
|
||||
rParticles[index].size += rParticles[index].sizeDelta*elapsedTime;
|
||||
rParticles[index].energy += rParticles[index].energyDelta*elapsedTime;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::Render()
|
||||
{
|
||||
switch(rStyle)
|
||||
{
|
||||
case DS_POINT:
|
||||
glBindTexture(GL_TEXTURE_2D,0);
|
||||
for(unsigned int i=0; i < rCurParticles; i++)
|
||||
{
|
||||
glPointSize(rParticles[i].size);
|
||||
glBegin(GL_POINTS);
|
||||
glColor4ub(rParticles[i].r,rParticles[i].g,rParticles[i].b,rParticles[i].a);
|
||||
glVertex2f(rParticles[i].xPos,rParticles[i].yPos);
|
||||
glEnd();
|
||||
}
|
||||
break;
|
||||
case DS_LINE:
|
||||
glBindTexture(GL_TEXTURE_2D,0);
|
||||
for(unsigned int i=0; i < rCurParticles; i++)
|
||||
{
|
||||
glLineWidth(rParticles[i].size);
|
||||
glBegin(GL_LINES);
|
||||
glColor4ub(rParticles[i].r,rParticles[i].g,rParticles[i].b,rParticles[i].a);
|
||||
glVertex2f(rParticles[i].xPos,rParticles[i].yPos);
|
||||
glVertex2f(rParticles[i].xPrev,rParticles[i].yPrev);
|
||||
glEnd();
|
||||
}
|
||||
break;
|
||||
case DS_IMAGE:
|
||||
float x,y,size;
|
||||
rImage.Bind();
|
||||
glBegin(GL_QUADS);
|
||||
for(unsigned int i=0; i < rCurParticles; i++)
|
||||
{
|
||||
x = rParticles[i].xPos;
|
||||
y = rParticles[i].yPos;
|
||||
size = rParticles[i].size;
|
||||
|
||||
glColor4ub(rParticles[i].r,rParticles[i].g,rParticles[i].b,rParticles[i].a);
|
||||
glTexCoord2f(0,1); glVertex2f(x,y);
|
||||
glTexCoord2f(1,1); glVertex2f(x+size,y);
|
||||
glTexCoord2f(0,1); glVertex2f(x+size,y-size);
|
||||
glTexCoord2f(0,0); glVertex2f(x,y-size);
|
||||
}
|
||||
glEnd();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetDrawStyle(ParticleDrawStyle style)
|
||||
{
|
||||
rStyle = style;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetImage(std::string filename)
|
||||
{
|
||||
rImage.Open(filename);
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetPosRange(float minX, float minY, float maxX, float maxY)
|
||||
{
|
||||
rMinX = minX;
|
||||
rMaxX = maxX;
|
||||
rMinY = minY;
|
||||
rMaxY = maxY;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetVelocityRange(float minXVel, float minYVel, float maxXVel, float maxYVel)
|
||||
{
|
||||
rMinXVel = minXVel;
|
||||
rMaxXVel = maxXVel;
|
||||
rMinYVel = minYVel;
|
||||
rMaxYVel = maxYVel;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetEnergyRange(float minEnergy, float maxEnergy, float minEnergyDelta, float maxEnergyDelta)
|
||||
{
|
||||
rMinEnergy = minEnergy;
|
||||
rMaxEnergy = maxEnergy;
|
||||
rMinEnergyDelta = minEnergyDelta;
|
||||
rMaxEnergyDelta = maxEnergyDelta;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetSizeRange(float minSize, float maxSize, float minSizeDelta, float maxSizeDelta)
|
||||
{
|
||||
rMinSize = minSize;
|
||||
rMaxSize = maxSize;
|
||||
rMinSizeDelta = minSizeDelta;
|
||||
rMaxSizeDelta = maxSizeDelta;
|
||||
}
|
||||
|
||||
template <class particleType>
|
||||
void ZSimpleParticleSystem<particleType>::SetColorRange(Uint8 minRed, Uint8 maxRed, Uint8 minGreen, Uint8 maxGreen,
|
||||
Uint8 minBlue, Uint8 maxBlue, Uint8 minAlpha, Uint8 maxAlpha)
|
||||
{
|
||||
rMinRed = minRed;
|
||||
rMaxRed = maxRed;
|
||||
rMinGreen = minGreen;
|
||||
rMaxGreen = maxGreen;
|
||||
rMinBlue = minBlue;
|
||||
rMaxBlue = maxBlue;
|
||||
rMinAlpha = minAlpha;
|
||||
rMaxAlpha = maxAlpha;
|
||||
}
|
||||
|
||||
} //namespace ZE
|
||||
|
||||
#endif //__ze_zsimpleparticlesystem_h__
|
@ -4,7 +4,7 @@
|
||||
|
||||
Header file for ZEngine Game Engine from Concept of Zero, this is the file that programs that wish to
|
||||
utilize ZEngine should include.
|
||||
<br>$Id: ZEngine.h,v 1.26 2003/05/13 01:30:51 cozman Exp $<br>
|
||||
<br>$Id: ZEngine.h,v 1.27 2003/07/10 19:19:19 cozman Exp $<br>
|
||||
\author James Turk
|
||||
**/
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
to have no leaks.<br>
|
||||
-The ZEngine website : http://zengine.sourceforge.net/.<br>
|
||||
-The ZEngine tutorials : http://conceptofzero.net/tutorials/zengine/.<br>
|
||||
-The ZEngine forums : http://www.conceptofzero.net/forums/index.php?act=SF&f=15
|
||||
-The ZEngine forums : http://www.conceptofzero.net/index.php?name=PNphpBB2&file=viewforum&f=4
|
||||
|
||||
\section Licensing Licensing
|
||||
<br>
|
||||
@ -57,6 +57,9 @@
|
||||
#include "ZE_ZTimer.h"
|
||||
#include "ZE_ZConfigFile.h"
|
||||
#include "ZE_ZRect.h"
|
||||
#include "ZE_ZRandGen.h"
|
||||
#include "ZE_ZBaseParticleSystem.h"
|
||||
#include "ZE_ZSimpleParticleSystem.h"
|
||||
#ifdef USE_SDL_TTF
|
||||
#include "ZE_ZFont.h"
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user