Browse Source

Added 2D particle emission control

Alan Q 9 years ago
parent
commit
d3b5069ade

+ 11 - 1
Source/Atomic/Atomic2D/ParticleEmitter2D.cpp

@@ -104,6 +104,11 @@ void ParticleEmitter2D::SetEffect(ParticleEffect2D* model)
     emissionTime_ = effect_->GetDuration();
     emissionTime_ = effect_->GetDuration();
 }
 }
 
 
+void ParticleEmitter2D::SetEmissionEnabled(bool enable)
+{
+	emissionEnabled_ = enable;
+}
+
 void ParticleEmitter2D::SetSprite(Sprite2D* sprite)
 void ParticleEmitter2D::SetSprite(Sprite2D* sprite)
 {
 {
     if (sprite == sprite_)
     if (sprite == sprite_)
@@ -136,6 +141,11 @@ void ParticleEmitter2D::SetMaxParticles(unsigned maxParticles)
     numParticles_ = Min(maxParticles, numParticles_);
     numParticles_ = Min(maxParticles, numParticles_);
 }
 }
 
 
+bool ParticleEmitter2D::GetEmissionEnabled() const
+{
+	return emissionEnabled_;
+}
+
 ParticleEffect2D* ParticleEmitter2D::GetEffect() const
 ParticleEffect2D* ParticleEmitter2D::GetEffect() const
 {
 {
     return effect_;
     return effect_;
@@ -323,7 +333,7 @@ void ParticleEmitter2D::Update(float timeStep)
 
 
 bool ParticleEmitter2D::EmitParticle(const Vector3& worldPosition, float worldAngle, float worldScale)
 bool ParticleEmitter2D::EmitParticle(const Vector3& worldPosition, float worldAngle, float worldScale)
 {
 {
-    if (numParticles_ >= (unsigned)effect_->GetMaxParticles() || numParticles_ >= particles_.Size())
+    if (!emissionEnabled_ || numParticles_ >= (unsigned)effect_->GetMaxParticles() || numParticles_ >= particles_.Size())
         return false;
         return false;
 
 
     float lifespan = effect_->GetParticleLifeSpan() + effect_->GetParticleLifespanVariance() * Random(-1.0f, 1.0f);
     float lifespan = effect_->GetParticleLifeSpan() + effect_->GetParticleLifespanVariance() * Random(-1.0f, 1.0f);

+ 6 - 0
Source/Atomic/Atomic2D/ParticleEmitter2D.h

@@ -88,6 +88,8 @@ public:
     /// Handle enabled/disabled state change.
     /// Handle enabled/disabled state change.
     virtual void OnSetEnabled();
     virtual void OnSetEnabled();
 
 
+	/// Set emission enabled.
+	void SetEmissionEnabled(bool enable);
     /// Set particle effect.
     /// Set particle effect.
     void SetEffect(ParticleEffect2D* effect);
     void SetEffect(ParticleEffect2D* effect);
     /// Set sprite.
     /// Set sprite.
@@ -97,6 +99,8 @@ public:
     /// Set max particles.
     /// Set max particles.
     void SetMaxParticles(unsigned maxParticles);
     void SetMaxParticles(unsigned maxParticles);
 
 
+	/// Return emission state.
+	bool GetEmissionEnabled() const;
     /// Return particle effect.
     /// Return particle effect.
     ParticleEffect2D* GetEffect() const;
     ParticleEffect2D* GetEffect() const;
     /// Return sprite.
     /// Return sprite.
@@ -137,6 +141,8 @@ private:
     /// Update particle.
     /// Update particle.
     void UpdateParticle(Particle2D& particle, float timeStep, const Vector3& worldPosition, float worldScale);
     void UpdateParticle(Particle2D& particle, float timeStep, const Vector3& worldPosition, float worldScale);
 
 
+	/// Emission enabled.
+	bool emissionEnabled_;
     /// Particle effect.
     /// Particle effect.
     SharedPtr<ParticleEffect2D> effect_;
     SharedPtr<ParticleEffect2D> effect_;
     /// Sprite.
     /// Sprite.