Commit 9f6aa2688656686dd4782c2b88848baebe3594ae
1 parent
bff9106e
Immortal emitter is now mortal as it should be.
Change-Id: I6709952446a8cb5ccdf6c6e1691600e42bff7e7a
Showing
13 changed files
with
56 additions
and
20 deletions
examples/particle-system/effects/fire-ring-effect-modifier.cpp
| @@ -55,7 +55,12 @@ void FireModifier::Update(ParticleList& particleList, uint32_t first, uint32_t c | @@ -55,7 +55,12 @@ void FireModifier::Update(ParticleList& particleList, uint32_t first, uint32_t c | ||
| 55 | // Retrieve the Source and get the stream | 55 | // Retrieve the Source and get the stream |
| 56 | if(!mStreamBasePos) | 56 | if(!mStreamBasePos) |
| 57 | { | 57 | { |
| 58 | - mStreamBasePos = static_cast<FireSource*>(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; | 58 | + auto handle = mEmitter.GetHandle(); |
| 59 | + if(!handle) | ||
| 60 | + { | ||
| 61 | + return; | ||
| 62 | + } | ||
| 63 | + mStreamBasePos = static_cast<FireSource*>(&handle.GetSource().GetSourceCallback())->mStreamBasePos; | ||
| 59 | } | 64 | } |
| 60 | 65 | ||
| 61 | // Missing stream, return! | 66 | // Missing stream, return! |
examples/particle-system/effects/fire-ring-effect-modifier.h
| @@ -25,6 +25,7 @@ | @@ -25,6 +25,7 @@ | ||
| 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | #include <dali-toolkit/public-api/particle-system/particle.h> | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | #include <dali/public-api/common/vector-wrapper.h> | 27 | #include <dali/public-api/common/vector-wrapper.h> |
| 28 | +#include <dali/public-api/object/weak-handle.h> | ||
| 28 | #include <ctime> | 29 | #include <ctime> |
| 29 | 30 | ||
| 30 | namespace Dali::ParticleEffect | 31 | namespace Dali::ParticleEffect |
| @@ -76,7 +77,7 @@ public: | @@ -76,7 +77,7 @@ public: | ||
| 76 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; | 77 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 77 | 78 | ||
| 78 | ColorGradient mFireGradient; | 79 | ColorGradient mFireGradient; |
| 79 | - ParticleEmitter mEmitter; | 80 | + Dali::WeakHandle<ParticleEmitter> mEmitter; |
| 80 | uint32_t mStreamBasePos{0u}; | 81 | uint32_t mStreamBasePos{0u}; |
| 81 | uint32_t mAngle{0u}; | 82 | uint32_t mAngle{0u}; |
| 82 | }; | 83 | }; |
examples/particle-system/effects/fire-ring-effect-source.cpp
| @@ -40,7 +40,11 @@ mEmitter(emitter) | @@ -40,7 +40,11 @@ mEmitter(emitter) | ||
| 40 | 40 | ||
| 41 | void FireSource::Init() | 41 | void FireSource::Init() |
| 42 | { | 42 | { |
| 43 | - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | 43 | + auto handle = mEmitter.GetHandle(); |
| 44 | + if(handle) | ||
| 45 | + { | ||
| 46 | + mStreamBasePos = handle.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | ||
| 47 | + } | ||
| 44 | } | 48 | } |
| 45 | 49 | ||
| 46 | uint32_t FireSource::Update(ParticleList& particleList, uint32_t count) | 50 | uint32_t FireSource::Update(ParticleList& particleList, uint32_t count) |
examples/particle-system/effects/fire-ring-effect-source.h
| @@ -23,6 +23,7 @@ | @@ -23,6 +23,7 @@ | ||
| 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> | 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | #include <dali-toolkit/public-api/particle-system/particle.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | +#include <dali/public-api/object/weak-handle.h> | ||
| 26 | #include <ctime> | 27 | #include <ctime> |
| 27 | 28 | ||
| 28 | namespace Dali::ParticleEffect | 29 | namespace Dali::ParticleEffect |
| @@ -43,7 +44,7 @@ public: | @@ -43,7 +44,7 @@ public: | ||
| 43 | 44 | ||
| 44 | void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale); | 45 | void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale); |
| 45 | 46 | ||
| 46 | - ParticleEmitter mEmitter; | 47 | + Dali::WeakHandle<ParticleEmitter> mEmitter; |
| 47 | 48 | ||
| 48 | Dali::Vector2 mRadius; | 49 | Dali::Vector2 mRadius; |
| 49 | 50 |
examples/particle-system/effects/image-effect-modifier.cpp
| @@ -44,7 +44,12 @@ void ImageExplodeEffectModifier::Update(ParticleList& particleList, uint32_t fir | @@ -44,7 +44,12 @@ void ImageExplodeEffectModifier::Update(ParticleList& particleList, uint32_t fir | ||
| 44 | // Retrieve the Source and get the stream | 44 | // Retrieve the Source and get the stream |
| 45 | if(!mStreamBasePos) | 45 | if(!mStreamBasePos) |
| 46 | { | 46 | { |
| 47 | - mStreamBasePos = static_cast<ImageExplodeEffectSource*>(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; | 47 | + auto handle = mEmitter.GetHandle(); |
| 48 | + if(!handle) | ||
| 49 | + { | ||
| 50 | + return; | ||
| 51 | + } | ||
| 52 | + mStreamBasePos = static_cast<ImageExplodeEffectSource*>(&handle.GetSource().GetSourceCallback())->mStreamBasePos; | ||
| 48 | } | 53 | } |
| 49 | 54 | ||
| 50 | // Missing stream, return! | 55 | // Missing stream, return! |
examples/particle-system/effects/image-effect-modifier.h
| @@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
| 24 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> | 24 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | #include <dali-toolkit/public-api/particle-system/particle.h> | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | +#include <dali/public-api/object/weak-handle.h> | ||
| 27 | #include <ctime> | 28 | #include <ctime> |
| 28 | 29 | ||
| 29 | namespace Dali::ParticleEffect | 30 | namespace Dali::ParticleEffect |
| @@ -40,7 +41,7 @@ public: | @@ -40,7 +41,7 @@ public: | ||
| 40 | 41 | ||
| 41 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; | 42 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 42 | 43 | ||
| 43 | - ParticleEmitter mEmitter; | 44 | + WeakHandle<ParticleEmitter> mEmitter; |
| 44 | uint32_t mStreamBasePos{0u}; | 45 | uint32_t mStreamBasePos{0u}; |
| 45 | float mAngle{0.0f}; | 46 | float mAngle{0.0f}; |
| 46 | 47 |
examples/particle-system/effects/image-effect-source.cpp
| @@ -64,12 +64,16 @@ mEmitter(emitter) | @@ -64,12 +64,16 @@ mEmitter(emitter) | ||
| 64 | 64 | ||
| 65 | void ImageExplodeEffectSource::Init() | 65 | void ImageExplodeEffectSource::Init() |
| 66 | { | 66 | { |
| 67 | - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | 67 | + auto handle = mEmitter.GetHandle(); |
| 68 | + if(handle) | ||
| 69 | + { | ||
| 70 | + mStreamBasePos = handle.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | ||
| 71 | + } | ||
| 68 | } | 72 | } |
| 69 | 73 | ||
| 70 | uint32_t ImageExplodeEffectSource::Update(ParticleList& particleList, uint32_t count) | 74 | uint32_t ImageExplodeEffectSource::Update(ParticleList& particleList, uint32_t count) |
| 71 | { | 75 | { |
| 72 | - if(!mShouldEmit) | 76 | + if(!mShouldEmit || !mStreamBasePos) |
| 73 | { | 77 | { |
| 74 | return 0; | 78 | return 0; |
| 75 | } | 79 | } |
examples/particle-system/effects/image-effect-source.h
| @@ -24,6 +24,7 @@ | @@ -24,6 +24,7 @@ | ||
| 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | #include <dali-toolkit/public-api/particle-system/particle.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | #include <dali/devel-api/adaptor-framework/pixel-buffer.h> | 26 | #include <dali/devel-api/adaptor-framework/pixel-buffer.h> |
| 27 | +#include <dali/public-api/object/weak-handle.h> | ||
| 27 | #include <ctime> | 28 | #include <ctime> |
| 28 | 29 | ||
| 29 | namespace Dali::ParticleEffect | 30 | namespace Dali::ParticleEffect |
| @@ -46,7 +47,7 @@ public: | @@ -46,7 +47,7 @@ public: | ||
| 46 | 47 | ||
| 47 | void Init() override; | 48 | void Init() override; |
| 48 | 49 | ||
| 49 | - ParticleEmitter mEmitter; | 50 | + WeakHandle<ParticleEmitter> mEmitter; |
| 50 | 51 | ||
| 51 | uint32_t mImageWidth{0u}; | 52 | uint32_t mImageWidth{0u}; |
| 52 | uint32_t mImageHeight{0u}; | 53 | uint32_t mImageHeight{0u}; |
examples/particle-system/effects/particle-effect.h
| @@ -55,10 +55,6 @@ public: | @@ -55,10 +55,6 @@ public: | ||
| 55 | ~ParticleEffect(); | 55 | ~ParticleEffect(); |
| 56 | 56 | ||
| 57 | Dali::Toolkit::ParticleSystem::ParticleEmitter CreateEffectEmitter( EffectType effectType, Actor parentActor, const ParticleEffectParams& params ); | 57 | Dali::Toolkit::ParticleSystem::ParticleEmitter CreateEffectEmitter( EffectType effectType, Actor parentActor, const ParticleEffectParams& params ); |
| 58 | - | ||
| 59 | -private: | ||
| 60 | - | ||
| 61 | - | ||
| 62 | }; | 58 | }; |
| 63 | } | 59 | } |
| 64 | 60 |
examples/particle-system/effects/sparkles-effect-modifier.cpp
| @@ -42,13 +42,18 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 | @@ -42,13 +42,18 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 | ||
| 42 | mAngle = ((mAngle + 2) % 360); | 42 | mAngle = ((mAngle + 2) % 360); |
| 43 | 43 | ||
| 44 | // Retrieve the Source and get the stream | 44 | // Retrieve the Source and get the stream |
| 45 | + auto handle = mEmitter.GetHandle(); | ||
| 46 | + if(!handle) | ||
| 47 | + { | ||
| 48 | + return; | ||
| 49 | + } | ||
| 45 | if(!mStreamBasePos) | 50 | if(!mStreamBasePos) |
| 46 | { | 51 | { |
| 47 | - mStreamBasePos = static_cast<SparklesSource*>(&mEmitter.GetSource().GetSourceCallback())->mStreamBasePos; | 52 | + mStreamBasePos = static_cast<SparklesSource*>(&handle.GetSource().GetSourceCallback())->mStreamBasePos; |
| 48 | } | 53 | } |
| 49 | if(!mStreamBaseAngle) | 54 | if(!mStreamBaseAngle) |
| 50 | { | 55 | { |
| 51 | - mStreamBaseAngle = static_cast<SparklesSource*>(&mEmitter.GetSource().GetSourceCallback())->mStreamBaseAngle; | 56 | + mStreamBaseAngle = static_cast<SparklesSource*>(&handle.GetSource().GetSourceCallback())->mStreamBaseAngle; |
| 52 | } | 57 | } |
| 53 | 58 | ||
| 54 | // Missing stream, return! | 59 | // Missing stream, return! |
| @@ -77,7 +82,7 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 | @@ -77,7 +82,7 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 | ||
| 77 | auto angle = particle.GetByIndex<float>(mStreamBaseAngle); | 82 | auto angle = particle.GetByIndex<float>(mStreamBaseAngle); |
| 78 | auto radians = ((angle * M_PI)/180.f); | 83 | auto radians = ((angle * M_PI)/180.f); |
| 79 | float lifetime = particle.Get<float>(ParticleStream::LIFETIME_STREAM_BIT); | 84 | float lifetime = particle.Get<float>(ParticleStream::LIFETIME_STREAM_BIT); |
| 80 | - position.y += velocity.y *sin(radians); | 85 | + position.y += velocity.y * sin(radians); |
| 81 | position.x += velocity.x * cos(radians); | 86 | position.x += velocity.x * cos(radians); |
| 82 | 87 | ||
| 83 | velocity *= 0.990f; | 88 | velocity *= 0.990f; |
examples/particle-system/effects/sparkles-effect-modifier.h
| @@ -25,6 +25,7 @@ | @@ -25,6 +25,7 @@ | ||
| 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | #include <dali-toolkit/public-api/particle-system/particle.h> | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | #include <dali/public-api/common/vector-wrapper.h> | 27 | #include <dali/public-api/common/vector-wrapper.h> |
| 28 | +#include <dali/public-api/object/weak-handle.h> | ||
| 28 | #include <ctime> | 29 | #include <ctime> |
| 29 | 30 | ||
| 30 | namespace Dali::ParticleEffect | 31 | namespace Dali::ParticleEffect |
| @@ -41,7 +42,7 @@ public: | @@ -41,7 +42,7 @@ public: | ||
| 41 | 42 | ||
| 42 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; | 43 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 43 | 44 | ||
| 44 | - ParticleEmitter mEmitter; | 45 | + Dali::WeakHandle<ParticleEmitter> mEmitter; |
| 45 | uint32_t mStreamBasePos{0u}; | 46 | uint32_t mStreamBasePos{0u}; |
| 46 | uint32_t mStreamBaseAngle{0u}; | 47 | uint32_t mStreamBaseAngle{0u}; |
| 47 | uint32_t mAngle{0u}; | 48 | uint32_t mAngle{0u}; |
examples/particle-system/effects/sparkles-effect-source.cpp
| @@ -39,12 +39,22 @@ mEmitter(emitter) | @@ -39,12 +39,22 @@ mEmitter(emitter) | ||
| 39 | 39 | ||
| 40 | void SparklesSource::Init() | 40 | void SparklesSource::Init() |
| 41 | { | 41 | { |
| 42 | - mStreamBasePos = mEmitter.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | ||
| 43 | - mStreamBaseAngle = mEmitter.GetParticleList().AddLocalStream<float>(0.0f); | 42 | + auto handle = mEmitter.GetHandle(); |
| 43 | + if(!handle) | ||
| 44 | + { | ||
| 45 | + return; | ||
| 46 | + } | ||
| 47 | + mStreamBasePos = handle.GetParticleList().AddLocalStream<Vector3>(Vector3::ZERO); | ||
| 48 | + mStreamBaseAngle = handle.GetParticleList().AddLocalStream<float>(0.0f); | ||
| 44 | } | 49 | } |
| 45 | 50 | ||
| 46 | uint32_t SparklesSource::Update(ParticleList& particleList, uint32_t count) | 51 | uint32_t SparklesSource::Update(ParticleList& particleList, uint32_t count) |
| 47 | { | 52 | { |
| 53 | + if(!mStreamBasePos || !mStreamBaseAngle) | ||
| 54 | + { | ||
| 55 | + return 0u; | ||
| 56 | + } | ||
| 57 | + | ||
| 48 | while(count--) | 58 | while(count--) |
| 49 | { | 59 | { |
| 50 | auto particle = particleList.NewParticle(LIFETIME); | 60 | auto particle = particleList.NewParticle(LIFETIME); |
examples/particle-system/effects/sparkles-effect-source.h
| @@ -23,6 +23,8 @@ | @@ -23,6 +23,8 @@ | ||
| 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> | 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | #include <dali-toolkit/public-api/particle-system/particle.h> | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | +#include <dali/public-api/object/weak-handle.h> | ||
| 27 | + | ||
| 26 | #include <ctime> | 28 | #include <ctime> |
| 27 | 29 | ||
| 28 | namespace Dali::ParticleEffect | 30 | namespace Dali::ParticleEffect |
| @@ -43,7 +45,7 @@ public: | @@ -43,7 +45,7 @@ public: | ||
| 43 | 45 | ||
| 44 | void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale, float& angle); | 46 | void UpdateParticle(Vector3& position, Vector3& basePosition, Vector4& color, Vector3& velocity, Vector3& scale, float& angle); |
| 45 | 47 | ||
| 46 | - ParticleEmitter mEmitter; | 48 | + Dali::WeakHandle<ParticleEmitter> mEmitter; |
| 47 | 49 | ||
| 48 | Dali::Vector2 mRadius; | 50 | Dali::Vector2 mRadius; |
| 49 | 51 |