Commit 9f6aa2688656686dd4782c2b88848baebe3594ae

Authored by Adam Bialogonski
1 parent bff9106e

Immortal emitter is now mortal as it should be.

Change-Id: I6709952446a8cb5ccdf6c6e1691600e42bff7e7a
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&amp; 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
... ... @@ -55,10 +55,6 @@ public:
55 55 ~ParticleEffect();
56 56  
57 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&amp; 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&amp; 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  
... ...