Created
June 13, 2017 07:41
-
-
Save kostik1337/d50faf715489face99cd233760ca7dae to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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