Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@kostik1337
Created June 13, 2017 07:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kostik1337/d50faf715489face99cd233760ca7dae to your computer and use it in GitHub Desktop.
Save kostik1337/d50faf715489face99cd233760ca7dae to your computer and use it in GitHub Desktop.
diff --git a/Source/Urho3D/Urho2D/ParticleEmitter2D.cpp b/Source/Urho3D/Urho2D/ParticleEmitter2D.cpp
index 9e41548..3d72ed1 100644
--- a/Source/Urho3D/Urho2D/ParticleEmitter2D.cpp
+++ b/Source/Urho3D/Urho2D/ParticleEmitter2D.cpp
@@ -49,7 +49,8 @@ ParticleEmitter2D::ParticleEmitter2D(Context* context) :
emissionTime_(0.0f),
emitParticleTime_(0.0f),
boundingBoxMinPoint_(Vector3::ZERO),
- boundingBoxMaxPoint_(Vector3::ZERO)
+ boundingBoxMaxPoint_(Vector3::ZERO),
+ emitting_(true)
{
sourceBatches_.Resize(1);
sourceBatches_[0].owner_ = this;
@@ -165,6 +166,15 @@ void ParticleEmitter2D::SetSpriteAttr(const ResourceRef& value)
SetSprite(sprite);
}
+void ParticleEmitter2D::SetEmitting(bool enable)
+{
+ if (enable != emitting_)
+ {
+ emitting_ = enable;
+ emitParticleTime_ = 0.0f;
+ }
+}
+
ResourceRef ParticleEmitter2D::GetSpriteAttr() const
{
return Sprite2D::SaveToResourceRef(sprite_);
@@ -325,23 +335,26 @@ void ParticleEmitter2D::Update(float timeStep)
}
}
- if (emissionTime_ > 0.0f)
+ if (emitting_)
{
- float worldAngle = GetNode()->GetWorldRotation().RollAngle();
+ if (emissionTime_ > 0.0f)
+ {
+ float worldAngle = GetNode()->GetWorldRotation().RollAngle();
- float timeBetweenParticles = effect_->GetParticleLifeSpan() / particles_.Size();
- emitParticleTime_ += timeStep;
+ float timeBetweenParticles = effect_->GetParticleLifeSpan() / particles_.Size();
+ emitParticleTime_ += timeStep;
- while (emitParticleTime_ > 0.0f)
- {
- if (EmitParticle(worldPosition, worldAngle, worldScale))
- UpdateParticle(particles_[numParticles_ - 1], emitParticleTime_, worldPosition, worldScale);
+ while (emitParticleTime_ > 0.0f)
+ {
+ if (EmitParticle(worldPosition, worldAngle, worldScale))
+ UpdateParticle(particles_[numParticles_ - 1], emitParticleTime_, worldPosition, worldScale);
- emitParticleTime_ -= timeBetweenParticles;
- }
+ emitParticleTime_ -= timeBetweenParticles;
+ }
- if (emissionTime_ > 0.0f)
- emissionTime_ = Max(0.0f, emissionTime_ - timeStep);
+ if (emissionTime_ > 0.0f)
+ emissionTime_ = Max(0.0f, emissionTime_ - timeStep);
+ }
}
sourceBatchesDirty_ = true;
diff --git a/Source/Urho3D/Urho2D/ParticleEmitter2D.h b/Source/Urho3D/Urho2D/ParticleEmitter2D.h
index 2c63796..9205017 100644
--- a/Source/Urho3D/Urho2D/ParticleEmitter2D.h
+++ b/Source/Urho3D/Urho2D/ParticleEmitter2D.h
@@ -116,6 +116,9 @@ public:
void SetSpriteAttr(const ResourceRef& value);
/// Return sprite attribute.
ResourceRef GetSpriteAttr() const;
+
+ void SetEmitting(bool enable);
+ bool IsEmitting() const { return emitting_; }
private:
/// Handle scene being assigned.
@@ -149,6 +152,8 @@ private:
float emissionTime_;
/// Emit particle time
float emitParticleTime_;
+ /// Currently emitting flag.
+ bool emitting_;
/// Particles.
Vector<Particle2D> particles_;
/// Bounding box min point.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment