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,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&amp; particleList, uint32_t fir @@ -44,7 +44,12 @@ void ImageExplodeEffectModifier::Update(ParticleList&amp; 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&amp; particleList, uint32_t first, uint32 @@ -42,13 +42,18 @@ void SparklesModifier::Update(ParticleList&amp; 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&amp; particleList, uint32_t first, uint32 @@ -77,7 +82,7 @@ void SparklesModifier::Update(ParticleList&amp; 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