Unravel Engine C++ Reference
Loading...
Searching...
No Matches
particle_emitter_component_bindings.cpp
Go to the documentation of this file.
2#include "script_bindings.h"
3
4#include "../script_interop.h"
5
8
9namespace unravel
10{
11namespace
12{
13
14//------------------------------
15
16auto internal_m2n_particle_emitter_get_enabled(entt::entity id) -> bool
17{
19 {
20 return comp->is_enabled();
21 }
22 return false;
23}
24
25void internal_m2n_particle_emitter_set_enabled(entt::entity id, bool enabled)
26{
28 {
29 comp->set_enabled(enabled);
30 }
31}
32
33auto internal_m2n_particle_emitter_get_max_particles(entt::entity id) -> uint32_t
34{
36 {
37 return comp->get_max_particles();
38 }
39 return 0;
40}
41
42void internal_m2n_particle_emitter_set_max_particles(entt::entity id, uint32_t max_particles)
43{
45 {
46 comp->set_max_particles(max_particles);
47 }
48}
49
50auto internal_m2n_particle_emitter_get_shape(entt::entity id) -> int
51{
53 {
54 return static_cast<int>(comp->get_shape());
55 }
56 return 0;
57}
58
59void internal_m2n_particle_emitter_set_shape(entt::entity id, int shape)
60{
62 {
63 comp->set_shape(static_cast<ps_soa::emitter_shape>(shape));
64 }
65}
66
67auto internal_m2n_particle_emitter_get_direction(entt::entity id) -> int
68{
70 {
71 return static_cast<int>(comp->get_direction());
72 }
73 return 0;
74}
75
76void internal_m2n_particle_emitter_set_direction(entt::entity id, int direction)
77{
79 {
80 comp->set_direction(static_cast<ps_soa::emitter_direction>(direction));
81 }
82}
83
84auto internal_m2n_particle_emitter_get_gravity_scale(entt::entity id) -> float
85{
87 {
88 return comp->get_gravity_scale();
89 }
90 return 0.0f;
91}
92
93void internal_m2n_particle_emitter_set_gravity_scale(entt::entity id, float scale)
94{
96 {
97 comp->set_gravity_scale(scale);
98 }
99}
100
101auto internal_m2n_particle_emitter_get_emission_rate(entt::entity id) -> float
102{
104 {
105 return comp->get_emission_rate();
106 }
107 return 0.0f;
108}
109
110void internal_m2n_particle_emitter_set_emission_rate(entt::entity id, float rate)
111{
113 {
114 comp->set_emission_rate(rate);
115 }
116}
117
118auto internal_m2n_particle_emitter_get_temporal_motion(entt::entity id) -> float
119{
121 {
122 return comp->get_temporal_motion();
123 }
124 return 0.0f;
125}
126
127void internal_m2n_particle_emitter_set_temporal_motion(entt::entity id, float motion)
128{
130 {
131 comp->set_temporal_motion(motion);
132 }
133}
134
135auto internal_m2n_particle_emitter_get_velocity_damping(entt::entity id) -> float
136{
138 {
139 return comp->get_velocity_damping();
140 }
141 return 0.0f;
142}
143
144void internal_m2n_particle_emitter_set_velocity_damping(entt::entity id, float damping)
145{
147 {
148 comp->set_velocity_damping(damping);
149 }
150}
151
152auto internal_m2n_particle_emitter_get_opacity(entt::entity id) -> float
153{
155 {
156 return comp->get_opacity();
157 }
158 return 1.0f;
159}
160
161void internal_m2n_particle_emitter_set_opacity(entt::entity id, float opacity)
162{
164 {
165 comp->set_opacity(opacity);
166 }
167}
168
169auto internal_m2n_particle_emitter_get_force_over_lifetime(entt::entity id) -> math::vec3
170{
172 {
173 return comp->get_force_over_lifetime();
174 }
175 return math::vec3{0.0f, 0.0f, 0.0f};
176}
177
178void internal_m2n_particle_emitter_set_force_over_lifetime(entt::entity id, const math::vec3& force)
179{
181 {
182 comp->set_force_over_lifetime(force);
183 }
184}
185
186auto internal_m2n_particle_emitter_get_emission_shape_scale(entt::entity id) -> math::vec3
187{
189 {
190 return comp->get_emission_shape_scale();
191 }
192 return math::vec3{1.0f, 1.0f, 1.0f};
193}
194
195void internal_m2n_particle_emitter_set_emission_shape_scale(entt::entity id, const math::vec3& scale)
196{
198 {
199 comp->set_emission_shape_scale(scale);
200 }
201}
202
203auto internal_m2n_particle_emitter_get_emission_lifetime(entt::entity id) -> float
204{
206 {
207 return comp->get_emission_lifetime().count();
208 }
209 return 0.0f;
210}
211
212void internal_m2n_particle_emitter_set_emission_lifetime(entt::entity id, float lifetime)
213{
215 {
216 comp->set_emission_lifetime(std::chrono::duration<float>(lifetime));
217 }
218}
219
220auto internal_m2n_particle_emitter_get_lifetime(entt::entity id) -> float
221{
223 {
224 return comp->get_lifetime().count();
225 }
226 return 0.0f;
227}
228
229void internal_m2n_particle_emitter_set_lifetime(entt::entity id, float lifetime)
230{
232 {
233 comp->set_lifetime(std::chrono::duration<float>(lifetime));
234 }
235}
236
237auto internal_m2n_particle_emitter_get_position_easing(entt::entity id) -> int
238{
240 {
241 return static_cast<int>(comp->get_position_easing());
242 }
243 return 0;
244}
245
246void internal_m2n_particle_emitter_set_position_easing(entt::entity id, int easing)
247{
249 {
250 comp->set_position_easing(static_cast<bx::Easing::Enum>(easing));
251 }
252}
253
254auto internal_m2n_particle_emitter_get_num_particles(entt::entity id) -> uint32_t
255{
257 {
258 return comp->get_num_particles();
259 }
260 return 0;
261}
262
263auto internal_m2n_particle_emitter_is_playing(entt::entity id) -> bool
264{
266 {
267 return comp->is_playing();
268 }
269 return false;
270}
271
272auto internal_m2n_particle_emitter_is_paused(entt::entity id) -> bool
273{
275 {
276 return comp->is_paused();
277 }
278 return false;
279}
280
281auto internal_m2n_particle_emitter_get_texture(entt::entity id) -> hpp::uuid
282{
284 {
285 return comp->get_texture().uid();
286 }
287 return hpp::uuid{};
288}
289
290void internal_m2n_particle_emitter_set_texture(entt::entity id, const hpp::uuid& texture)
291{
293 {
294 auto& ctx = engine::context();
295 auto& am = ctx.get_cached<asset_manager>();
296 auto handle = am.get_asset<gfx::texture>(texture);
297 comp->set_texture(handle);
298 }
299}
300
301void internal_m2n_particle_emitter_play(entt::entity id)
302{
304 {
305 comp->play();
306 }
307}
308
309void internal_m2n_particle_emitter_stop(entt::entity id)
310{
312 {
313 comp->stop();
314 }
315}
316
317void internal_m2n_particle_emitter_stop_and_reset(entt::entity id)
318{
320 {
321 comp->stop_and_reset();
322 }
323}
324
325void internal_m2n_particle_emitter_pause(entt::entity id)
326{
328 {
329 comp->pause();
330 }
331}
332
333void internal_m2n_particle_emitter_resume(entt::entity id)
334{
336 {
337 comp->resume();
338 }
339}
340
341void internal_m2n_particle_emitter_reset_emitter(entt::entity id)
342{
344 {
345 comp->reset_emitter();
346 }
347}
348
349auto internal_m2n_particle_emitter_get_loop(entt::entity id) -> bool
350{
352 {
353 return comp->is_loop();
354 }
355 return true; // Default to true
356}
357
358void internal_m2n_particle_emitter_set_loop(entt::entity id, bool loop)
359{
361 {
362 comp->set_loop(loop);
363 }
364}
365
366auto internal_m2n_particle_emitter_get_blend_mode(entt::entity id) -> int
367{
369 {
370 return static_cast<int>(comp->get_blend_mode());
371 }
372 return static_cast<int>(ps_soa::blend_mode::normal);
373}
374
375void internal_m2n_particle_emitter_set_blend_mode(entt::entity id, int mode)
376{
378 {
379 comp->set_blend_mode(static_cast<ps_soa::blend_mode>(mode));
380 }
381}
382
383auto internal_m2n_particle_emitter_get_simulation_backend(entt::entity id) -> int
384{
386 {
387 return static_cast<int>(comp->get_simulation_backend());
388 }
389 return static_cast<int>(ps_soa::particle_sim_backend::cpu);
390}
391
392void internal_m2n_particle_emitter_set_simulation_backend(entt::entity id, int backend)
393{
395 {
396 comp->set_simulation_backend(static_cast<ps_soa::particle_sim_backend>(backend));
397 }
398}
399
400} // namespace
401
403{
404 APPLOG_TRACE("{}", __func__);
405
406 auto reg = dotnet::internal_call_registry("Unravel.Core.ParticleEmitterComponent");
407 reg.add_internal_call("internal_m2n_particle_emitter_get_enabled",
408 dotnet_internal_call(internal_m2n_particle_emitter_get_enabled));
409 reg.add_internal_call("internal_m2n_particle_emitter_set_enabled",
410 dotnet_internal_call(internal_m2n_particle_emitter_set_enabled));
411 reg.add_internal_call("internal_m2n_particle_emitter_get_max_particles",
412 dotnet_internal_call(internal_m2n_particle_emitter_get_max_particles));
413 reg.add_internal_call("internal_m2n_particle_emitter_set_max_particles",
414 dotnet_internal_call(internal_m2n_particle_emitter_set_max_particles));
415 reg.add_internal_call("internal_m2n_particle_emitter_get_shape",
416 dotnet_internal_call(internal_m2n_particle_emitter_get_shape));
417 reg.add_internal_call("internal_m2n_particle_emitter_set_shape",
418 dotnet_internal_call(internal_m2n_particle_emitter_set_shape));
419 reg.add_internal_call("internal_m2n_particle_emitter_get_direction",
420 dotnet_internal_call(internal_m2n_particle_emitter_get_direction));
421 reg.add_internal_call("internal_m2n_particle_emitter_set_direction",
422 dotnet_internal_call(internal_m2n_particle_emitter_set_direction));
423 reg.add_internal_call("internal_m2n_particle_emitter_get_gravity_scale",
424 dotnet_internal_call(internal_m2n_particle_emitter_get_gravity_scale));
425 reg.add_internal_call("internal_m2n_particle_emitter_set_gravity_scale",
426 dotnet_internal_call(internal_m2n_particle_emitter_set_gravity_scale));
427 reg.add_internal_call("internal_m2n_particle_emitter_get_emission_rate",
428 dotnet_internal_call(internal_m2n_particle_emitter_get_emission_rate));
429 reg.add_internal_call("internal_m2n_particle_emitter_set_emission_rate",
430 dotnet_internal_call(internal_m2n_particle_emitter_set_emission_rate));
431 reg.add_internal_call("internal_m2n_particle_emitter_get_temporal_motion",
432 dotnet_internal_call(internal_m2n_particle_emitter_get_temporal_motion));
433 reg.add_internal_call("internal_m2n_particle_emitter_set_temporal_motion",
434 dotnet_internal_call(internal_m2n_particle_emitter_set_temporal_motion));
435 reg.add_internal_call("internal_m2n_particle_emitter_get_velocity_damping",
436 dotnet_internal_call(internal_m2n_particle_emitter_get_velocity_damping));
437 reg.add_internal_call("internal_m2n_particle_emitter_set_velocity_damping",
438 dotnet_internal_call(internal_m2n_particle_emitter_set_velocity_damping));
439 reg.add_internal_call("internal_m2n_particle_emitter_get_opacity",
440 dotnet_internal_call(internal_m2n_particle_emitter_get_opacity));
441 reg.add_internal_call("internal_m2n_particle_emitter_set_opacity",
442 dotnet_internal_call(internal_m2n_particle_emitter_set_opacity));
443 reg.add_internal_call("internal_m2n_particle_emitter_get_force_over_lifetime",
444 dotnet_internal_call(internal_m2n_particle_emitter_get_force_over_lifetime));
445 reg.add_internal_call("internal_m2n_particle_emitter_set_force_over_lifetime",
446 dotnet_internal_call(internal_m2n_particle_emitter_set_force_over_lifetime));
447 reg.add_internal_call("internal_m2n_particle_emitter_get_emission_shape_scale",
448 dotnet_internal_call(internal_m2n_particle_emitter_get_emission_shape_scale));
449 reg.add_internal_call("internal_m2n_particle_emitter_set_emission_shape_scale",
450 dotnet_internal_call(internal_m2n_particle_emitter_set_emission_shape_scale));
451 reg.add_internal_call("internal_m2n_particle_emitter_get_emission_lifetime",
452 dotnet_internal_call(internal_m2n_particle_emitter_get_emission_lifetime));
453 reg.add_internal_call("internal_m2n_particle_emitter_set_emission_lifetime",
454 dotnet_internal_call(internal_m2n_particle_emitter_set_emission_lifetime));
455 reg.add_internal_call("internal_m2n_particle_emitter_get_lifetime",
456 dotnet_internal_call(internal_m2n_particle_emitter_get_lifetime));
457 reg.add_internal_call("internal_m2n_particle_emitter_set_lifetime",
458 dotnet_internal_call(internal_m2n_particle_emitter_set_lifetime));
459 reg.add_internal_call("internal_m2n_particle_emitter_get_position_easing",
460 dotnet_internal_call(internal_m2n_particle_emitter_get_position_easing));
461 reg.add_internal_call("internal_m2n_particle_emitter_set_position_easing",
462 dotnet_internal_call(internal_m2n_particle_emitter_set_position_easing));
463 reg.add_internal_call("internal_m2n_particle_emitter_get_num_particles",
464 dotnet_internal_call(internal_m2n_particle_emitter_get_num_particles));
465 reg.add_internal_call("internal_m2n_particle_emitter_is_playing",
466 dotnet_internal_call(internal_m2n_particle_emitter_is_playing));
467 reg.add_internal_call("internal_m2n_particle_emitter_is_paused",
468 dotnet_internal_call(internal_m2n_particle_emitter_is_paused));
469 reg.add_internal_call("internal_m2n_particle_emitter_get_texture",
470 dotnet_internal_call(internal_m2n_particle_emitter_get_texture));
471 reg.add_internal_call("internal_m2n_particle_emitter_set_texture",
472 dotnet_internal_call(internal_m2n_particle_emitter_set_texture));
473 reg.add_internal_call("internal_m2n_particle_emitter_play",
474 dotnet_internal_call(internal_m2n_particle_emitter_play));
475 reg.add_internal_call("internal_m2n_particle_emitter_stop",
476 dotnet_internal_call(internal_m2n_particle_emitter_stop));
477 reg.add_internal_call("internal_m2n_particle_emitter_stop_and_reset",
478 dotnet_internal_call(internal_m2n_particle_emitter_stop_and_reset));
479 reg.add_internal_call("internal_m2n_particle_emitter_pause",
480 dotnet_internal_call(internal_m2n_particle_emitter_pause));
481 reg.add_internal_call("internal_m2n_particle_emitter_resume",
482 dotnet_internal_call(internal_m2n_particle_emitter_resume));
483 reg.add_internal_call("internal_m2n_particle_emitter_reset_emitter",
484 dotnet_internal_call(internal_m2n_particle_emitter_reset_emitter));
485 reg.add_internal_call("internal_m2n_particle_emitter_get_loop",
486 dotnet_internal_call(internal_m2n_particle_emitter_get_loop));
487 reg.add_internal_call("internal_m2n_particle_emitter_set_loop",
488 dotnet_internal_call(internal_m2n_particle_emitter_set_loop));
489 reg.add_internal_call("internal_m2n_particle_emitter_get_blend_mode",
490 dotnet_internal_call(internal_m2n_particle_emitter_get_blend_mode));
491 reg.add_internal_call("internal_m2n_particle_emitter_set_blend_mode",
492 dotnet_internal_call(internal_m2n_particle_emitter_set_blend_mode));
493 reg.add_internal_call("internal_m2n_particle_emitter_get_simulation_backend",
494 dotnet_internal_call(internal_m2n_particle_emitter_get_simulation_backend));
495 reg.add_internal_call("internal_m2n_particle_emitter_set_simulation_backend",
496 dotnet_internal_call(internal_m2n_particle_emitter_set_simulation_backend));
497}
498
499} // namespace unravel
#define APPLOG_TRACE(...)
Definition logging.h:17
blend_mode
Blend mode. Ordinals match legacy BlendMode.
emitter_direction
Initial emission direction. Ordinals match legacy EmitterDirection.
particle_sim_backend
Selects CPU vs resident-GPU simulation backend.
emitter_shape
Emission volume shape. Ordinals match legacy EmitterShape for content compatibility.
auto safe_get_component(entt::entity id) -> T *
void register_particle_emitter_component_script_bindings()
std::vector< float > scale
static auto context() -> rtti::context &
Definition engine.cpp:111
gfx::uniform_handle handle
Definition uniform.cpp:9
bool enabled