2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <dali-toolkit/public-api/particle-system/particle-domain.h>
20 #include <dali-toolkit/public-api/particle-system/particle-emitter.h>
21 #include <dali-toolkit/public-api/particle-system/particle-list.h>
22 #include <dali-toolkit/public-api/particle-system/particle-modifier.h>
23 #include <dali-toolkit/public-api/particle-system/particle-renderer.h>
24 #include <dali-toolkit/public-api/particle-system/particle-source.h>
25 #include <dali-toolkit/public-api/particle-system/particle.h>
28 #include <dali-csharp-binder/common/common.h>
34 using namespace Dali::Toolkit::ParticleSystem;
37 * Generic ParticleSource for NUI apps
40 typedef void (*SourceInitCallbackInvoker)(void*);
41 typedef uint32_t (*SourceUpdateCallbackInvoker)(void*, uint32_t); // delegate, parameters
42 class ParticleSourceNUI : public Dali::Toolkit::ParticleSystem::ParticleSourceInterface
45 ParticleSourceNUI(SourceInitCallbackInvoker onInitDelegate, SourceUpdateCallbackInvoker onUpdateDelegate)
47 mOnInitInvoker = onInitDelegate;
48 mOnUpdateInvoker = onUpdateDelegate;
51 void SetBaseObjectPtr(void* basePtr)
53 mBaseObjectPtr = basePtr;
56 uint32_t Update(ParticleList& outList, uint32_t count) override
58 // NUI side must use EmitterProxy.NewParticle() to create new particle
59 return mOnUpdateInvoker(mBaseObjectPtr, count);
63 * @brief Called when source is added to the emitter
67 mOnInitInvoker(mBaseObjectPtr);
70 static SourceInitCallbackInvoker mOnInitInvoker;
71 static SourceUpdateCallbackInvoker mOnUpdateInvoker;
76 typedef void (*ModifierUpdateCallbackInvoker)(void*, void*, uint32_t, uint32_t); // delegate, parameters
77 class ParticleModifierNUI : public Dali::Toolkit::ParticleSystem::ParticleModifierInterface
80 ParticleModifierNUI(ModifierUpdateCallbackInvoker onUpdateDelegate)
82 mOnUpdateInvoker = onUpdateDelegate;
85 void SetBaseObjectPtr(void* basePtr)
87 mBaseObjectPtr = basePtr;
90 void Update(ParticleList& outList, uint32_t firstParticleIndex, uint32_t count) override
92 // mOnUpdateInvoker(mBaseObjectPtr, new ParticleList(outList), firstParticleIndex, count);
93 std::vector<int32_t> ptrList;
94 ptrList.reserve(count);
95 auto& particleList = outList.GetActiveParticles();
96 for(auto& item : particleList)
98 ptrList.emplace_back(item.GetIndex());
100 mOnUpdateInvoker(mBaseObjectPtr, ptrList.data(), firstParticleIndex, count);
103 static ModifierUpdateCallbackInvoker mOnUpdateInvoker;
104 void* mBaseObjectPtr;
107 extern "C++" SourceInitCallbackInvoker ParticleSourceNUI::mOnInitInvoker;
108 extern "C++" SourceUpdateCallbackInvoker ParticleSourceNUI::mOnUpdateInvoker;
109 extern "C++" ModifierUpdateCallbackInvoker ParticleModifierNUI::mOnUpdateInvoker;
111 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_New_SWIG_0(void* csView)
113 ParticleEmitter result;
117 result = ParticleEmitter::New();
118 result.AttachTo(*(Dali::Actor*)csView);
120 // Create internal renderer (not exposed to C#)
121 ParticleRenderer renderer = ParticleRenderer::New();
122 result.SetRenderer(renderer);
124 // Add dummy particle domain (not supported in NUI) so emitter won't cry
125 ParticleDomain domain = ParticleDomain::New();
126 result.SetDomain(domain);
128 CALL_CATCH_EXCEPTION(0);
131 return new ParticleEmitter((const ParticleEmitter&)result);
134 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleEmitter_SWIG_0()
136 ParticleEmitter* result = 0;
141 result = (ParticleEmitter*)new ParticleEmitter();
143 CALL_CATCH_EXCEPTION(0);
145 return (void*)result;
148 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleEmitter_SWIG_1(void* csParticleEmitter)
150 ParticleEmitter* particleEmitter = (ParticleEmitter*)csParticleEmitter;
151 ParticleEmitter* result = 0;
155 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleEmitter const & type is null", 0);
161 result = (ParticleEmitter*)new ParticleEmitter((ParticleEmitter const&)*particleEmitter);
163 CALL_CATCH_EXCEPTION(0);
166 return (void*)result;
169 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_ParticleEmitter(void* csParticleEmitter)
171 ParticleEmitter* particleEmitter = (ParticleEmitter*)csParticleEmitter;
175 delete particleEmitter;
177 CALL_CATCH_EXCEPTION();
181 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_Assign(void* csDestination, void* csSource)
183 ParticleEmitter* destination = (ParticleEmitter*)csDestination;
184 ParticleEmitter* source = (ParticleEmitter*)csSource;
185 ParticleEmitter* result = 0;
189 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleEmitter const & type is null", 0);
195 result = (ParticleEmitter*)&(destination)->operator=((ParticleEmitter const&)*source);
197 CALL_CATCH_EXCEPTION(0);
200 return (void*)result;
203 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_particleEmitter_DownCast(void* csHandle)
205 Dali::BaseHandle* handle = (Dali::BaseHandle*)csHandle;
206 ParticleEmitter result;
210 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
216 result = ParticleEmitter::DownCast(*handle);
218 CALL_CATCH_EXCEPTION(0);
221 return new ParticleEmitter((const ParticleEmitter&)result);
224 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetSource(void* csThis, void* csSource)
226 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
227 ParticleSource* source = (ParticleSource*)csSource;
231 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
236 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleSource", 0);
242 puts("Setting source");
243 emitter->SetSource(*source);
246 CALL_CATCH_EXCEPTION();
250 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetDomain(void* csThis, void* csDomain)
252 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
253 ParticleDomain* domain = (ParticleDomain*)csDomain;
257 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
262 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleDomain", 0);
268 emitter->SetDomain(*domain);
270 CALL_CATCH_EXCEPTION();
274 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetRenderer(void* csThis, void* csRenderer)
276 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
277 ParticleRenderer* renderer = (ParticleRenderer*)csRenderer;
281 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
286 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleRenderer", 0);
292 emitter->SetRenderer(*renderer);
294 CALL_CATCH_EXCEPTION();
298 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetParticleCount(void* csThis, uint32_t count)
300 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
303 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
309 emitter->SetParticleCount(count);
311 CALL_CATCH_EXCEPTION();
315 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetParticleCount(void* csThis)
317 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
320 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
326 return emitter->GetParticleCount();
328 CALL_CATCH_EXCEPTION(0);
332 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetSource(void* csThis)
334 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
335 ParticleSource source;
338 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
344 source = emitter->GetSource();
346 CALL_CATCH_EXCEPTION(0);
349 ParticleSource* result = new ParticleSource((const ParticleSource&)source);
353 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetDomain(void* csThis)
355 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
356 ParticleDomain domain;
359 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
365 domain = emitter->GetDomain();
367 CALL_CATCH_EXCEPTION(0);
370 ParticleDomain* result = new ParticleDomain((const ParticleDomain&)domain);
374 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetRenderer(void* csThis)
376 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
377 ParticleRenderer renderer;
380 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
386 renderer = emitter->GetRenderer();
388 CALL_CATCH_EXCEPTION(0);
391 ParticleRenderer* result = new ParticleRenderer((const ParticleRenderer&)renderer);
395 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_AddModifier(void* csThis, void* csModifier)
397 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
398 ParticleModifier* modifier = (ParticleModifier*)csModifier;
402 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
407 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleModifier", 0);
413 emitter->AddModifier(*modifier);
415 CALL_CATCH_EXCEPTION();
419 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetEmissionRate(void* csThis, uint32_t ratePerSecond)
421 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
424 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
430 emitter->SetEmissionRate(ratePerSecond);
432 CALL_CATCH_EXCEPTION();
436 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetInitialParticleCount(void* csThis, uint32_t count)
438 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
441 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
447 emitter->SetInitialParticleCount(count);
449 CALL_CATCH_EXCEPTION();
453 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_SetActiveParticlesLimit(void* csThis, uint32_t limit)
455 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
458 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
464 emitter->SetActiveParticlesLimit(limit);
466 CALL_CATCH_EXCEPTION();
470 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_Start(void* csThis)
472 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
475 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
483 CALL_CATCH_EXCEPTION();
487 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_Stop(void* csThis)
489 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
492 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
500 CALL_CATCH_EXCEPTION();
504 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetEmissionRate(void* csThis)
506 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
509 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
515 return emitter->GetEmissionRate();
517 CALL_CATCH_EXCEPTION(0);
521 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetInitialParticleCount(void* csThis)
523 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
526 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
532 return emitter->GetInitialParticleCount();
534 CALL_CATCH_EXCEPTION(0);
538 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetActiveParticleLimit(void* csThis)
540 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
543 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
549 return emitter->GetActiveParticlesLimit();
551 CALL_CATCH_EXCEPTION(0);
555 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleEmitter_RemoveModifierAt(void* csThis, uint32_t location)
557 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
560 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
566 emitter->RemoveModifierAt(location);
568 CALL_CATCH_EXCEPTION();
572 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_ParticleEmitter_NewParticle(void* csEmitter, float lifetime)
574 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
577 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
583 Particle p = emitter->GetParticleList().NewParticle(lifetime);
584 return int(p.GetIndex());
586 CALL_CATCH_EXCEPTION(-1);
590 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleEmitter_GetParticleList(void* csThis)
592 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
596 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
602 list = emitter->GetParticleList();
604 CALL_CATCH_EXCEPTION(0);
607 ParticleList* result = new ParticleList((const ParticleList&)list);
611 // void AttachTo(Actor actor);
612 //[[nodiscard]] Status GetStatus() const;
614 // Class: ParticleSource
615 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleSource_New_SWIG_0(SourceInitCallbackInvoker onInitInvoker, SourceUpdateCallbackInvoker onUpdateInvoker, void** refObject)
617 ParticleSource result;
621 result = ParticleSource::New<ParticleSourceNUI>(onInitInvoker, onUpdateInvoker);
622 auto& clbk = static_cast<ParticleSourceNUI&>(result.GetSourceCallback());
623 clbk.SetBaseObjectPtr(result.GetObjectPtr());
624 *refObject = result.GetObjectPtr();
626 CALL_CATCH_EXCEPTION(0);
629 return new ParticleSource((const ParticleSource&)result);
632 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleSource_SWIG_0()
634 ParticleSource* result = 0;
639 result = (ParticleSource*)new ParticleSource();
641 CALL_CATCH_EXCEPTION(0);
644 return (void*)result;
647 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleSource_SWIG_1(void* csParticleSource)
649 ParticleSource* particleEmitter = (ParticleSource*)csParticleSource;
650 ParticleSource* result = 0;
654 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleSource const & type is null", 0);
660 result = (ParticleSource*)new ParticleSource((ParticleSource const&)*particleEmitter);
662 CALL_CATCH_EXCEPTION(0);
665 return (void*)result;
668 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_ParticleSource(void* csParticleSource)
670 ParticleSource* particleEmitter = (ParticleSource*)csParticleSource;
674 delete particleEmitter;
676 CALL_CATCH_EXCEPTION();
680 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleSource_Assign(void* csDestination, void* csSource)
682 ParticleSource* destination = (ParticleSource*)csDestination;
683 ParticleSource* source = (ParticleSource*)csSource;
684 ParticleSource* result = 0;
688 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleSource const & type is null", 0);
694 result = (ParticleSource*)&(destination)->operator=((ParticleSource const&)*source);
696 CALL_CATCH_EXCEPTION(0);
699 return (void*)result;
702 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleSource_DownCast(void* csHandle)
704 Dali::BaseHandle* handle = (Dali::BaseHandle*)csHandle;
705 ParticleSource result;
709 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleSource", 0);
715 result = ParticleSource::DownCast(*handle);
717 CALL_CATCH_EXCEPTION(0);
720 return new ParticleSource((const ParticleSource&)result);
723 // Class: ParticleModifier
724 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleModifier_New_SWIG_0(ModifierUpdateCallbackInvoker onUpdateInvoker, void** basePtr)
726 ParticleModifier result;
730 result = ParticleModifier::New<ParticleModifierNUI>(onUpdateInvoker);
731 auto& clbk = static_cast<ParticleModifierNUI&>(result.GetModifierCallback());
732 clbk.SetBaseObjectPtr(result.GetObjectPtr());
733 *basePtr = result.GetObjectPtr();
734 printf("BasePtr: %p\n", *basePtr);
736 CALL_CATCH_EXCEPTION(0);
739 return new ParticleModifier((const ParticleModifier&)result);
742 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleModifier_SWIG_0()
744 ParticleModifier* result = 0;
749 result = (ParticleModifier*)new ParticleModifier();
751 CALL_CATCH_EXCEPTION(0);
754 return (void*)result;
757 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleModifier_SWIG_1(void* csParticleModifier)
759 ParticleModifier* particleEmitter = (ParticleModifier*)csParticleModifier;
760 ParticleModifier* result = 0;
764 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleModifier const & type is null", 0);
770 result = (ParticleModifier*)new ParticleModifier((ParticleModifier const&)*particleEmitter);
772 CALL_CATCH_EXCEPTION(0);
775 return (void*)result;
778 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_ParticleModifier(void* csParticleModifier)
780 ParticleModifier* particleEmitter = (ParticleModifier*)csParticleModifier;
784 delete particleEmitter;
786 CALL_CATCH_EXCEPTION();
790 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleModifier_Assign(void* csDestination, void* csSource)
792 ParticleModifier* destination = (ParticleModifier*)csDestination;
793 ParticleModifier* source = (ParticleModifier*)csSource;
794 ParticleModifier* result = 0;
798 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleModifier const & type is null", 0);
804 result = (ParticleModifier*)&(destination)->operator=((ParticleModifier const&)*source);
806 CALL_CATCH_EXCEPTION(0);
809 return (void*)result;
812 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleModifier_DownCast(void* csHandle)
814 Dali::BaseHandle* handle = (Dali::BaseHandle*)csHandle;
815 ParticleModifier result;
819 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleModifier", 0);
825 result = ParticleModifier::DownCast(*handle);
827 CALL_CATCH_EXCEPTION(0);
830 return new ParticleModifier((const ParticleModifier&)result);
833 // Class: ParticleList
834 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleList_New_SWIG_0(void* csEmitter)
836 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
837 auto result = emitter->GetParticleList();
839 printf("CSharp_Dali_ParticleList_New_SWIG_0: %p", result.GetObjectPtr());
841 return new ParticleList((const ParticleList&)result);
844 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleList_SWIG_0()
846 ParticleList* result = 0;
851 result = (ParticleList*)new ParticleList();
853 CALL_CATCH_EXCEPTION(0);
856 return (void*)result;
859 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_ParticleList_SWIG_1(void* csParticleList)
861 ParticleList* particleEmitter = (ParticleList*)csParticleList;
862 ParticleList* result = 0;
866 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleList const & type is null", 0);
872 result = (ParticleList*)new ParticleList((ParticleList const&)*particleEmitter);
874 CALL_CATCH_EXCEPTION(0);
877 return (void*)result;
880 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_ParticleList(void* csParticleList)
882 ParticleList* particleEmitter = (ParticleList*)csParticleList;
886 delete particleEmitter;
888 CALL_CATCH_EXCEPTION();
892 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleList_Assign(void* csDestination, void* csSource)
894 ParticleList* destination = (ParticleList*)csDestination;
895 ParticleList* source = (ParticleList*)csSource;
896 ParticleList* result = 0;
900 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "ParticleList const & type is null", 0);
906 result = (ParticleList*)&(destination)->operator=((ParticleList const&)*source);
908 CALL_CATCH_EXCEPTION(0);
911 return (void*)result;
914 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_ParticleList_DownCast(void* csHandle)
916 Dali::BaseHandle* handle = (Dali::BaseHandle*)csHandle;
921 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleList", 0);
927 result = ParticleList::DownCast(*handle);
929 CALL_CATCH_EXCEPTION(0);
932 return new ParticleList((const ParticleList&)result);
935 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleList_GetParticle(void* csThis, uint32_t index)
937 ParticleList* list = (ParticleList*)csThis;
941 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleList", 0);
947 // Must be better way of doing it?
948 auto it = list->GetActiveParticles().begin();
949 std::advance(it, index);
952 CALL_CATCH_EXCEPTION(0);
955 return particle.GetIndex();
958 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleList_GetActiveParticleCount(void* csThis)
960 ParticleList* list = (ParticleList*)csThis;
963 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleList", 0);
969 return list->GetActiveParticleCount();
971 CALL_CATCH_EXCEPTION(0);
975 SWIGEXPORT uint32_t SWIGSTDCALL CSharp_Dali_ParticleList_AddLocalStream(void* csThis, uint32_t streamType, void* defaultValue, uint32_t typeSize)
977 enum class StreamType
988 ParticleEmitter* emitter = (ParticleEmitter*)csThis;
992 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleList", 0);
995 auto list = emitter->GetParticleList();
999 switch(StreamType(streamType))
1001 case StreamType::FLOAT: {
1002 result = list.AddLocalStream<float>(*reinterpret_cast<float*>(defaultValue));
1005 case StreamType::FVEC2:
1006 result = list.AddLocalStream<Dali::Vector2>(*reinterpret_cast<Dali::Vector2*>((Dali::Vector2*)defaultValue));
1008 case StreamType::FVEC3: {
1009 result = list.AddLocalStream<Dali::Vector3>(*reinterpret_cast<Dali::Vector3*>((Dali::Vector3*)defaultValue));
1012 case StreamType::FVEC4:
1013 result = list.AddLocalStream<Dali::Vector4>(*reinterpret_cast<Dali::Vector4*>((Dali::Vector4*)defaultValue));
1015 case StreamType::INTEGER:
1016 result = list.AddLocalStream<int>(*reinterpret_cast<int*>(defaultValue));
1018 case StreamType::IVEC2:
1021 case StreamType::IVEC3:
1024 case StreamType::IVEC4:
1029 CALL_CATCH_EXCEPTION(0);
1035 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_ParticleList_GetDefaultStreamIndex(void* csThis, uint32_t defaultStream)
1037 auto* emitter = (ParticleEmitter*)csThis;
1041 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleList", 0);
1044 auto list = emitter->GetParticleList();
1048 result = list.GetDefaultStreamIndex(defaultStream);
1050 CALL_CATCH_EXCEPTION(-1);
1056 // uint32_t GetActiveParticleCount();
1057 // [[nodiscard]] uint32_t GetCapacity() const;
1058 // Particle NewParticle(float lifetime);
1059 // uint32_t GetParticleDataSize(bool includeLocalStreams);
1061 // std::list<Particle>& GetActiveParticles();
1063 // Particle specific API (only C#)
1064 extern "C++" template<class T>
1065 SWIGEXPORT const T& SWIGSTDCALL CSharp_Dali_Particle_ReadValue(void* csEmitter, uint32_t streamIndex, uint32_t particleIndex)
1067 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
1071 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
1074 auto particleList = emitter->GetParticleList();
1076 return particleList.GetStream<T>(streamIndex)[particleIndex];
1079 SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Particle_ReadFloat(void* csThis, uint32_t streamIndex, uint32_t particleIndex)
1081 return CSharp_Dali_Particle_ReadValue<float>(csThis, streamIndex, particleIndex);
1084 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_ReadVector2(void* csThis, uint32_t streamIndex, uint32_t particleIndex)
1086 return new Dali::Vector2(CSharp_Dali_Particle_ReadValue<Dali::Vector2>(csThis, streamIndex, particleIndex));
1089 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_ReadVector3(void* csThis, uint32_t streamIndex, uint32_t particleIndex)
1091 return new Dali::Vector3(CSharp_Dali_Particle_ReadValue<Dali::Vector3>(csThis, streamIndex, particleIndex));
1094 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_ReadVector4(void* csThis, uint32_t streamIndex, uint32_t particleIndex)
1096 return new Dali::Vector4(CSharp_Dali_Particle_ReadValue<Dali::Vector4>(csThis, streamIndex, particleIndex));
1100 extern "C++" template<class T>
1101 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Particle_WriteValue(void* csEmitter, uint32_t streamIndex, uint32_t particleIndex, T& value)
1103 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
1106 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
1109 auto particleList = emitter->GetParticleList();
1110 T* r = &(particleList.GetStream<T>(streamIndex)[particleIndex]);
1114 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Particle_WriteFloat(void* csThis, uint32_t streamIndex, uint32_t particleIndex, float value)
1116 CSharp_Dali_Particle_WriteValue(csThis, streamIndex, particleIndex, value);
1119 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Particle_WriteVector2(void* csThis, uint32_t streamIndex, uint32_t particleIndex, Dali::Vector2* value)
1121 CSharp_Dali_Particle_WriteValue(csThis, streamIndex, particleIndex, *value);
1124 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Particle_WriteVector3(void* csThis, uint32_t streamIndex, uint32_t particleIndex, Dali::Vector3* value)
1126 CSharp_Dali_Particle_WriteValue(csThis, streamIndex, particleIndex, *value);
1129 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Particle_WriteVector4(void* csThis, uint32_t streamIndex, uint32_t particleIndex, Dali::Vector4* value)
1131 CSharp_Dali_Particle_WriteValue(csThis, streamIndex, particleIndex, *value);
1134 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_GetUnsafe(void* csThis, uint32_t streamIndex, uint32_t elementCount, uint32_t sizeOfElement)
1136 Particle* particle = (Particle*)csThis;
1139 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Particle", 0);
1144 if(sizeOfElement != 4)
1146 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Particle", 0);
1150 switch(elementCount)
1153 return &particle->Get<float>(streamIndex);
1156 return &particle->Get<Dali::Vector2>(streamIndex);
1159 return &particle->Get<Dali::Vector3>(streamIndex);
1162 return &particle->Get<Dali::Vector4>(streamIndex);
1168 // Particle renderer
1170 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleRenderer_SetTexture(void* csEmitter, void* csTexture)
1172 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
1173 Dali::Texture* texture = (Dali::Texture*)csTexture;
1174 ParticleRenderer result;
1178 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
1184 emitter->GetRenderer().SetTexture(*texture);
1186 CALL_CATCH_EXCEPTION();
1190 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ParticleRenderer_SetBlendingMode(void* csEmitter, int blendingMode)
1192 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
1193 BlendingMode mode = BlendingMode(blendingMode);
1197 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
1203 emitter->GetRenderer().SetBlendingMode(mode);
1205 CALL_CATCH_EXCEPTION();
1209 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_ParticleRenderer_GetBlendingMode(void* csEmitter)
1211 ParticleEmitter* emitter = (ParticleEmitter*)csEmitter;
1214 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null ParticleEmitter", 0);
1220 return int(emitter->GetRenderer().GetBlendingMode());
1222 CALL_CATCH_EXCEPTION(0);
1228 SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Particle_New_SWIG_0(void* particleList, float lifetime, uint32_t* outIndex)
1230 ParticleList* list = (ParticleList*)particleList;
1235 result = list->NewParticle(lifetime);
1237 CALL_CATCH_EXCEPTION(0);
1244 // result is body/handle but C# side provides only a view on particle so we return index in the stream
1245 // C# side should bind list and index to access particle data
1246 *outIndex = result.GetIndex();
1250 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_Particle_SWIG_0()
1252 Particle* result = 0;
1257 result = (Particle*)new Particle();
1259 CALL_CATCH_EXCEPTION(0);
1262 return (void*)result;
1265 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_new_Particle_SWIG_1(void* csParticle)
1267 Particle* particle = (Particle*)csParticle;
1268 Particle* result = 0;
1272 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Particle const & type is null", 0);
1278 result = (Particle*)new Particle((Particle const&)*particle);
1280 CALL_CATCH_EXCEPTION(0);
1283 return (void*)result;
1286 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Particle(void* csParticle)
1288 Particle* particle = (Particle*)csParticle;
1294 CALL_CATCH_EXCEPTION();
1298 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_Assign(void* csDestination, void* csSource)
1300 Particle* destination = (Particle*)csDestination;
1301 Particle* source = (Particle*)csSource;
1302 Particle* result = 0;
1306 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Particle const & type is null", 0);
1312 result = (Particle*)&(destination)->operator=((Particle const&)*source);
1314 CALL_CATCH_EXCEPTION(0);
1317 return (void*)result;
1320 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Particle_DownCast(void* csHandle)
1322 Dali::BaseHandle* handle = (Dali::BaseHandle*)csHandle;
1327 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Particle", 0);
1333 result = Particle::DownCast(*handle);
1335 CALL_CATCH_EXCEPTION(0);
1338 return new Particle((const Particle&)result);