Particle System
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / public-api / particle-system / particle-emitter.cpp
1 /*
2  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali-toolkit/public-api/particle-system/particle-emitter.h>
20
21 // INTERNAL INCLUDES
22 #include <dali-toolkit/public-api/particle-system/particle-source.h>
23 #include <dali-toolkit/internal/particle-system/particle-emitter-impl.h>
24
25 // EXTERNAL INCLUDES
26 #include <utility>
27
28 namespace Dali::Toolkit::ParticleSystem
29 {
30
31 ParticleEmitter ParticleEmitter::New()
32 {
33   return {new Dali::Toolkit::ParticleSystem::Internal::ParticleEmitter()};
34 }
35
36 ParticleEmitter ParticleEmitter::DownCast(BaseHandle handle)
37 {
38   return {dynamic_cast<Internal::ParticleEmitter*>(handle.GetObjectPtr())};
39 }
40
41 void ParticleEmitter::SetSource(const ParticleSource& particleSource)
42 {
43   GetImplementation(*this).SetSource(particleSource);
44 }
45
46 ParticleSource ParticleEmitter::GetSource() const
47 {
48   return GetImplementation(*this).GetSource();
49 }
50
51 void ParticleEmitter::SetDomain(const ParticleDomain& particleDomain)
52 {
53   GetImplementation(*this).SetDomain(particleDomain);
54 }
55
56 void ParticleEmitter::SetRenderer(const ParticleRenderer& particleRenderer)
57 {
58   GetImplementation(*this).SetRenderer(particleRenderer);
59 }
60
61 void ParticleEmitter::SetParticleCount(uint32_t maxParticleCount)
62 {
63   GetImplementation(*this).SetParticleCount(maxParticleCount);
64 }
65
66 ParticleDomain ParticleEmitter::GetDomain() const
67 {
68   return GetImplementation(*this).GetDomain();
69 }
70
71 ParticleRenderer ParticleEmitter::GetRenderer() const
72 {
73   return GetImplementation(*this).GetRenderer();
74 }
75
76 uint32_t ParticleEmitter::AddModifier(const ParticleModifier& particleModifier)
77 {
78   return GetImplementation(*this).AddModifier(particleModifier);
79 }
80
81 ParticleModifier ParticleEmitter::GetModifierAt(uint32_t index)
82 {
83   return GetImplementation(*this).GetModifierAt(index);
84 }
85
86 void ParticleEmitter::RemoveModifierAt(uint32_t index)
87 {
88   return GetImplementation(*this).RemoveModifierAt(index);
89 }
90
91 void ParticleEmitter::AttachTo(Actor actor)
92 {
93   GetImplementation(*this).AttachTo(std::move(actor));
94 }
95
96 ParticleEmitter::ParticleEmitter(Internal::ParticleEmitter* impl)
97 : Dali::BaseHandle(impl)
98 {
99 }
100
101 ParticleEmitter::Status ParticleEmitter::GetStatus() const
102 {
103   return GetImplementation(*this).GetStatus();
104 }
105
106 ParticleList& ParticleEmitter::GetParticleList()
107 {
108   return GetImplementation(*this).GetParticleList();
109 }
110
111 void ParticleEmitter::Start()
112 {
113   GetImplementation(*this).Start();
114 }
115
116 void ParticleEmitter::Stop()
117 {
118   GetImplementation(*this).Stop();
119 }
120
121 void ParticleEmitter::SetEmissionRate(uint32_t ratePerSecond)
122 {
123   GetImplementation(*this).SetEmissionRate(ratePerSecond);
124 }
125
126 uint32_t ParticleEmitter::GetEmissionRate() const
127 {
128   return GetImplementation(*this).GetEmissionRate();
129 }
130
131 [[maybe_unused]] void ParticleEmitter::EnableParallelProcessing(bool enabled)
132 {
133   GetImplementation(*this).EnableParallelProcessing(enabled);
134 }
135
136 bool ParticleEmitter::IsParallelProcessingEnabled() const
137 {
138   return GetImplementation(*this).IsParallelProcessingEnabled();
139 }
140
141 void ParticleEmitter::SetInitialParticleCount(uint32_t count)
142 {
143   GetImplementation(*this).SetInitialParticleCount(count);
144 }
145
146 uint32_t ParticleEmitter::GetInitialParticleCount() const
147 {
148   return GetImplementation(*this).GetInitialParticleCount();
149 }
150
151 void ParticleEmitter::SetActiveParticlesLimit(uint32_t count)
152 {
153   GetImplementation(*this).SetActiveParticlesLimit(count);
154 }
155
156 uint32_t ParticleEmitter::GetActiveParticlesLimit() const
157 {
158   return GetImplementation(*this).GetActiveParticlesLimit();
159 }
160
161 } // namespace Dali::Toolkit::ParticleSystem