Browse Source

Merge pull request #1241 from AtomicGameEngine/2D-Particle-Emission

Added 2D particle emission control
JoshEngebretson 8 years ago
parent
commit
3eb9e65e13

+ 21 - 4
Source/Atomic/Atomic2D/ParticleEmitter2D.cpp

@@ -48,7 +48,10 @@ ParticleEmitter2D::ParticleEmitter2D(Context* context) :
     emissionTime_(0.0f),
     emitParticleTime_(0.0f),
     boundingBoxMinPoint_(Vector3::ZERO),
-    boundingBoxMaxPoint_(Vector3::ZERO)
+    boundingBoxMaxPoint_(Vector3::ZERO),
+    // ATOMIC BEGIN
+    emitting_(true)
+    // ATOMIC END
 {
     sourceBatches_.Resize(1);
     sourceBatches_[0].owner_ = this;
@@ -313,8 +316,7 @@ void ParticleEmitter2D::Update(float timeStep)
             emitParticleTime_ -= timeBetweenParticles;
         }
 
-        if (emissionTime_ > 0.0f)
-            emissionTime_ = Max(0.0f, emissionTime_ - timeStep);
+        emissionTime_ = Max(0.0f, emissionTime_ - timeStep);
     }
 
     sourceBatchesDirty_ = true;
@@ -324,7 +326,9 @@ void ParticleEmitter2D::Update(float timeStep)
 
 bool ParticleEmitter2D::EmitParticle(const Vector3& worldPosition, float worldAngle, float worldScale)
 {
-    if (numParticles_ >= (unsigned)effect_->GetMaxParticles() || numParticles_ >= particles_.Size())
+    // ATOMIC BEGIN
+    if (!emitting_ || numParticles_ >= (unsigned)effect_->GetMaxParticles() || numParticles_ >= particles_.Size())
+    // ATOMIC END
         return false;
 
     float lifespan = effect_->GetParticleLifeSpan() + effect_->GetParticleLifespanVariance() * Random(-1.0f, 1.0f);
@@ -432,4 +436,17 @@ void ParticleEmitter2D::UpdateParticle(Particle2D& particle, float timeStep, con
     boundingBoxMaxPoint_.z_ = Max(boundingBoxMaxPoint_.z_, particle.position_.z_);
 }
 
+// ATOMIC BEGIN
+
+void ParticleEmitter2D::SetEmitting(bool enable)
+{
+    emitting_ = enable;
+}
+bool ParticleEmitter2D::IsEmitting() const
+{
+    return emitting_;
+}
+
+// ATOMIC END
+
 }

+ 18 - 1
Source/Atomic/Atomic2D/ParticleEmitter2D.h

@@ -117,6 +117,15 @@ public:
     /// Return sprite attribute.
     ResourceRef GetSpriteAttr() const;
 
+    // ATOMIC BEGIN
+
+    /// Set emission state.
+    void SetEmitting(bool enable);
+    /// Return emission state.
+    bool IsEmitting() const;
+
+    // ATOMIC END
+
 private:
     /// Handle scene being assigned.
     virtual void OnSceneSet(Scene* scene);
@@ -143,7 +152,7 @@ private:
     SharedPtr<Sprite2D> sprite_;
     /// Blend mode.
     BlendMode blendMode_;
-    /// Nummber of particles.
+    /// Number of particles.
     unsigned numParticles_;
     /// Emission time.
     float emissionTime_;
@@ -155,6 +164,14 @@ private:
     Vector3 boundingBoxMinPoint_;
     /// Bounding box max point.
     Vector3 boundingBoxMaxPoint_;
+
+    // ATOMIC BEGIN
+
+    /// Emission enabled.
+    bool emitting_;
+
+    // ATOMIC END
+
 };
 
 }