Browse Source

Merge remote-tracking branch 'kostik1337/master'

Lasse Öörni 8 years ago
parent
commit
6ab29705d2

+ 2 - 0
Source/Urho3D/AngelScript/Urho2DAPI.cpp

@@ -198,6 +198,8 @@ static void RegisterParticleEmitter2D(asIScriptEngine* engine)
     engine->RegisterObjectMethod("ParticleEmitter2D", "Sprite2D@+ get_sprite() const", asMETHOD(ParticleEmitter2D, GetSprite), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter2D", "void set_blendMode(BlendMode)", asMETHOD(ParticleEmitter2D, SetBlendMode), asCALL_THISCALL);
     engine->RegisterObjectMethod("ParticleEmitter2D", "BlendMode get_blendMode() const", asMETHOD(ParticleEmitter2D, GetBlendMode), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEmitter2D", "void set_emitting(bool)", asMETHOD(ParticleEmitter2D, SetEmitting), asCALL_THISCALL);
+    engine->RegisterObjectMethod("ParticleEmitter2D", "bool get_emitting() const", asMETHOD(ParticleEmitter2D, IsEmitting), asCALL_THISCALL);
 }
 
 static void FakeAddRef(void* ptr)

+ 3 - 0
Source/Urho3D/LuaScript/pkgs/Urho2D/ParticleEmitter2D.pkg

@@ -6,12 +6,15 @@ public:
     void SetEffect(ParticleEffect2D* effect);
     void SetSprite(Sprite2D* sprite);
     void SetBlendMode(BlendMode blendMode);
+    void SetEmitting(bool emitting);
 
     ParticleEffect2D* GetEffect() const;
     Sprite2D* GetSprite() const;
     BlendMode GetBlendMode() const;
+    bool IsEmitting() const;
 
     tolua_property__get_set ParticleEffect2D* effect;
     tolua_property__get_set Sprite2D* sprite;
     tolua_property__get_set BlendMode blendMode;
+    tolua_property__is_set bool emitting;
 };

+ 13 - 2
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;
@@ -70,6 +71,7 @@ void ParticleEmitter2D::RegisterObject(Context* context)
     URHO3D_MIXED_ACCESSOR_ATTRIBUTE("Sprite ", GetSpriteAttr, SetSpriteAttr, ResourceRef, ResourceRef(Sprite2D::GetTypeStatic()),
         AM_DEFAULT);
     URHO3D_ENUM_ACCESSOR_ATTRIBUTE("Blend Mode", GetBlendMode, SetBlendMode, BlendMode, blendModeNames, BLEND_ALPHA, AM_DEFAULT);
+    URHO3D_ATTRIBUTE("Is Emitting", bool, emitting_, true, AM_FILE);
 }
 
 void ParticleEmitter2D::OnSetEnabled()
@@ -165,6 +167,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,7 +336,7 @@ void ParticleEmitter2D::Update(float timeStep)
         }
     }
 
-    if (emissionTime_ > 0.0f)
+    if (emitting_ && emissionTime_ > 0.0f)
     {
         float worldAngle = GetNode()->GetWorldRotation().RollAngle();
 

+ 6 - 0
Source/Urho3D/Urho2D/ParticleEmitter2D.h

@@ -96,6 +96,8 @@ public:
     void SetBlendMode(BlendMode blendMode);
     /// Set max particles.
     void SetMaxParticles(unsigned maxParticles);
+    /// Set whether should be emitting. If the state was changed, also resets the emission period timer.
+    void SetEmitting(bool enable);
 
     /// Return particle effect.
     ParticleEffect2D* GetEffect() const;
@@ -116,6 +118,8 @@ public:
     void SetSpriteAttr(const ResourceRef& value);
     /// Return sprite attribute.
     ResourceRef GetSpriteAttr() const;
+    /// Return whether is currently emitting.
+    bool IsEmitting() const { return emitting_; }
 
 private:
     /// Handle scene being assigned.
@@ -149,6 +153,8 @@ private:
     float emissionTime_;
     /// Emit particle time
     float emitParticleTime_;
+    /// Currently emitting flag.
+    bool emitting_;
     /// Particles.
     Vector<Particle2D> particles_;
     /// Bounding box min point.