From 9f6aa2688656686dd4782c2b88848baebe3594ae Mon Sep 17 00:00:00 2001 From: Adam Bialogonski Date: Wed, 7 Jun 2023 09:46:40 +0100 Subject: [PATCH] Immortal emitter is now mortal as it should be. Change-Id: I6709952446a8cb5ccdf6c6e1691600e42bff7e7a --- .../particle-system/effects/fire-ring-effect-modifier.cpp | 7 ++++++- .../particle-system/effects/fire-ring-effect-modifier.h | 3 ++- .../particle-system/effects/fire-ring-effect-source.cpp | 6 +++++- examples/particle-system/effects/fire-ring-effect-source.h | 3 ++- examples/particle-system/effects/image-effect-modifier.cpp | 7 ++++++- examples/particle-system/effects/image-effect-modifier.h | 3 ++- examples/particle-system/effects/image-effect-source.cpp | 8 ++++++-- examples/particle-system/effects/image-effect-source.h | 3 ++- examples/particle-system/effects/particle-effect.h | 4 ---- .../particle-system/effects/sparkles-effect-modifier.cpp | 11 ++++++++--- .../particle-system/effects/sparkles-effect-modifier.h | 3 ++- .../particle-system/effects/sparkles-effect-source.cpp | 14 ++++++++++++-- examples/particle-system/effects/sparkles-effect-source.h | 4 +++- 13 files changed, 56 insertions(+), 20 deletions(-) diff --git a/examples/particle-system/effects/fire-ring-effect-modifier.cpp b/examples/particle-system/effects/fire-ring-effect-modifier.cpp index 56f7e5b..f7027b8 100644 --- a/examples/particle-system/effects/fire-ring-effect-modifier.cpp +++ b/examples/particle-system/effects/fire-ring-effect-modifier.cpp @@ -55,7 +55,12 @@ void FireModifier::Update(ParticleList& particleList, uint32_t first, uint32_t c // Retrieve the Source and get the stream if(!mStreamBasePos) { - mStreamBasePos = static_cast(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; + auto handle = mEmitter.GetHandle(); + if(!handle) + { + return; + } + mStreamBasePos = static_cast(&handle.GetSource().GetSourceCallback())->mStreamBasePos; } // Missing stream, return! diff --git a/examples/particle-system/effects/fire-ring-effect-modifier.h b/examples/particle-system/effects/fire-ring-effect-modifier.h index 3f9f6ea..7bf4f52 100644 --- a/examples/particle-system/effects/fire-ring-effect-modifier.h +++ b/examples/particle-system/effects/fire-ring-effect-modifier.h @@ -25,6 +25,7 @@ #include #include #include +#include #include namespace Dali::ParticleEffect @@ -76,7 +77,7 @@ public: void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; ColorGradient mFireGradient; - ParticleEmitter mEmitter; + Dali::WeakHandle mEmitter; uint32_t mStreamBasePos{0u}; uint32_t mAngle{0u}; }; diff --git a/examples/particle-system/effects/fire-ring-effect-source.cpp b/examples/particle-system/effects/fire-ring-effect-source.cpp index 0ff0652..f76d40d 100644 --- a/examples/particle-system/effects/fire-ring-effect-source.cpp +++ b/examples/particle-system/effects/fire-ring-effect-source.cpp @@ -40,7 +40,11 @@ mEmitter(emitter) void FireSource::Init() { - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream(Vector3::ZERO); + auto handle = mEmitter.GetHandle(); + if(handle) + { + mStreamBasePos = handle.GetParticleList().AddLocalStream(Vector3::ZERO); + } } uint32_t FireSource::Update(ParticleList& particleList, uint32_t count) diff --git a/examples/particle-system/effects/fire-ring-effect-source.h b/examples/particle-system/effects/fire-ring-effect-source.h index 28f78ef..1af4513 100644 --- a/examples/particle-system/effects/fire-ring-effect-source.h +++ b/examples/particle-system/effects/fire-ring-effect-source.h @@ -23,6 +23,7 @@ #include #include #include +#include #include namespace Dali::ParticleEffect @@ -43,7 +44,7 @@ public: void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale); - ParticleEmitter mEmitter; + Dali::WeakHandle mEmitter; Dali::Vector2 mRadius; diff --git a/examples/particle-system/effects/image-effect-modifier.cpp b/examples/particle-system/effects/image-effect-modifier.cpp index 395040c..2fa3c44 100644 --- a/examples/particle-system/effects/image-effect-modifier.cpp +++ b/examples/particle-system/effects/image-effect-modifier.cpp @@ -44,7 +44,12 @@ void ImageExplodeEffectModifier::Update(ParticleList& particleList, uint32_t fir // Retrieve the Source and get the stream if(!mStreamBasePos) { - mStreamBasePos = static_cast(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; + auto handle = mEmitter.GetHandle(); + if(!handle) + { + return; + } + mStreamBasePos = static_cast(&handle.GetSource().GetSourceCallback())->mStreamBasePos; } // Missing stream, return! diff --git a/examples/particle-system/effects/image-effect-modifier.h b/examples/particle-system/effects/image-effect-modifier.h index 8a0781e..471facd 100644 --- a/examples/particle-system/effects/image-effect-modifier.h +++ b/examples/particle-system/effects/image-effect-modifier.h @@ -24,6 +24,7 @@ #include #include #include +#include #include namespace Dali::ParticleEffect @@ -40,7 +41,7 @@ public: void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; - ParticleEmitter mEmitter; + WeakHandle mEmitter; uint32_t mStreamBasePos{0u}; float mAngle{0.0f}; diff --git a/examples/particle-system/effects/image-effect-source.cpp b/examples/particle-system/effects/image-effect-source.cpp index 52d558a..17963d0 100644 --- a/examples/particle-system/effects/image-effect-source.cpp +++ b/examples/particle-system/effects/image-effect-source.cpp @@ -64,12 +64,16 @@ mEmitter(emitter) void ImageExplodeEffectSource::Init() { - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream(Vector3::ZERO); + auto handle = mEmitter.GetHandle(); + if(handle) + { + mStreamBasePos = handle.GetParticleList().AddLocalStream(Vector3::ZERO); + } } uint32_t ImageExplodeEffectSource::Update(ParticleList& particleList, uint32_t count) { - if(!mShouldEmit) + if(!mShouldEmit || !mStreamBasePos) { return 0; } diff --git a/examples/particle-system/effects/image-effect-source.h b/examples/particle-system/effects/image-effect-source.h index 49d84c9..c30ba99 100644 --- a/examples/particle-system/effects/image-effect-source.h +++ b/examples/particle-system/effects/image-effect-source.h @@ -24,6 +24,7 @@ #include #include #include +#include #include namespace Dali::ParticleEffect @@ -46,7 +47,7 @@ public: void Init() override; - ParticleEmitter mEmitter; + WeakHandle mEmitter; uint32_t mImageWidth{0u}; uint32_t mImageHeight{0u}; diff --git a/examples/particle-system/effects/particle-effect.h b/examples/particle-system/effects/particle-effect.h index a1277ef..88e1b32 100644 --- a/examples/particle-system/effects/particle-effect.h +++ b/examples/particle-system/effects/particle-effect.h @@ -55,10 +55,6 @@ public: ~ParticleEffect(); Dali::Toolkit::ParticleSystem::ParticleEmitter CreateEffectEmitter( EffectType effectType, Actor parentActor, const ParticleEffectParams& params ); - -private: - - }; } diff --git a/examples/particle-system/effects/sparkles-effect-modifier.cpp b/examples/particle-system/effects/sparkles-effect-modifier.cpp index dda93da..d212bfd 100644 --- a/examples/particle-system/effects/sparkles-effect-modifier.cpp +++ b/examples/particle-system/effects/sparkles-effect-modifier.cpp @@ -42,13 +42,18 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 mAngle = ((mAngle + 2) % 360); // Retrieve the Source and get the stream + auto handle = mEmitter.GetHandle(); + if(!handle) + { + return; + } if(!mStreamBasePos) { - mStreamBasePos = static_cast(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; + mStreamBasePos = static_cast(&handle.GetSource().GetSourceCallback())->mStreamBasePos; } if(!mStreamBaseAngle) { - mStreamBaseAngle = static_cast(&mEmitter.GetSource().GetSourceCallback())->mStreamBaseAngle; + mStreamBaseAngle = static_cast(&handle.GetSource().GetSourceCallback())->mStreamBaseAngle; } // Missing stream, return! @@ -77,7 +82,7 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 auto angle = particle.GetByIndex(mStreamBaseAngle); auto radians = ((angle * M_PI)/180.f); float lifetime = particle.Get(ParticleStream::LIFETIME_STREAM_BIT); - position.y += velocity.y *sin(radians); + position.y += velocity.y * sin(radians); position.x += velocity.x * cos(radians); velocity *= 0.990f; diff --git a/examples/particle-system/effects/sparkles-effect-modifier.h b/examples/particle-system/effects/sparkles-effect-modifier.h index 1c64bd6..25627ab 100644 --- a/examples/particle-system/effects/sparkles-effect-modifier.h +++ b/examples/particle-system/effects/sparkles-effect-modifier.h @@ -25,6 +25,7 @@ #include #include #include +#include #include namespace Dali::ParticleEffect @@ -41,7 +42,7 @@ public: void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; - ParticleEmitter mEmitter; + Dali::WeakHandle mEmitter; uint32_t mStreamBasePos{0u}; uint32_t mStreamBaseAngle{0u}; uint32_t mAngle{0u}; diff --git a/examples/particle-system/effects/sparkles-effect-source.cpp b/examples/particle-system/effects/sparkles-effect-source.cpp index 56eb298..c75fde2 100644 --- a/examples/particle-system/effects/sparkles-effect-source.cpp +++ b/examples/particle-system/effects/sparkles-effect-source.cpp @@ -39,12 +39,22 @@ mEmitter(emitter) void SparklesSource::Init() { - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream(Vector3::ZERO); - mStreamBaseAngle = mEmitter.GetParticleList().AddLocalStream(0.0f); + auto handle = mEmitter.GetHandle(); + if(!handle) + { + return; + } + mStreamBasePos = handle.GetParticleList().AddLocalStream(Vector3::ZERO); + mStreamBaseAngle = handle.GetParticleList().AddLocalStream(0.0f); } uint32_t SparklesSource::Update(ParticleList& particleList, uint32_t count) { + if(!mStreamBasePos || !mStreamBaseAngle) + { + return 0u; + } + while(count--) { auto particle = particleList.NewParticle(LIFETIME); diff --git a/examples/particle-system/effects/sparkles-effect-source.h b/examples/particle-system/effects/sparkles-effect-source.h index 466c49b..bc9e8ec 100644 --- a/examples/particle-system/effects/sparkles-effect-source.h +++ b/examples/particle-system/effects/sparkles-effect-source.h @@ -23,6 +23,8 @@ #include #include #include +#include + #include namespace Dali::ParticleEffect @@ -43,7 +45,7 @@ public: void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale, float& angle); - ParticleEmitter mEmitter; + Dali::WeakHandle mEmitter; Dali::Vector2 mRadius; -- 2.7.4