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 | 55 | // Retrieve the Source and get the stream |
| 56 | 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 | 66 | // Missing stream, return! | ... | ... |
examples/particle-system/effects/fire-ring-effect-modifier.h
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | 27 | #include <dali/public-api/common/vector-wrapper.h> |
| 28 | +#include <dali/public-api/object/weak-handle.h> | |
| 28 | 29 | #include <ctime> |
| 29 | 30 | |
| 30 | 31 | namespace Dali::ParticleEffect |
| ... | ... | @@ -76,7 +77,7 @@ public: |
| 76 | 77 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 77 | 78 | |
| 78 | 79 | ColorGradient mFireGradient; |
| 79 | - ParticleEmitter mEmitter; | |
| 80 | + Dali::WeakHandle<ParticleEmitter> mEmitter; | |
| 80 | 81 | uint32_t mStreamBasePos{0u}; |
| 81 | 82 | uint32_t mAngle{0u}; |
| 82 | 83 | }; | ... | ... |
examples/particle-system/effects/fire-ring-effect-source.cpp
| ... | ... | @@ -40,7 +40,11 @@ mEmitter(emitter) |
| 40 | 40 | |
| 41 | 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 | 50 | uint32_t FireSource::Update(ParticleList& particleList, uint32_t count) | ... | ... |
examples/particle-system/effects/fire-ring-effect-source.h
| ... | ... | @@ -23,6 +23,7 @@ |
| 23 | 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 24 | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | +#include <dali/public-api/object/weak-handle.h> | |
| 26 | 27 | #include <ctime> |
| 27 | 28 | |
| 28 | 29 | namespace Dali::ParticleEffect |
| ... | ... | @@ -43,7 +44,7 @@ public: |
| 43 | 44 | |
| 44 | 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 | 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 | 44 | // Retrieve the Source and get the stream |
| 45 | 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 | 55 | // Missing stream, return! | ... | ... |
examples/particle-system/effects/image-effect-modifier.h
| ... | ... | @@ -24,6 +24,7 @@ |
| 24 | 24 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | +#include <dali/public-api/object/weak-handle.h> | |
| 27 | 28 | #include <ctime> |
| 28 | 29 | |
| 29 | 30 | namespace Dali::ParticleEffect |
| ... | ... | @@ -40,7 +41,7 @@ public: |
| 40 | 41 | |
| 41 | 42 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 42 | 43 | |
| 43 | - ParticleEmitter mEmitter; | |
| 44 | + WeakHandle<ParticleEmitter> mEmitter; | |
| 44 | 45 | uint32_t mStreamBasePos{0u}; |
| 45 | 46 | float mAngle{0.0f}; |
| 46 | 47 | ... | ... |
examples/particle-system/effects/image-effect-source.cpp
| ... | ... | @@ -64,12 +64,16 @@ mEmitter(emitter) |
| 64 | 64 | |
| 65 | 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 | 74 | uint32_t ImageExplodeEffectSource::Update(ParticleList& particleList, uint32_t count) |
| 71 | 75 | { |
| 72 | - if(!mShouldEmit) | |
| 76 | + if(!mShouldEmit || !mStreamBasePos) | |
| 73 | 77 | { |
| 74 | 78 | return 0; |
| 75 | 79 | } | ... | ... |
examples/particle-system/effects/image-effect-source.h
| ... | ... | @@ -24,6 +24,7 @@ |
| 24 | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | 26 | #include <dali/devel-api/adaptor-framework/pixel-buffer.h> |
| 27 | +#include <dali/public-api/object/weak-handle.h> | |
| 27 | 28 | #include <ctime> |
| 28 | 29 | |
| 29 | 30 | namespace Dali::ParticleEffect |
| ... | ... | @@ -46,7 +47,7 @@ public: |
| 46 | 47 | |
| 47 | 48 | void Init() override; |
| 48 | 49 | |
| 49 | - ParticleEmitter mEmitter; | |
| 50 | + WeakHandle<ParticleEmitter> mEmitter; | |
| 50 | 51 | |
| 51 | 52 | uint32_t mImageWidth{0u}; |
| 52 | 53 | uint32_t mImageHeight{0u}; | ... | ... |
examples/particle-system/effects/particle-effect.h
examples/particle-system/effects/sparkles-effect-modifier.cpp
| ... | ... | @@ -42,13 +42,18 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 |
| 42 | 42 | mAngle = ((mAngle + 2) % 360); |
| 43 | 43 | |
| 44 | 44 | // Retrieve the Source and get the stream |
| 45 | + auto handle = mEmitter.GetHandle(); | |
| 46 | + if(!handle) | |
| 47 | + { | |
| 48 | + return; | |
| 49 | + } | |
| 45 | 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 | 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 | 59 | // Missing stream, return! |
| ... | ... | @@ -77,7 +82,7 @@ void SparklesModifier::Update(ParticleList& particleList, uint32_t first, uint32 |
| 77 | 82 | auto angle = particle.GetByIndex<float>(mStreamBaseAngle); |
| 78 | 83 | auto radians = ((angle * M_PI)/180.f); |
| 79 | 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 | 86 | position.x += velocity.x * cos(radians); |
| 82 | 87 | |
| 83 | 88 | velocity *= 0.990f; | ... | ... |
examples/particle-system/effects/sparkles-effect-modifier.h
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 26 | 26 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 27 | 27 | #include <dali/public-api/common/vector-wrapper.h> |
| 28 | +#include <dali/public-api/object/weak-handle.h> | |
| 28 | 29 | #include <ctime> |
| 29 | 30 | |
| 30 | 31 | namespace Dali::ParticleEffect |
| ... | ... | @@ -41,7 +42,7 @@ public: |
| 41 | 42 | |
| 42 | 43 | void Update(ParticleList& particleList, uint32_t first, uint32_t count) override; |
| 43 | 44 | |
| 44 | - ParticleEmitter mEmitter; | |
| 45 | + Dali::WeakHandle<ParticleEmitter> mEmitter; | |
| 45 | 46 | uint32_t mStreamBasePos{0u}; |
| 46 | 47 | uint32_t mStreamBaseAngle{0u}; |
| 47 | 48 | uint32_t mAngle{0u}; | ... | ... |
examples/particle-system/effects/sparkles-effect-source.cpp
| ... | ... | @@ -39,12 +39,22 @@ mEmitter(emitter) |
| 39 | 39 | |
| 40 | 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 | 51 | uint32_t SparklesSource::Update(ParticleList& particleList, uint32_t count) |
| 47 | 52 | { |
| 53 | + if(!mStreamBasePos || !mStreamBaseAngle) | |
| 54 | + { | |
| 55 | + return 0u; | |
| 56 | + } | |
| 57 | + | |
| 48 | 58 | while(count--) |
| 49 | 59 | { |
| 50 | 60 | auto particle = particleList.NewParticle(LIFETIME); | ... | ... |
examples/particle-system/effects/sparkles-effect-source.h
| ... | ... | @@ -23,6 +23,8 @@ |
| 23 | 23 | #include <dali-toolkit/public-api/particle-system/particle-modifier.h> |
| 24 | 24 | #include <dali-toolkit/public-api/particle-system/particle-list.h> |
| 25 | 25 | #include <dali-toolkit/public-api/particle-system/particle.h> |
| 26 | +#include <dali/public-api/object/weak-handle.h> | |
| 27 | + | |
| 26 | 28 | #include <ctime> |
| 27 | 29 | |
| 28 | 30 | namespace Dali::ParticleEffect |
| ... | ... | @@ -43,7 +45,7 @@ public: |
| 43 | 45 | |
| 44 | 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 | 50 | Dali::Vector2 mRadius; |
| 49 | 51 | ... | ... |