summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/particleemitter.cpp16
-rw-r--r--src/particleemitter.h2
2 files changed, 17 insertions, 1 deletions
diff --git a/src/particleemitter.cpp b/src/particleemitter.cpp
index 631ca228..1696a134 100644
--- a/src/particleemitter.cpp
+++ b/src/particleemitter.cpp
@@ -39,7 +39,8 @@
#define DEG_RAD_FACTOR 0.017453293f
ParticleEmitter::ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map *map):
- mParticleImage(0)
+ mParticleImage(0),
+ mOutputPauseLeft(0)
{
mMap = map;
mParticleTarget = target;
@@ -62,6 +63,7 @@ ParticleEmitter::ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map *
mParticleFadeOut.set(0);
mParticleFadeIn.set(0);
mOutput.set(1);
+ mOutputPause.set(0);
mParticleAlpha.set(1.0f);
for_each_xml_child_node(propertyNode, emitterNode)
@@ -135,6 +137,11 @@ ParticleEmitter::ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map *
mOutput = readMinMax(propertyNode, 0);
mOutput.maxVal +=1;
}
+ else if (name == "output-pause")
+ {
+ mOutputPause = readMinMax(propertyNode, 0);
+ mOutputPauseLeft = mOutputSkip.value();
+ }
else if (name == "acceleration")
{
mParticleAcceleration = readMinMax(propertyNode, 0.0f);
@@ -308,6 +315,13 @@ ParticleEmitter::createParticles()
{
std::list<Particle *> newParticles;
+ if (mOutputPauseLeft > 0)
+ {
+ mOutputPauseLeft--;
+ return newParticles;
+ }
+ mOutputPauseLeft = mOutputPause.value();
+
for (int i = mOutput.value(); i > 0; i--)
{
// Limit maximum particles
diff --git a/src/particleemitter.h b/src/particleemitter.h
index 2f45608d..c1365163 100644
--- a/src/particleemitter.h
+++ b/src/particleemitter.h
@@ -119,6 +119,8 @@ class ParticleEmitter
Map *mMap; /**< Map the particles are spawned on */
MinMax<int> mOutput; /**< Number of particles spawned per update */
+ MinMax<int> mOutputSkip; /**< Pause in frames between two spawns */
+ int mOutputSkipPause;
/*
* Graphical representation of the particle