1#include "monopp/mono_array.h"
8#include <monopp/mono_exception.h>
9#include <monopp/mono_internal_call.h>
10#include <monopp/mono_jit.h>
11#include <monort/mono_pod_wrapper.h>
12#include <monort/monort.h>
30#include <RmlUi/Core/Element.h>
31#include <RmlUi/Core/ElementDocument.h>
32#include <RmlUi/Core/Variant.h>
33#include <RmlUi/Core/EventListener.h>
34#include <RmlUi/Core/Event.h>
37#include <monopp/mono_method_invoker.h>
52 using converter = mono::managed_interface::converter;
58 const auto pbr = std::static_pointer_cast<pbr_material>(
material);
59 props.
base_color = converter::convert<math::color, mono::managed_interface::color>(pbr->get_base_color());
61 converter::convert<math::color, mono::managed_interface::color>(pbr->get_emissive_color());
62 props.
tiling = converter::convert<math::vec2, mono::managed_interface::vector2>(pbr->get_tiling());
74 using converter = mono::managed_interface::converter;
78 auto pbr = std::static_pointer_cast<pbr_material>(
material);
79 auto base_color = converter::convert<mono::managed_interface::color, math::color>(props.
base_color);
80 pbr->set_base_color(base_color);
82 auto emissive_color = converter::convert<mono::managed_interface::color, math::color>(props.
emissive_color);
83 pbr->set_emissive_color(emissive_color);
85 auto tiling = converter::convert<mono::managed_interface::vector2, math::vec2>(props.
tiling);
86 pbr->set_tiling(tiling);
96 virtual auto get_asset_uuid(
const hpp::uuid& uid)
const -> hpp::uuid = 0;
97 virtual auto get_asset_uuid(
const std::string& key)
const -> hpp::uuid = 0;
101struct mono_asset_impl : mono_asset
103 auto get_asset_uuid(
const hpp::uuid& uid)
const -> hpp::uuid
override
106 auto& am = ctx.get_cached<asset_manager>();
108 auto asset = am.get_asset<T>(uid);
112 auto get_asset_uuid(
const std::string& key)
const -> hpp::uuid
override
115 auto& am = ctx.get_cached<asset_manager>();
117 auto asset = am.get_asset<T>(
key);
122auto get_mono_asset(
size_t type_hash) ->
const mono_asset*
125 static std::map<size_t, std::shared_ptr<mono_asset>> reg =
127 {mono::mono_type::get_hash(
"Unravel.Core.Texture"), std::make_shared<mono_asset_impl<gfx::texture>>()},
128 {mono::mono_type::get_hash(
"Unravel.Core.Material"), std::make_shared<mono_asset_impl<material>>()},
129 {mono::mono_type::get_hash(
"Unravel.Core.Mesh"), std::make_shared<mono_asset_impl<mesh>>()},
130 {mono::mono_type::get_hash(
"Unravel.Core.AnimationClip"), std::make_shared<mono_asset_impl<animation_clip>>()},
131 {mono::mono_type::get_hash(
"Unravel.Core.Prefab"), std::make_shared<mono_asset_impl<prefab>>()},
132 {mono::mono_type::get_hash(
"Unravel.Core.Scene"), std::make_shared<mono_asset_impl<scene_prefab>>()},
133 {mono::mono_type::get_hash(
"Unravel.Core.PhysicsMaterial"), std::make_shared<mono_asset_impl<physics_material>>()},
134 {mono::mono_type::get_hash(
"Unravel.Core.AudioClip"), std::make_shared<mono_asset_impl<audio_clip>>()},
135 {mono::mono_type::get_hash(
"Unravel.Core.Font"), std::make_shared<mono_asset_impl<font>>()}
139 auto it = reg.find(type_hash);
142 return it->second.get();
144 static const mono_asset* empty{};
148auto get_entity_from_id(entt::entity
id) -> entt::handle
150 if(
id == entt::entity(0))
156 auto& ec = ctx.get_cached<ecs>();
158 return ec.get_scene().create_handle(
id);
161void raise_invalid_entity_exception()
163 mono::raise_exception(
"System",
"Exception",
"Entity is invalid.");
167void raise_missing_component_exception()
169 mono::raise_exception(
"System",
171 fmt::format(
"Entity does not have component of type {}.", hpp::type_name_str<T>()));
175auto safe_get_component(entt::entity
id) -> T*
177 auto e = get_entity_from_id(
id);
180 raise_invalid_entity_exception();
183 auto comp =
e.try_get<T>();
187 raise_missing_component_exception<T>();
194void internal_m2n_load_scene(
const std::string& key)
197 delay.on_end.connect(
201 auto& ec = ctx.get_cached<ecs>();
202 auto& am = ctx.get_cached<asset_manager>();
204 ec.get_scene().load_from(am.get_asset<scene_prefab>(key));
210void internal_m2n_load_scene_uid(
const hpp::uuid& uid)
213 delay.on_end.connect(
217 auto& ec = ctx.get_cached<ecs>();
218 auto& am = ctx.get_cached<asset_manager>();
220 ec.get_scene().load_from(am.get_asset<scene_prefab>(uid));
226void internal_m2n_create_scene(
const mono::mono_object& this_ptr)
228 mono::ignore(this_ptr);
231void internal_m2n_destroy_scene(
const mono::mono_object& this_ptr)
233 mono::ignore(this_ptr);
236auto internal_m2n_create_entity(
const std::string&
tag) -> entt::entity
239 auto& ec = ctx.get_cached<ecs>();
241 auto e = ec.get_scene().create_entity(
tag);
246auto internal_m2n_create_entity_from_prefab_uid(
const hpp::uuid& uid) -> entt::entity
249 auto& ec = ctx.get_cached<ecs>();
250 auto& am = ctx.get_cached<asset_manager>();
252 auto pfb = am.get_asset<prefab>(uid);
253 auto e = ec.get_scene().instantiate(pfb);
258auto internal_m2n_create_entity_from_prefab_key(
const std::string& key) -> entt::entity
261 auto& ec = ctx.get_cached<ecs>();
262 auto& am = ctx.get_cached<asset_manager>();
264 auto pfb = am.get_asset<prefab>(
key);
265 auto e = ec.get_scene().instantiate(pfb);
270auto internal_m2n_clone_entity(entt::entity
id) -> entt::entity
272 auto e = get_entity_from_id(
id);
276 auto& ec = ctx.get_cached<ecs>();
278 auto cloned = ec.get_scene().clone_entity(e);
279 return cloned.entity();
286auto internal_m2n_destroy_entity_immediate(entt::entity
id) ->
bool
288 auto e = get_entity_from_id(
id);
297auto internal_m2n_destroy_entity(entt::entity
id,
float seconds) ->
bool
299 seconds = std::max(0.0001f, seconds);
302 auto dur = std::chrono::duration_cast<seq::duration_t>(secs);
305 delay.on_end.connect(
308 internal_m2n_destroy_entity_immediate(
id);
316auto internal_m2n_is_entity_valid(entt::entity
id) ->
bool
318 auto e = get_entity_from_id(
id);
319 bool valid =
e.valid();
323auto internal_m2n_find_entity_by_name(
const std::string&
name) -> entt::entity
326 auto& ec = ctx.get_cached<ecs>();
327 auto& scn = ec.get_scene();
328 auto& registry = *scn.registry;
330 auto view = registry.view<tag_component>();
332 for(
const auto& e : view)
334 if(registry.get<tag_component>(e).name ==
name)
344auto internal_m2n_find_entities_by_name(
const std::string&
name) -> hpp::small_vector<entt::entity>
347 auto& ec = ctx.get_cached<ecs>();
348 auto& scn = ec.get_scene();
349 auto& registry = *scn.registry;
351 auto view = registry.view<tag_component>();
353 hpp::small_vector<entt::entity> result;
354 for(
const auto& e : view)
356 if(registry.get<tag_component>(e).name ==
name)
358 result.emplace_back(e);
365auto internal_m2n_find_entity_by_tag(
const std::string&
tag) -> entt::entity
368 auto& ec = ctx.get_cached<ecs>();
369 auto& scn = ec.get_scene();
370 auto& registry = *scn.registry;
372 auto view = registry.view<tag_component>();
374 for(
const auto& e : view)
376 if(registry.get<tag_component>(e).tag ==
tag)
386auto internal_m2n_find_entities_by_tag(
const std::string&
tag) -> hpp::small_vector<entt::entity>
389 auto& ec = ctx.get_cached<ecs>();
390 auto& scn = ec.get_scene();
391 auto& registry = *scn.registry;
393 auto view = registry.view<tag_component>();
395 hpp::small_vector<entt::entity> result;
396 for(
const auto& e : view)
398 if(registry.get<tag_component>(e).tag ==
tag)
400 result.emplace_back(e);
407struct native_comp_lut
413 std::function<bool(
size_t type_hash, entt::handle e)>
add_native;
414 std::function<bool(
size_t type_hash, entt::handle e)>
has_native;
417 static auto get_registry() -> std::unordered_map<size_t, native_comp_lut>&
419 static std::unordered_map<size_t, native_comp_lut> lut;
423 static auto get_action_table(
size_t type_hash) ->
const native_comp_lut&
425 const auto& registry = get_registry();
426 auto it = registry.find(type_hash);
427 if(it != registry.end())
432 static const native_comp_lut empty;
437 static auto register_native_component(
const std::string&
name)
439 size_t hash = mono::mono_type::get_hash(
name);
441 lut.add_native = [hash](
size_t type_hash, entt::handle
e)
443 if(type_hash == hash)
445 auto& native =
e.get_or_emplace<T>();
452 lut.has_native = [hash](
size_t type_hash, entt::handle
e)
454 if(type_hash == hash)
456 return e.all_of<T>();
462 lut.remove_native = [hash](
size_t type_hash, entt::handle
e)
464 if(type_hash == hash)
466 return e.remove<T>() > 0;
472 get_registry()[hash] = lut;
476int register_componetns = []()
478 native_comp_lut::register_native_component<transform_component>(
"Unravel.Core.TransformComponent");
479 native_comp_lut::register_native_component<id_component>(
"Unravel.Core.IdComponent");
480 native_comp_lut::register_native_component<model_component>(
"Unravel.Core.ModelComponent");
481 native_comp_lut::register_native_component<camera_component>(
"Unravel.Core.CameraComponent");
482 native_comp_lut::register_native_component<light_component>(
"Unravel.Core.LightComponent");
483 native_comp_lut::register_native_component<reflection_probe_component>(
"Unravel.Core.ReflectionProbeComponent");
484 native_comp_lut::register_native_component<physics_component>(
"Unravel.Core.PhysicsComponent");
485 native_comp_lut::register_native_component<animation_component>(
"Unravel.Core.AnimationComponent");
486 native_comp_lut::register_native_component<audio_listener_component>(
"Unravel.Core.AudioListenerComponent");
487 native_comp_lut::register_native_component<audio_source_component>(
"Unravel.Core.AudioSourceComponent");
488 native_comp_lut::register_native_component<bone_component>(
"Unravel.Core.BoneComponent");
489 native_comp_lut::register_native_component<submesh_component>(
"Unravel.Core.SubmeshComponent");
490 native_comp_lut::register_native_component<text_component>(
"Unravel.Core.TextComponent");
491 native_comp_lut::register_native_component<particle_emitter_component>(
"Unravel.Core.ParticleEmitterComponent");
492 native_comp_lut::register_native_component<ui_document_component>(
"Unravel.Core.UIDocumentComponent");
497auto internal_add_native_component(
const mono::mono_type&
type, entt::handle e, script_component& script_comp)
502 const auto& type_hash =
type.get_hash();
505 const auto& lut = native_comp_lut::get_action_table(type_hash);
508 add = lut.add_native(type_hash, e);
513 auto comp = script_comp.get_native_component(
type);
517 comp = script_comp.add_native_component(
type);
519 return static_cast<mono::mono_object&
>(comp.scoped->object);
525auto internal_get_native_component_impl(
const mono::mono_type&
type,
527 script_component& script_comp,
528 bool exists) -> mono::mono_object
530 auto comp = script_comp.get_native_component(
type);
535 comp = script_comp.add_native_component(
type);
537 return static_cast<mono::mono_object&
>(comp.scoped->object);
542 script_comp.remove_native_component(comp.scoped->object);
548auto internal_get_native_component(
const mono::mono_type&
type, entt::handle e, script_component& script_comp)
551 const auto& type_hash =
type.get_hash();
557 const auto& lut = native_comp_lut::get_action_table(type_hash);
560 has = lut.has_native(type_hash, e);
566 return internal_get_native_component_impl(
type, e, script_comp, has);
572auto internal_remove_native_component(
const mono::mono_object& obj, entt::handle e, script_component& script_comp)
575 const auto&
type = obj.get_type();
576 const auto& type_hash =
type.get_hash();
580 bool removed =
false;
581 const auto& lut = native_comp_lut::get_action_table(type_hash);
584 removed = lut.remove_native(type_hash, e);
589 return script_comp.remove_native_component(obj);
595auto internal_remove_native_component(
const mono::mono_type&
type, entt::handle e, script_component& script_comp)
598 const auto& type_hash =
type.get_hash();
602 bool removed =
false;
603 const auto& lut = native_comp_lut::get_action_table(type_hash);
606 removed = lut.remove_native(type_hash, e);
611 return script_comp.remove_native_component(
type);
617auto internal_m2n_add_component(entt::entity
id,
const mono::mono_type&
type) -> mono::mono_object
619 auto e = get_entity_from_id(
id);
622 raise_invalid_entity_exception();
625 auto& script_comp =
e.get_or_emplace<script_component>();
627 if(
auto native_comp = internal_add_native_component(
type, e, script_comp))
632 auto component = script_comp.add_script_component(
type);
633 return static_cast<mono::mono_object&
>(component.scoped->object);
636auto internal_m2n_get_component(entt::entity
id,
const mono::mono_type&
type) -> mono::mono_object
638 auto e = get_entity_from_id(
id);
641 raise_invalid_entity_exception();
645 auto& script_comp =
e.get_or_emplace<script_component>();
647 if(
auto native_comp = internal_get_native_component(
type, e, script_comp))
652 auto component = script_comp.get_script_component(
type);
656 return static_cast<mono::mono_object&
>(component.scoped->object);
663auto internal_m2n_get_components_impl(entt::entity
id,
const mono::mono_type&
type) -> std::vector<mono::mono_object>
665 auto e = get_entity_from_id(
id);
668 raise_invalid_entity_exception();
672 auto& script_comp =
e.get_or_emplace<script_component>();
674 if(
auto native_comp = internal_get_native_component(
type, e, script_comp))
676 return {native_comp};
679 return script_comp.get_script_components(
type);
682auto internal_m2n_get_components(entt::entity
id,
const mono::mono_type&
type) -> mono::mono_array<mono::mono_object>
684 auto components = internal_m2n_get_components_impl(
id,
type);
685 return mono::mono_array<mono::mono_object>(components,
type);
688auto internal_m2n_get_component_in_children(entt::entity
id,
const mono::mono_type&
type) -> mono::mono_object
690 auto comp = internal_m2n_get_component(
id,
type);
695 if(
auto comp = safe_get_component<transform_component>(
id))
697 const auto& children = comp->get_children();
698 for(
const auto& child : children)
700 if(
auto result = internal_m2n_get_component(child,
type))
710auto internal_m2n_get_components_in_children(entt::entity
id,
const mono::mono_type&
type)
711 -> mono::mono_array<mono::mono_object>
713 auto components = internal_m2n_get_components_impl(
id,
type);
714 if(
auto comp = safe_get_component<transform_component>(
id))
716 const auto& children = comp->get_children();
717 for(
const auto& child : children)
719 auto child_components = internal_m2n_get_components_impl(child,
type);
720 std::move(child_components.begin(), child_components.end(), std::back_inserter(components));
723 return mono::mono_array<mono::mono_object>(components,
type);
726auto internal_m2n_get_transform_component(entt::entity
id,
const mono::mono_type&
type) -> mono::mono_object
728 auto e = get_entity_from_id(
id);
731 raise_invalid_entity_exception();
735 auto& script_comp =
e.get_or_emplace<script_component>();
736 return internal_get_native_component_impl(
type, e, script_comp,
true);
739auto internal_m2n_get_name(entt::entity
id) ->
const std::string&
741 if(
auto comp = safe_get_component<tag_component>(
id))
746 static const std::string empty;
750void internal_m2n_set_name(entt::entity
id,
const std::string&
name)
752 if(
auto comp = safe_get_component<tag_component>(
id))
758auto internal_m2n_get_tag(entt::entity
id) ->
const std::string&
760 if(
auto comp = safe_get_component<tag_component>(
id))
765 static const std::string empty;
769void internal_m2n_set_tag(entt::entity
id,
const std::string&
tag)
771 if(
auto comp = safe_get_component<tag_component>(
id))
777auto internal_m2n_get_layers(entt::entity
id) ->
int
779 if(
auto comp = safe_get_component<layer_component>(
id))
781 return comp->layers.mask;
787void internal_m2n_set_layers(entt::entity
id,
int mask)
789 if(
auto comp = safe_get_component<layer_component>(
id))
791 comp->layers.mask = mask;
795auto internal_m2n_get_active_global(entt::entity
id) ->
bool
797 if(
auto comp = safe_get_component<transform_component>(
id))
799 return comp->is_active_global();
805auto internal_m2n_get_active_local(entt::entity
id) ->
bool
807 if(
auto comp = safe_get_component<transform_component>(
id))
809 return comp->is_active();
815void internal_m2n_set_active_local(entt::entity
id,
bool active)
817 if(
auto comp = safe_get_component<transform_component>(
id))
819 comp->set_active(active);
823auto internal_m2n_has_component(entt::entity
id,
const mono::mono_type&
type) ->
bool
825 auto comp = internal_m2n_get_component(
id,
type);
830auto internal_m2n_find_entities_with_component(
const mono::mono_type& component_type) -> hpp::small_vector<entt::entity>
833 auto& ec = ctx.get_cached<ecs>();
834 auto& scn = ec.get_scene();
835 auto& registry = *scn.registry;
837 hpp::small_vector<entt::entity> result;
840 for(
auto [
entity] : registry.storage<entt::entity>().each())
842 if(registry.valid(
entity))
845 auto comp = internal_m2n_get_component(
entity, component_type);
848 result.emplace_back(
entity);
856auto internal_m2n_find_entities_with_components(
const std::vector<mono::mono_type>& component_types) -> hpp::small_vector<entt::entity>
859 auto& ec = ctx.get_cached<ecs>();
860 auto& scn = ec.get_scene();
861 auto& registry = *scn.registry;
863 hpp::small_vector<entt::entity> result;
865 if(component_types.empty())
871 for(
auto [
entity] : registry.storage<entt::entity>().each())
873 if(registry.valid(
entity))
875 bool has_all_components =
true;
878 for(
const auto& component_type : component_types)
880 auto comp = internal_m2n_get_component(
entity, component_type);
883 has_all_components =
false;
888 if(has_all_components)
890 result.emplace_back(
entity);
898auto internal_m2n_remove_component_instance(entt::entity
id,
const mono::mono_object& comp) ->
bool
900 auto e = get_entity_from_id(
id);
903 raise_invalid_entity_exception();
906 auto& script_comp =
e.get_or_emplace<script_component>();
908 if(internal_remove_native_component(comp, e, script_comp))
913 return script_comp.remove_script_component(comp);
916auto internal_m2n_remove_component_instance_delay(entt::entity
id,
const mono::mono_object& comp,
float seconds_delay)
920 auto dur = std::chrono::duration_cast<seq::duration_t>(secs);
923 delay.on_end.connect(
926 internal_m2n_remove_component_instance(
id, comp);
934auto internal_m2n_remove_component(entt::entity
id,
const mono::mono_type&
type) ->
bool
936 auto e = get_entity_from_id(
id);
939 raise_invalid_entity_exception();
942 auto& script_comp =
e.get_or_emplace<script_component>();
944 if(internal_remove_native_component(
type, e, script_comp))
949 return script_comp.remove_script_component(
type);
952auto internal_m2n_remove_component_delay(entt::entity
id,
const mono::mono_type&
type,
float seconds_delay) ->
bool
955 auto dur = std::chrono::duration_cast<seq::duration_t>(secs);
958 delay.on_end.connect(
961 internal_m2n_remove_component(
id,
type);
983void internal_m2n_log_trace(
const std::string& message,
const std::string& func,
const std::string& file,
int line)
988void internal_m2n_log_info(
const std::string& message,
const std::string& func,
const std::string& file,
int line)
993void internal_m2n_log_warning(
const std::string& message,
const std::string& func,
const std::string& file,
int line)
998void internal_m2n_log_error(
const std::string& message,
const std::string& func,
const std::string& file,
int line)
1005void internal_m2n_application_quit()
1008 delay.on_end.connect(
1012 auto& ev = ctx.get_cached<events>();
1013 ev.set_play_mode(ctx,
false);
1019void internal_m2n_set_time_scale(
float scale)
1022 auto& sim = ctx.get_cached<simulation>();
1023 sim.set_time_scale(
scale);
1039auto internal_m2n_get_children(entt::entity
id) -> hpp::small_vector<entt::entity>
1041 if(
auto comp = safe_get_component<transform_component>(
id))
1043 const auto& children = comp->get_children();
1044 hpp::small_vector<entt::entity> children_id;
1045 children_id.reserve(children.size());
1046 for(
const auto& child : children)
1048 children_id.emplace_back(child.entity());
1057struct node_candidate
1063auto internal_m2n_get_child(entt::entity
id,
const std::string& path,
bool recursive) -> entt::entity
1065 auto root = get_entity_from_id(
id);
1066 if(!root || path.empty())
1075 hpp::small_vector<node_candidate> queue;
1077 queue.push_back({root, 0});
1080 for(
size_t idx = 0; idx < queue.size(); ++idx)
1082 auto candidate = queue[idx];
1083 bool advanced =
false;
1086 if(candidate.matched_index < parts.size())
1088 if(
auto tag_comp = safe_get_component<tag_component>(candidate.entity))
1090 if(tag_comp->name == parts[candidate.matched_index])
1092 candidate.matched_index++;
1094 if(candidate.matched_index == parts.size())
1096 return candidate.entity;
1105 bool should_enqueue = recursive ? (candidate.matched_index == 0 || advanced) : (candidate.
matched_index == 0);
1109 if(
auto trans_comp = safe_get_component<transform_component>(candidate.entity))
1111 for(
const auto& child : trans_comp->get_children())
1113 queue.push_back({child.entity(), candidate.matched_index});
1122auto internal_m2n_get_parent(entt::entity
id) -> entt::entity
1124 if(
auto comp = safe_get_component<transform_component>(
id))
1126 return comp->get_parent().entity();
1132void internal_m2n_set_parent(entt::entity
id, entt::entity new_parent,
bool global_stays)
1134 if(
auto comp = safe_get_component<transform_component>(
id))
1136 auto parent = get_entity_from_id(new_parent);
1137 comp->set_parent(parent, global_stays);
1141auto internal_m2n_get_position_global(entt::entity
id) -> math::vec3
1143 if(
auto comp = safe_get_component<transform_component>(
id))
1145 return comp->get_position_global();
1151void internal_m2n_set_position_global(entt::entity
id,
const math::vec3& value)
1153 if(
auto comp = safe_get_component<transform_component>(
id))
1155 comp->set_position_global(value);
1159void internal_m2n_move_by_global(entt::entity
id,
const math::vec3& value)
1161 if(
auto comp = safe_get_component<transform_component>(
id))
1163 comp->move_by_global(value);
1167auto internal_m2n_get_position_local(entt::entity
id) -> math::vec3
1169 if(
auto comp = safe_get_component<transform_component>(
id))
1171 return comp->get_position_local();
1177void internal_m2n_set_position_local(entt::entity
id,
const math::vec3& value)
1179 if(
auto comp = safe_get_component<transform_component>(
id))
1181 comp->set_position_local(value);
1185void internal_m2n_move_by_local(entt::entity
id,
const math::vec3& value)
1187 if(
auto comp = safe_get_component<transform_component>(
id))
1189 comp->move_by_local(value);
1194auto internal_m2n_get_rotation_euler_global(entt::entity
id) -> math::vec3
1196 if(
auto comp = safe_get_component<transform_component>(
id))
1198 return comp->get_rotation_euler_global();
1204void internal_m2n_rotate_by_euler_global(entt::entity
id,
const math::vec3& amount)
1206 if(
auto comp = safe_get_component<transform_component>(
id))
1208 comp->rotate_by_euler_global(amount);
1212void internal_m2n_rotate_axis_global(entt::entity
id,
float degrees,
const math::vec3& axis)
1214 if(
auto comp = safe_get_component<transform_component>(
id))
1216 comp->rotate_axis_global(degrees, axis);
1220auto internal_m2n_transform_vector_global(entt::entity
id,
const math::vec3& coord) -> math::vec3
1222 if(
auto comp = safe_get_component<transform_component>(
id))
1224 const auto& global = comp->get_transform_global();
1225 return global.transform_coord(coord);
1231auto internal_m2n_inverse_transform_vector_global(entt::entity
id,
const math::vec3& coord) -> math::vec3
1233 if(
auto comp = safe_get_component<transform_component>(
id))
1235 const auto& global = comp->get_transform_global();
1236 return global.inverse_transform_coord(coord);
1242auto internal_m2n_transform_direction_global(entt::entity
id,
const math::vec3& direction) -> math::vec3
1244 if(
auto comp = safe_get_component<transform_component>(
id))
1246 const auto& global = comp->get_transform_global();
1247 return global.transform_normal(direction);
1253auto internal_m2n_inverse_transform_direction_global(entt::entity
id,
const math::vec3& direction) -> math::vec3
1255 if(
auto comp = safe_get_component<transform_component>(
id))
1257 const auto& global = comp->get_transform_global();
1258 return global.inverse_transform_normal(direction);
1264void internal_m2n_look_at(entt::entity
id,
const math::vec3&
point,
const math::vec3& up)
1266 if(
auto comp = safe_get_component<transform_component>(
id))
1268 comp->look_at(
point, up);
1272void internal_m2n_set_rotation_euler_global(entt::entity
id,
const math::vec3& value)
1274 if(
auto comp = safe_get_component<transform_component>(
id))
1276 comp->set_rotation_euler_global(value);
1280auto internal_m2n_get_rotation_euler_local(entt::entity
id) -> math::vec3
1282 if(
auto comp = safe_get_component<transform_component>(
id))
1284 return comp->get_rotation_euler_local();
1290void internal_m2n_set_rotation_euler_local(entt::entity
id,
const math::vec3& value)
1292 if(
auto comp = safe_get_component<transform_component>(
id))
1294 comp->set_rotation_euler_local(value);
1298void internal_m2n_rotate_by_euler_local(entt::entity
id,
const math::vec3& amount)
1300 if(
auto comp = safe_get_component<transform_component>(
id))
1302 comp->rotate_by_euler_local(amount);
1306auto internal_m2n_get_rotation_global(entt::entity
id) -> math::quat
1308 if(
auto comp = safe_get_component<transform_component>(
id))
1310 return comp->get_rotation_global();
1316void internal_m2n_set_rotation_global(entt::entity
id,
const math::quat& value)
1318 if(
auto comp = safe_get_component<transform_component>(
id))
1320 comp->set_rotation_global(value);
1324void internal_m2n_rotate_by_global(entt::entity
id,
const math::quat& amount)
1326 if(
auto comp = safe_get_component<transform_component>(
id))
1328 comp->rotate_by_global(amount);
1332auto internal_m2n_get_rotation_local(entt::entity
id) -> math::quat
1334 if(
auto comp = safe_get_component<transform_component>(
id))
1336 return comp->get_rotation_local();
1342void internal_m2n_set_rotation_local(entt::entity
id,
const math::quat& value)
1344 if(
auto comp = safe_get_component<transform_component>(
id))
1346 comp->set_rotation_local(value);
1350void internal_m2n_rotate_by_local(entt::entity
id,
const math::quat& amount)
1352 if(
auto comp = safe_get_component<transform_component>(
id))
1354 comp->rotate_by_local(amount);
1359auto internal_m2n_get_scale_global(entt::entity
id) -> math::vec3
1361 if(
auto comp = safe_get_component<transform_component>(
id))
1363 return comp->get_scale_global();
1369void internal_m2n_set_scale_global(entt::entity
id,
const math::vec3& value)
1371 if(
auto comp = safe_get_component<transform_component>(
id))
1373 comp->set_scale_global(value);
1377void internal_m2n_scale_by_global(entt::entity
id,
const math::vec3& amount)
1379 if(
auto comp = safe_get_component<transform_component>(
id))
1381 comp->scale_by_global(amount);
1385auto internal_m2n_get_scale_local(entt::entity
id) -> math::vec3
1387 if(
auto comp = safe_get_component<transform_component>(
id))
1389 return comp->get_scale_local();
1395void internal_m2n_set_scale_local(entt::entity
id,
const math::vec3& value)
1397 if(
auto comp = safe_get_component<transform_component>(
id))
1399 comp->set_scale_local(value);
1403void internal_m2n_scale_by_local(entt::entity
id,
const math::vec3& amount)
1405 if(
auto comp = safe_get_component<transform_component>(
id))
1407 comp->scale_by_local(amount);
1412auto internal_m2n_get_skew_global(entt::entity
id) -> math::vec3
1414 if(
auto comp = safe_get_component<transform_component>(
id))
1416 return comp->get_skew_global();
1422void internal_m2n_setl_skew_globa(entt::entity
id,
const math::vec3& value)
1424 if(
auto comp = safe_get_component<transform_component>(
id))
1426 comp->set_skew_global(value);
1430auto internal_m2n_get_skew_local(entt::entity
id) -> math::vec3
1432 if(
auto comp = safe_get_component<transform_component>(
id))
1434 return comp->get_skew_local();
1440void internal_m2n_set_skew_local(entt::entity
id,
const math::vec3& value)
1442 if(
auto comp = safe_get_component<transform_component>(
id))
1444 comp->set_skew_local(value);
1450void internal_m2n_physics_apply_explosion_force(entt::entity
id,
1451 float explosion_force,
1452 const math::vec3& explosion_position,
1453 float explosion_radius,
1454 float upwards_modifier,
1457 if(
auto comp = safe_get_component<physics_component>(
id))
1459 comp->apply_explosion_force(explosion_force, explosion_position, explosion_radius, upwards_modifier, mode);
1462void internal_m2n_physics_apply_force(entt::entity
id,
const math::vec3& value,
force_mode mode)
1464 if(
auto comp = safe_get_component<physics_component>(
id))
1466 comp->apply_force(value, mode);
1470void internal_m2n_physics_apply_torque(entt::entity
id,
const math::vec3& value,
force_mode mode)
1472 if(
auto comp = safe_get_component<physics_component>(
id))
1474 comp->apply_torque(value, mode);
1478auto internal_m2n_physics_get_velocity(entt::entity
id) -> math::vec3
1480 if(
auto comp = safe_get_component<physics_component>(
id))
1482 return comp->get_velocity();
1488void internal_m2n_physics_set_velocity(entt::entity
id,
const math::vec3&
velocity)
1490 if(
auto comp = safe_get_component<physics_component>(
id))
1496auto internal_m2n_physics_get_angular_velocity(entt::entity
id) -> math::vec3
1498 if(
auto comp = safe_get_component<physics_component>(
id))
1500 return comp->get_angular_velocity();
1506void internal_m2n_physics_set_angular_velocity(entt::entity
id,
const math::vec3&
velocity)
1508 if(
auto comp = safe_get_component<physics_component>(
id))
1510 comp->set_angular_velocity(
velocity);
1514auto internal_m2n_physics_get_include_layers(entt::entity
id) ->
layer_mask
1516 if(
auto comp = safe_get_component<physics_component>(
id))
1518 return comp->get_collision_include_mask();
1524void internal_m2n_physics_set_include_layers(entt::entity
id,
layer_mask mask)
1526 if(
auto comp = safe_get_component<physics_component>(
id))
1528 comp->set_collision_include_mask(mask);
1532auto internal_m2n_physics_get_exclude_layers(entt::entity
id) ->
layer_mask
1534 if(
auto comp = safe_get_component<physics_component>(
id))
1536 return comp->get_collision_exclude_mask();
1542void internal_m2n_physics_set_exclude_layers(entt::entity
id,
layer_mask mask)
1544 if(
auto comp = safe_get_component<physics_component>(
id))
1546 comp->set_collision_exclude_mask(mask);
1550auto internal_m2n_physics_get_collision_layers(entt::entity
id) ->
layer_mask
1552 if(
auto comp = safe_get_component<physics_component>(
id))
1554 return comp->get_collision_mask();
1561void internal_m2n_animation_blend(entt::entity
id,
int layer, hpp::uuid guid,
float seconds,
bool loop,
bool phase_sync)
1563 if(
auto comp = safe_get_component<animation_component>(
id))
1566 auto& am = ctx.get_cached<asset_manager>();
1568 auto asset = am.get_asset<animation_clip>(guid);
1573void internal_m2n_animation_play(entt::entity
id)
1575 if(
auto comp = safe_get_component<animation_component>(
id))
1577 comp->get_player().play();
1581void internal_m2n_animation_pause(entt::entity
id)
1583 if(
auto comp = safe_get_component<animation_component>(
id))
1585 comp->get_player().pause();
1589void internal_m2n_animation_resume(entt::entity
id)
1591 if(
auto comp = safe_get_component<animation_component>(
id))
1593 comp->get_player().resume();
1597void internal_m2n_animation_stop(entt::entity
id)
1599 if(
auto comp = safe_get_component<animation_component>(
id))
1601 comp->get_player().stop();
1605void internal_m2n_animation_set_speed(entt::entity
id,
float speed)
1607 if(
auto comp = safe_get_component<animation_component>(
id))
1609 comp->set_speed(speed);
1613auto internal_m2n_animation_get_speed(entt::entity
id) ->
float
1615 if(
auto comp = safe_get_component<animation_component>(
id))
1617 return comp->get_speed();
1623auto internal_m2n_camera_screen_point_to_ray(entt::entity
id,
1624 const math::vec2& origin,
1627 if(
auto comp = safe_get_component<camera_component>(
id))
1629 math::vec3 ray_origin{};
1630 math::vec3 ray_dir{};
1631 bool result = comp->get_camera().viewport_to_ray(origin, ray_origin, ray_dir);
1634 using converter = mono::managed_interface::converter;
1635 managed_ray->origin = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_origin);
1636 managed_ray->direction = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_dir);
1644auto internal_m2n_model_get_enabled(entt::entity
id) ->
bool
1646 if(
auto comp = safe_get_component<model_component>(
id))
1648 return comp->is_enabled();
1654void internal_m2n_model_set_enabled(entt::entity
id,
bool enabled)
1656 if(
auto comp = safe_get_component<model_component>(
id))
1658 comp->set_enabled(enabled);
1662auto internal_m2n_model_get_shared_material(entt::entity
id, uint32_t index) -> hpp::uuid
1664 if(
auto comp = safe_get_component<model_component>(
id))
1666 return comp->get_model().get_material(index).uid();
1672auto internal_m2n_model_get_shared_material_count(entt::entity
id) ->
int
1674 if(
auto comp = safe_get_component<model_component>(
id))
1676 return comp->get_model().get_materials().size();
1682auto internal_m2n_model_get_material_instance(entt::entity
id, uint32_t index)
1685 if(
auto comp = safe_get_component<model_component>(
id))
1687 auto instance = comp->get_model().get_material_instance(index);
1688 return get_material_properties(instance);
1694void internal_m2n_model_set_shared_material(entt::entity
id,
const hpp::uuid& uid, uint32_t index)
1696 if(
auto comp = safe_get_component<model_component>(
id))
1699 auto& am = ctx.get_cached<asset_manager>();
1700 auto asset = am.get_asset<
material>(uid);
1702 auto model = comp->get_model();
1703 model.set_material(asset, index);
1704 comp->set_model(model);
1708void internal_m2n_model_set_material_instance(entt::entity
id,
1712 using converter = mono::managed_interface::converter;
1714 if(
auto comp = safe_get_component<model_component>(
id))
1716 auto model = comp->get_model();
1720 auto material = model.get_or_emplace_material_instance(index);
1721 set_material_properties(
material, props);
1722 model.set_material_instance(
material, index);
1726 model.set_material_instance(
nullptr, index);
1728 comp->set_model(model);
1732auto internal_m2n_model_get_material_instance_count(entt::entity
id) ->
int
1734 if(
auto comp = safe_get_component<model_component>(
id))
1736 return comp->get_model().get_material_instances().size();
1746auto internal_m2n_particle_emitter_get_enabled(entt::entity
id) ->
bool
1748 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1750 return comp->is_enabled();
1755void internal_m2n_particle_emitter_set_enabled(entt::entity
id,
bool enabled)
1757 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1759 comp->set_enabled(enabled);
1763auto internal_m2n_particle_emitter_get_max_particles(entt::entity
id) -> uint32_t
1765 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1767 return comp->get_max_particles();
1772void internal_m2n_particle_emitter_set_max_particles(entt::entity
id, uint32_t max_particles)
1774 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1776 comp->set_max_particles(max_particles);
1780auto internal_m2n_particle_emitter_get_shape(entt::entity
id) ->
int
1782 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1784 return static_cast<int>(comp->get_shape());
1789void internal_m2n_particle_emitter_set_shape(entt::entity
id,
int shape)
1791 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1797auto internal_m2n_particle_emitter_get_direction(entt::entity
id) ->
int
1799 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1801 return static_cast<int>(comp->get_direction());
1806void internal_m2n_particle_emitter_set_direction(entt::entity
id,
int direction)
1808 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1814auto internal_m2n_particle_emitter_get_gravity_scale(entt::entity
id) ->
float
1816 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1818 return comp->get_gravity_scale();
1823void internal_m2n_particle_emitter_set_gravity_scale(entt::entity
id,
float scale)
1825 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1827 comp->set_gravity_scale(
scale);
1831auto internal_m2n_particle_emitter_get_emission_rate(entt::entity
id) ->
float
1833 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1835 return comp->get_emission_rate();
1840void internal_m2n_particle_emitter_set_emission_rate(entt::entity
id,
float rate)
1842 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1844 comp->set_emission_rate(rate);
1848auto internal_m2n_particle_emitter_get_temporal_motion(entt::entity
id) ->
float
1850 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1852 return comp->get_temporal_motion();
1857void internal_m2n_particle_emitter_set_temporal_motion(entt::entity
id,
float motion)
1859 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1861 comp->set_temporal_motion(motion);
1865auto internal_m2n_particle_emitter_get_velocity_damping(entt::entity
id) ->
float
1867 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1869 return comp->get_velocity_damping();
1874void internal_m2n_particle_emitter_set_velocity_damping(entt::entity
id,
float damping)
1876 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1878 comp->set_velocity_damping(damping);
1882auto internal_m2n_particle_emitter_get_blend_multiplier(entt::entity
id) ->
float
1884 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1886 return comp->get_blend_multiplier();
1891void internal_m2n_particle_emitter_set_blend_multiplier(entt::entity
id,
float multiplier)
1893 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1895 comp->set_blend_multiplier(multiplier);
1899auto internal_m2n_particle_emitter_get_force_over_lifetime(entt::entity
id) -> math::vec3
1901 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1903 return comp->get_force_over_lifetime();
1905 return math::vec3{0.0f, 0.0f, 0.0f};
1908void internal_m2n_particle_emitter_set_force_over_lifetime(entt::entity
id,
const math::vec3&
force)
1910 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1912 comp->set_force_over_lifetime(
force);
1916auto internal_m2n_particle_emitter_get_emission_shape_scale(entt::entity
id) -> math::vec3
1918 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1920 return comp->get_emission_shape_scale();
1922 return math::vec3{1.0f, 1.0f, 1.0f};
1925void internal_m2n_particle_emitter_set_emission_shape_scale(entt::entity
id,
const math::vec3&
scale)
1927 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1929 comp->set_emission_shape_scale(
scale);
1933auto internal_m2n_particle_emitter_get_emission_lifetime(entt::entity
id) ->
float
1935 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1937 return comp->get_emission_lifetime().count();
1942void internal_m2n_particle_emitter_set_emission_lifetime(entt::entity
id,
float lifetime)
1944 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1946 comp->set_emission_lifetime(std::chrono::duration<float>(lifetime));
1950auto internal_m2n_particle_emitter_get_lifetime(entt::entity
id) ->
float
1952 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1954 return comp->get_lifetime().count();
1959void internal_m2n_particle_emitter_set_lifetime(entt::entity
id,
float lifetime)
1961 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1963 comp->set_lifetime(std::chrono::duration<float>(lifetime));
1967auto internal_m2n_particle_emitter_get_position_easing(entt::entity
id) ->
int
1969 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1971 return static_cast<int>(comp->get_position_easing());
1976void internal_m2n_particle_emitter_set_position_easing(entt::entity
id,
int easing)
1978 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1980 comp->set_position_easing(
static_cast<bx::Easing::Enum
>(easing));
1984auto internal_m2n_particle_emitter_get_num_particles(entt::entity
id) -> uint32_t
1986 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1988 return comp->get_num_particles();
1993auto internal_m2n_particle_emitter_is_playing(entt::entity
id) ->
bool
1995 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
1997 return comp->is_playing();
2002auto internal_m2n_particle_emitter_is_paused(entt::entity
id) ->
bool
2004 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2006 return comp->is_paused();
2011auto internal_m2n_particle_emitter_get_texture(entt::entity
id) -> hpp::uuid
2013 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2015 return comp->get_texture().uid();
2020void internal_m2n_particle_emitter_set_texture(entt::entity
id,
const hpp::uuid& texture)
2022 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2025 auto& am = ctx.get_cached<asset_manager>();
2027 comp->set_texture(
handle);
2031void internal_m2n_particle_emitter_play(entt::entity
id)
2033 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2039void internal_m2n_particle_emitter_stop(entt::entity
id)
2041 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2047void internal_m2n_particle_emitter_stop_and_reset(entt::entity
id)
2049 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2051 comp->stop_and_reset();
2055void internal_m2n_particle_emitter_pause(entt::entity
id)
2057 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2063void internal_m2n_particle_emitter_resume(entt::entity
id)
2065 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2071void internal_m2n_particle_emitter_reset_emitter(entt::entity
id)
2073 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2075 comp->reset_emitter();
2079auto internal_m2n_particle_emitter_get_loop(entt::entity
id) ->
bool
2081 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2083 return comp->is_loop();
2088void internal_m2n_particle_emitter_set_loop(entt::entity
id,
bool loop)
2090 if(
auto comp = safe_get_component<particle_emitter_component>(
id))
2092 comp->set_loop(loop);
2097auto internal_m2n_text_get_text(entt::entity
id) ->
const std::string&
2099 if(
auto comp = safe_get_component<text_component>(
id))
2101 return comp->get_text();
2104 static const std::string empty;
2108void internal_m2n_text_set_text(entt::entity
id,
const std::string& text)
2110 if(
auto comp = safe_get_component<text_component>(
id))
2112 comp->set_text(text);
2118 if(
auto comp = safe_get_component<text_component>(
id))
2120 return comp->get_buffer_type();
2128 if(
auto comp = safe_get_component<text_component>(
id))
2130 comp->set_buffer_type(
type);
2136 if(
auto comp = safe_get_component<text_component>(
id))
2138 return comp->get_overflow_type();
2146 if(
auto comp = safe_get_component<text_component>(
id))
2148 comp->set_overflow_type(
type);
2152auto internal_m2n_text_get_font(entt::entity
id) -> hpp::uuid
2154 if(
auto comp = safe_get_component<text_component>(
id))
2156 return comp->get_font().uid();
2162void internal_m2n_text_set_font(entt::entity
id, hpp::uuid uid)
2164 if(
auto comp = safe_get_component<text_component>(
id))
2167 auto& am = ctx.get_cached<asset_manager>();
2169 auto asset = am.get_asset<
font>(uid);
2170 comp->set_font(asset);
2174auto internal_m2n_text_get_font_size(entt::entity
id) -> uint32_t
2176 if(
auto comp = safe_get_component<text_component>(
id))
2178 return comp->get_font_size();
2184void internal_m2n_text_set_font_size(entt::entity
id, uint32_t font_size)
2186 if(
auto comp = safe_get_component<text_component>(
id))
2188 comp->set_font_size(font_size);
2192auto internal_m2n_text_get_render_font_size(entt::entity
id) -> uint32_t
2194 if(
auto comp = safe_get_component<text_component>(
id))
2196 return comp->get_render_font_size();
2202auto internal_m2n_text_get_auto_size(entt::entity
id) ->
bool
2204 if(
auto comp = safe_get_component<text_component>(
id))
2206 return comp->get_auto_size();
2212void internal_m2n_text_set_auto_size(entt::entity
id,
bool auto_size)
2214 if(
auto comp = safe_get_component<text_component>(
id))
2216 comp->set_auto_size(auto_size);
2219auto internal_m2n_text_get_auto_size_range(entt::entity
id) ->
urange32_t
2221 if(
auto comp = safe_get_component<text_component>(
id))
2223 return comp->get_auto_size_range();
2229void internal_m2n_text_set_auto_size_range(entt::entity
id,
urange32_t range)
2231 if(
auto comp = safe_get_component<text_component>(
id))
2233 comp->set_auto_size_range(
range);
2237auto internal_m2n_text_get_area(entt::entity
id) -> math::vec2
2239 if(
auto comp = safe_get_component<text_component>(
id))
2241 auto area = comp->get_area();
2242 return {area.width, area.height};
2248void internal_m2n_text_set_area(entt::entity
id, math::vec2 area)
2250 if(
auto comp = safe_get_component<text_component>(
id))
2252 comp->set_area({area.x, area.y});
2256auto internal_m2n_text_get_render_area(entt::entity
id) -> math::vec2
2258 if(
auto comp = safe_get_component<text_component>(
id))
2260 auto area = comp->get_render_area();
2261 return {area.width, area.height};
2267auto internal_m2n_text_get_is_rich_text(entt::entity
id) ->
bool
2269 if(
auto comp = safe_get_component<text_component>(
id))
2271 return comp->get_is_rich_text();
2277void internal_m2n_text_set_is_rich_text(entt::entity
id,
bool rich)
2279 if(
auto comp = safe_get_component<text_component>(
id))
2281 comp->set_is_rich_text(rich);
2285auto internal_m2n_text_get_alignment(entt::entity
id) -> uint32_t
2287 if(
auto comp = safe_get_component<text_component>(
id))
2289 return comp->get_alignment().flags;
2292 return alignment{}.flags;
2295void internal_m2n_text_set_alignment(entt::entity
id, uint32_t alignment_flags)
2297 if(
auto comp = safe_get_component<text_component>(
id))
2299 comp->set_alignment({alignment_flags});
2303auto internal_m2n_text_get_bounds(entt::entity
id) ->
math::bbox
2305 if(
auto comp = safe_get_component<text_component>(
id))
2307 return comp->get_bounds();
2313auto internal_m2n_text_get_render_bounds(entt::entity
id) ->
math::bbox
2315 if(
auto comp = safe_get_component<text_component>(
id))
2317 return comp->get_render_bounds();
2325void internal_m2n_text_set_opacity(entt::entity
id,
float opacity)
2327 if(
auto comp = safe_get_component<text_component>(
id))
2329 auto style = comp->get_style();
2330 style.set_opacity(opacity);
2331 comp->set_style(style);
2335auto internal_m2n_text_get_opacity(entt::entity
id) ->
float
2337 if(
auto comp = safe_get_component<text_component>(
id))
2339 return comp->get_style().get_opacity();
2344void internal_m2n_text_set_text_color(entt::entity
id,
math::color color)
2346 if(
auto comp = safe_get_component<text_component>(
id))
2348 auto style = comp->get_style();
2349 style.set_text_color(color);
2350 comp->set_style(style);
2354auto internal_m2n_text_get_text_color(entt::entity
id) ->
math::color
2356 if(
auto comp = safe_get_component<text_component>(
id))
2358 return comp->get_style().get_text_color();
2363void internal_m2n_text_set_background_color(entt::entity
id,
math::color color)
2365 if(
auto comp = safe_get_component<text_component>(
id))
2367 auto style = comp->get_style();
2368 style.set_background_color(color);
2369 comp->set_style(style);
2373auto internal_m2n_text_get_background_color(entt::entity
id) ->
math::color
2375 if(
auto comp = safe_get_component<text_component>(
id))
2377 return comp->get_style().get_background_color();
2382void internal_m2n_text_set_foreground_color(entt::entity
id,
math::color color)
2384 if(
auto comp = safe_get_component<text_component>(
id))
2386 auto style = comp->get_style();
2387 style.set_foreground_color(color);
2388 comp->set_style(style);
2392auto internal_m2n_text_get_foreground_color(entt::entity
id) ->
math::color
2394 if(
auto comp = safe_get_component<text_component>(
id))
2396 return comp->get_style().get_foreground_color();
2401void internal_m2n_text_set_overline_color(entt::entity
id,
math::color color)
2403 if(
auto comp = safe_get_component<text_component>(
id))
2405 auto style = comp->get_style();
2406 style.set_overline_color(color);
2407 comp->set_style(style);
2411auto internal_m2n_text_get_overline_color(entt::entity
id) ->
math::color
2413 if(
auto comp = safe_get_component<text_component>(
id))
2415 return comp->get_style().get_overline_color();
2420void internal_m2n_text_set_underline_color(entt::entity
id,
math::color color)
2422 if(
auto comp = safe_get_component<text_component>(
id))
2424 auto style = comp->get_style();
2425 style.set_underline_color(color);
2426 comp->set_style(style);
2430auto internal_m2n_text_get_underline_color(entt::entity
id) ->
math::color
2432 if(
auto comp = safe_get_component<text_component>(
id))
2434 return comp->get_style().get_underline_color();
2439void internal_m2n_text_set_strike_color(entt::entity
id,
math::color color)
2441 if(
auto comp = safe_get_component<text_component>(
id))
2443 auto style = comp->get_style();
2444 style.set_strike_color(color);
2445 comp->set_style(style);
2449auto internal_m2n_text_get_strike_color(entt::entity
id) ->
math::color
2451 if(
auto comp = safe_get_component<text_component>(
id))
2453 return comp->get_style().get_strike_color();
2458void internal_m2n_text_set_outline_color(entt::entity
id,
math::color color)
2460 if(
auto comp = safe_get_component<text_component>(
id))
2462 auto style = comp->get_style();
2463 style.set_outline_color(color);
2464 comp->set_style(style);
2468auto internal_m2n_text_get_outline_color(entt::entity
id) ->
math::color
2470 if(
auto comp = safe_get_component<text_component>(
id))
2472 return comp->get_style().get_outline_color();
2477void internal_m2n_text_set_outline_width(entt::entity
id,
float width)
2479 if(
auto comp = safe_get_component<text_component>(
id))
2481 auto style = comp->get_style();
2482 style.outline_width = width;
2483 comp->set_style(style);
2487auto internal_m2n_text_get_outline_width(entt::entity
id) ->
float
2489 if(
auto comp = safe_get_component<text_component>(
id))
2491 return comp->get_style().outline_width;
2496void internal_m2n_text_set_shadow_offsets(entt::entity
id, math::vec2
offsets)
2498 if(
auto comp = safe_get_component<text_component>(
id))
2500 auto style = comp->get_style();
2501 style.shadow_offsets =
offsets;
2502 comp->set_style(style);
2506auto internal_m2n_text_get_shadow_offsets(entt::entity
id) -> math::vec2
2508 if(
auto comp = safe_get_component<text_component>(
id))
2510 return comp->get_style().shadow_offsets;
2512 return {0.0f, 0.0f};
2515void internal_m2n_text_set_shadow_color(entt::entity
id,
math::color color)
2517 if(
auto comp = safe_get_component<text_component>(
id))
2519 auto style = comp->get_style();
2520 style.set_shadow_color(color);
2521 comp->set_style(style);
2525auto internal_m2n_text_get_shadow_color(entt::entity
id) ->
math::color
2527 if(
auto comp = safe_get_component<text_component>(
id))
2529 return comp->get_style().get_shadow_color();
2534void internal_m2n_text_set_shadow_softener(entt::entity
id,
float softener)
2536 if(
auto comp = safe_get_component<text_component>(
id))
2538 auto style = comp->get_style();
2539 style.shadow_softener = softener;
2540 comp->set_style(style);
2544auto internal_m2n_text_get_shadow_softener(entt::entity
id) ->
float
2546 if(
auto comp = safe_get_component<text_component>(
id))
2548 return comp->get_style().shadow_softener;
2553void internal_m2n_text_set_style_flags(entt::entity
id, uint32_t flags)
2555 if(
auto comp = safe_get_component<text_component>(
id))
2557 auto style = comp->get_style();
2558 style.set_style_flags({flags});
2559 comp->set_style(style);
2563auto internal_m2n_text_get_style_flags(entt::entity
id) -> uint32_t
2565 if(
auto comp = safe_get_component<text_component>(
id))
2567 return comp->get_style().get_style_flags().flags;
2574void internal_m2n_light_set_color(entt::entity
id,
const math::color& color)
2576 if(
auto comp = safe_get_component<light_component>(
id))
2578 auto l = comp->get_light();
2584auto internal_m2n_light_get_color(entt::entity
id) ->
math::color
2586 if(
auto comp = safe_get_component<light_component>(
id))
2588 return comp->get_light().color;
2595auto internal_m2n_from_euler_rad(
const math::vec3& euler) -> math::quat
2600auto internal_m2n_to_euler_rad(
const math::quat& euler) -> math::vec3
2602 return math::eulerAngles(euler);
2605auto internal_m2n_angle_axis(
float angle,
const math::vec3& axis) -> math::quat
2607 return math::angleAxis(angle, axis);
2610auto internal_m2n_look_rotation(
const math::vec3& forward,
const math::vec3& up) -> math::quat
2615auto internal_m2n_from_to_rotation(
const math::vec3& from,
const math::vec3& to) -> math::quat
2620auto internal_m2n_get_asset_by_uuid(
const hpp::uuid& uid,
const mono::mono_type&
type) -> hpp::uuid
2622 if(
auto asset = get_mono_asset(
type.get_hash()))
2624 return asset->get_asset_uuid(uid);
2630auto internal_m2n_get_asset_by_key(
const std::string& key,
const mono::mono_type&
type) -> hpp::uuid
2632 if(
auto asset = get_mono_asset(
type.get_hash()))
2634 return asset->get_asset_uuid(key);
2642 using converter = mono::managed_interface::converter;
2645 auto& am = ctx.get_cached<asset_manager>();
2648 auto asset = am.get_asset<
material>(uid);
2655 return get_material_properties(
material);
2658auto internal_m2n_audio_clip_get_length(
const hpp::uuid& uid) ->
float
2661 auto& am = ctx.get_cached<asset_manager>();
2663 auto asset = am.get_asset<audio_clip>(uid);
2665 if(asset.is_valid())
2667 if(
auto clip = asset.get())
2669 float secs = clip->get_info().duration.count();
2676auto m2n_test_uuid(
const hpp::uuid& uid) -> hpp::uuid
2678 APPLOG_INFO(
"{}:: From C# {}", __func__, hpp::to_string(uid));
2681 APPLOG_INFO(
"{}:: New C++ {}", __func__, hpp::to_string(newuid));
2686void internal_m2n_gizmos_add_sphere(
const math::color& color,
const math::vec3& position,
float radius)
2689 auto& path = ctx.get_cached<rendering_system>();
2690 path.add_debugdraw_call(
2698 sphere.center.x = position.x;
2699 sphere.center.y = position.y;
2700 sphere.center.z = position.z;
2706void internal_m2n_gizmos_add_ray(
const math::color& color,
2707 const math::vec3& position,
2708 const math::vec3& direction,
2712 auto& path = ctx.get_cached<rendering_system>();
2713 path.add_debugdraw_call(
2714 [color, position, direction, max_distance](
gfx::dd_raii& dd)
2721 ray.pos.x = position.x;
2722 ray.pos.y = position.y;
2723 ray.pos.z = position.z;
2725 ray.dir.x = direction.x;
2726 ray.dir.y = direction.y;
2727 ray.dir.z = direction.z;
2736auto internal_m2n_layers_layer_to_name(
int layer) ->
const std::string&
2739 auto& csettings = ctx.get<settings>();
2741 if(
layer >= csettings.layer.layers.size())
2743 mono::raise_exception(
"System",
"Exception", fmt::format(
"Layer index {} is out of bounds.",
layer));
2745 static const std::string empty;
2748 return csettings.layer.layers[
layer];
2751auto internal_m2n_layers_name_to_layer(
const std::string&
name) ->
int
2754 auto& csettings = ctx.get<settings>();
2756 auto it = std::find(csettings.layer.layers.begin(), csettings.layer.layers.end(),
name);
2757 if(it != csettings.layer.layers.end())
2759 return static_cast<int>(std::distance(csettings.layer.layers.begin(), it));
2765auto internal_m2n_input_get_analog_value(
const std::string&
name) ->
float
2768 auto&
input = ctx.get_cached<input_system>();
2772auto internal_m2n_input_get_digital_value(
const std::string&
name) ->
bool
2775 auto&
input = ctx.get_cached<input_system>();
2779auto internal_m2n_input_is_pressed(
const std::string&
name) ->
bool
2782 auto&
input = ctx.get_cached<input_system>();
2786auto internal_m2n_input_is_released(
const std::string&
name) ->
bool
2789 auto&
input = ctx.get_cached<input_system>();
2793auto internal_m2n_input_is_down(
const std::string&
name) ->
bool
2796 auto&
input = ctx.get_cached<input_system>();
2803 auto&
input = ctx.get_cached<input_system>();
2804 return input.manager.get_keyboard().is_pressed(code);
2810 auto&
input = ctx.get_cached<input_system>();
2811 return input.manager.get_keyboard().is_released(code);
2817 auto&
input = ctx.get_cached<input_system>();
2818 return input.manager.get_keyboard().is_down(code);
2821auto internal_m2n_input_is_mouse_button_pressed(int32_t button) ->
bool
2824 auto&
input = ctx.get_cached<input_system>();
2825 return input.manager.get_mouse().is_pressed(button);
2828auto internal_m2n_input_is_mouse_button_released(int32_t button) ->
bool
2831 auto&
input = ctx.get_cached<input_system>();
2832 return input.manager.get_mouse().is_released(button);
2835auto internal_m2n_input_is_mouse_button_down(int32_t button) ->
bool
2838 auto&
input = ctx.get_cached<input_system>();
2839 return input.manager.get_mouse().is_down(button);
2842auto internal_m2n_input_get_mouse_position() -> math::vec2
2845 auto&
input = ctx.get_cached<input_system>();
2846 auto coord =
input.manager.get_mouse().get_position();
2847 return {coord.x, coord.y};
2853 const math::vec3& origin,
2854 const math::vec3& direction,
2860 auto& physics = ctx.get_cached<physics_system>();
2864 using converter = mono::managed_interface::converter;
2868 hit->entity = ray_hit->entity;
2869 hit->point = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit->point);
2870 hit->normal = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit->normal);
2871 hit->distance = ray_hit->distance;
2874 return ray_hit.has_value();
2877auto internal_m2n_physics_ray_cast_all(
const math::vec3& origin,
2878 const math::vec3& direction,
2881 bool query_sensors) -> hpp::small_vector<mono::managed_interface::raycast_hit>
2884 auto& physics = ctx.get_cached<physics_system>();
2888 hpp::small_vector<mono::managed_interface::raycast_hit>
hits;
2890 using converter = mono::managed_interface::converter;
2891 for(
const auto& ray_hit : ray_hits)
2893 auto& hit =
hits.emplace_back();
2894 hit.entity = ray_hit.entity;
2895 hit.point = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit.point);
2896 hit.normal = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit.normal);
2897 hit.distance = ray_hit.distance;
2904 const math::vec3& origin,
2905 const math::vec3& direction,
2912 auto& physics = ctx.get_cached<physics_system>();
2916 using converter = mono::managed_interface::converter;
2920 hit->entity = ray_hit->entity;
2921 hit->point = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit->point);
2922 hit->normal = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit->normal);
2923 hit->distance = ray_hit->distance;
2926 return ray_hit.has_value();
2929auto internal_m2n_physics_sphere_cast_all(
const math::vec3& origin,
2930 const math::vec3& direction,
2934 bool query_sensors) -> hpp::small_vector<mono::managed_interface::raycast_hit>
2937 auto& physics = ctx.get_cached<physics_system>();
2941 hpp::small_vector<mono::managed_interface::raycast_hit>
hits;
2943 using converter = mono::managed_interface::converter;
2944 for(
const auto& ray_hit : ray_hits)
2946 auto& hit =
hits.emplace_back();
2947 hit.entity = ray_hit.entity;
2948 hit.point = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit.point);
2949 hit.normal = converter::convert<math::vec3, mono::managed_interface::vector3>(ray_hit.normal);
2950 hit.distance = ray_hit.distance;
2956auto internal_m2n_physics_sphere_overlap(
const math::vec3& origin,
float radius,
int layer_mask,
bool query_sensors)
2960 auto& physics = ctx.get_cached<physics_system>();
2969auto internal_m2n_audio_source_get_loop(entt::entity
id) ->
bool
2971 if(
auto comp = safe_get_component<audio_source_component>(
id))
2973 return comp->is_looping();
2981void internal_m2n_utils_set_ik_posiiton_ccd(entt::entity
id,
2982 const math::vec3& target,
2983 int num_bones_in_chain,
2987 auto e = get_entity_from_id(
id);
2992void internal_m2n_utils_set_ik_posiiton_fabrik(entt::entity
id,
2993 const math::vec3& target,
2994 int num_bones_in_chain,
2998 auto e = get_entity_from_id(
id);
3003void internal_m2n_utils_set_ik_posiiton_two_bone(entt::entity
id,
3004 const math::vec3& target,
3005 const math::vec3& forward,
3010 auto e = get_entity_from_id(
id);
3015void internal_m2n_utils_set_ik_look_at_posiiton(entt::entity
id,
const math::vec3& target,
float weight)
3017 auto e = get_entity_from_id(
id);
3022void internal_m2n_audio_source_set_loop(entt::entity
id,
bool loop)
3024 if(
auto comp = safe_get_component<audio_source_component>(
id))
3026 comp->set_loop(loop);
3030auto internal_m2n_audio_source_get_volume(entt::entity
id) ->
float
3032 if(
auto comp = safe_get_component<audio_source_component>(
id))
3034 return comp->get_volume();
3040void internal_m2n_audio_source_set_volume(entt::entity
id,
float volume)
3042 if(
auto comp = safe_get_component<audio_source_component>(
id))
3044 comp->set_volume(volume);
3048auto internal_m2n_audio_source_get_pitch(entt::entity
id) ->
float
3050 if(
auto comp = safe_get_component<audio_source_component>(
id))
3052 return comp->get_pitch();
3058void internal_m2n_audio_source_set_pitch(entt::entity
id,
float pitch)
3060 if(
auto comp = safe_get_component<audio_source_component>(
id))
3062 comp->set_pitch(pitch);
3066auto internal_m2n_audio_source_get_volume_rolloff(entt::entity
id) ->
float
3068 if(
auto comp = safe_get_component<audio_source_component>(
id))
3070 return comp->get_volume_rolloff();
3076void internal_m2n_audio_source_set_volume_rolloff(entt::entity
id,
float rolloff)
3078 if(
auto comp = safe_get_component<audio_source_component>(
id))
3080 comp->set_volume_rolloff(rolloff);
3084auto internal_m2n_audio_source_get_min_distance(entt::entity
id) ->
float
3086 if(
auto comp = safe_get_component<audio_source_component>(
id))
3088 return comp->get_range().min;
3094void internal_m2n_audio_source_set_min_distance(entt::entity
id,
float distance)
3096 if(
auto comp = safe_get_component<audio_source_component>(
id))
3098 auto range = comp->get_range();
3100 comp->set_range(
range);
3104auto internal_m2n_audio_source_get_max_distance(entt::entity
id) ->
float
3106 if(
auto comp = safe_get_component<audio_source_component>(
id))
3108 return comp->get_range().max;
3114void internal_m2n_audio_source_set_max_distance(entt::entity
id,
float distance)
3116 if(
auto comp = safe_get_component<audio_source_component>(
id))
3118 auto range = comp->get_range();
3120 comp->set_range(
range);
3124auto internal_m2n_audio_source_get_mute(entt::entity
id) ->
bool
3126 if(
auto comp = safe_get_component<audio_source_component>(
id))
3128 return comp->is_muted();
3134void internal_m2n_audio_source_set_mute(entt::entity
id,
bool mute)
3136 if(
auto comp = safe_get_component<audio_source_component>(
id))
3138 comp->set_mute(mute);
3142auto internal_m2n_audio_source_get_time(entt::entity
id) ->
float
3144 if(
auto comp = safe_get_component<audio_source_component>(
id))
3146 return float(comp->get_playback_position().count());
3152void internal_m2n_audio_source_set_time(entt::entity
id,
float seconds)
3154 if(
auto comp = safe_get_component<audio_source_component>(
id))
3156 comp->set_playback_position(audio::duration_t(seconds));
3160auto internal_m2n_audio_source_is_playing(entt::entity
id) ->
bool
3162 if(
auto comp = safe_get_component<audio_source_component>(
id))
3164 return comp->is_playing();
3170auto internal_m2n_audio_source_is_paused(entt::entity
id) ->
bool
3172 if(
auto comp = safe_get_component<audio_source_component>(
id))
3174 return comp->is_paused();
3180void internal_m2n_audio_source_play(entt::entity
id)
3182 if(
auto comp = safe_get_component<audio_source_component>(
id))
3188void internal_m2n_audio_source_stop(entt::entity
id)
3190 if(
auto comp = safe_get_component<audio_source_component>(
id))
3196void internal_m2n_audio_source_pause(entt::entity
id)
3198 if(
auto comp = safe_get_component<audio_source_component>(
id))
3204void internal_m2n_audio_source_resume(entt::entity
id)
3206 if(
auto comp = safe_get_component<audio_source_component>(
id))
3212auto internal_m2n_audio_source_get_audio_clip(entt::entity
id) -> hpp::uuid
3214 if(
auto comp = safe_get_component<audio_source_component>(
id))
3216 return comp->get_clip().uid();
3222void internal_m2n_audio_source_set_audio_clip(entt::entity
id, hpp::uuid uid)
3224 if(
auto comp = safe_get_component<audio_source_component>(
id))
3227 auto& am = ctx.get_cached<asset_manager>();
3229 auto asset = am.get_asset<audio_clip>(uid);
3230 comp->set_clip(asset);
3250auto internal_m2n_ui_document_get_asset(entt::entity
id) -> hpp::uuid
3252 if(
auto comp = safe_get_component<ui_document_component>(
id))
3254 return comp->asset.uid();
3260void internal_m2n_ui_document_set_asset(entt::entity
id,
const hpp::uuid& uid)
3262 if(
auto comp = safe_get_component<ui_document_component>(
id))
3265 auto& am = ctx.get_cached<asset_manager>();
3267 auto asset = am.get_asset<ui_tree>(uid);
3268 comp->asset = asset;
3272auto internal_m2n_ui_document_is_loaded(entt::entity
id) ->
bool
3274 if(
auto comp = safe_get_component<ui_document_component>(
id))
3276 return comp->is_loaded();
3282auto internal_m2n_ui_document_is_enabled(entt::entity
id) ->
bool
3284 if(
auto comp = safe_get_component<ui_document_component>(
id))
3286 return comp->is_enabled();
3292void internal_m2n_ui_document_set_enabled(entt::entity
id,
bool enabled)
3294 if(
auto comp = safe_get_component<ui_document_component>(
id))
3296 comp->set_enabled(enabled);
3299void internal_m2n_ui_document_close(entt::entity
id)
3301 if(
auto comp = safe_get_component<ui_document_component>(
id))
3305 comp->document->Close();
3306 comp->document =
nullptr;
3311auto internal_m2n_ui_document_get_title(entt::entity
id) ->
const std::string&
3313 if(
auto comp = safe_get_component<ui_document_component>(
id))
3317 return comp->document->GetTitle();
3321 static const std::string empty;
3325void internal_m2n_ui_document_set_title(entt::entity
id,
const std::string& title)
3327 if(
auto comp = safe_get_component<ui_document_component>(
id))
3331 comp->document->SetTitle(title);
3351auto get_ui_element_safe(entt::entity entity_id,
const std::string& element_id) -> Rml::Element*
3353 if(
auto comp = safe_get_component<ui_document_component>(entity_id))
3357 return comp->document->GetElementById(element_id);
3379void dispatch_ui_event_to_manager(
const T& event_data)
3384 auto& script_sys = ctx.get<script_system>();
3385 auto assembly = script_sys.get_engine_assembly();
3388 auto ui_event_manager_type = assembly.get_type(
"Unravel.Core",
"UIEventManager");
3389 if (!ui_event_manager_type.valid())
3391 APPLOG_ERROR(
"UIEventManager type not found in assembly");
3396 auto dispatch_method = ui_event_manager_type.get_method(
"InternalDispatchEvent");
3397 if (!dispatch_method.valid())
3399 APPLOG_ERROR(
"UIEventManager.InternalDispatchEvent method not found");
3404 auto method_invoker = mono::make_method_invoker<void(const T&)>(dispatch_method,
true);
3405 if (method_invoker.valid())
3407 method_invoker(event_data);
3411 APPLOG_ERROR(
"Failed to create method invoker for UIEventManager.InternalDispatchEvent");
3414 catch (
const mono::mono_exception& e)
3416 APPLOG_ERROR(
"Mono exception dispatching UI event: {}",
e.what());
3418 catch (
const std::exception& e)
3427enum class ui_event_type
3438auto get_ui_event_type(
const Rml::Event&
event) -> ui_event_type
3440 const auto event_id =
event.GetId();
3443 if (event_id == Rml::EventId::Keydown || event_id == Rml::EventId::Keyup)
3445 return ui_event_type::key;
3449 if (event_id == Rml::EventId::Textinput)
3451 return ui_event_type::textinput;
3455 if (event_id == Rml::EventId::Click || event_id == Rml::EventId::Mousedown || event_id == Rml::EventId::Mouseup ||
3456 event_id == Rml::EventId::Mousemove || event_id == Rml::EventId::Mouseover || event_id == Rml::EventId::Mouseout ||
3457 event_id == Rml::EventId::Mousescroll || event_id == Rml::EventId::Dblclick || event_id == Rml::EventId::Drag ||
3458 event_id == Rml::EventId::Dragstart || event_id == Rml::EventId::Dragover || event_id == Rml::EventId::Dragdrop)
3460 return ui_event_type::pointer;
3464 if (event_id == Rml::EventId::Change)
3466 auto value_str =
event.GetParameter<std::string>(
"value",
"");
3467 if (!value_str.empty())
3470 if (
auto* element =
event.GetCurrentElement())
3472 if (!element->HasAttribute(
"min") && !element->HasAttribute(
"max"))
3474 return ui_event_type::change;
3479 return ui_event_type::value;
3485 return ui_event_type::unknown;
3491 const Rml::Event&
event,
3492 Rml::Element* target_element,
3493 Rml::Element* current_element)
3501 event_data.
phase =
static_cast<int>(
event.GetPhase());
3505void dispatch_key_event_to_manager(
const Rml::Event&
event,
3506 Rml::Element* target_element,
3507 Rml::Element* current_element)
3512 fill_base_event_data(key_event_data,
event, target_element, current_element);
3515 auto key_identifier =
event.GetParameter<
int>(
"key_identifier", 0);
3517 key_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
3518 key_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
3519 key_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
3520 key_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
3522 dispatch_ui_event_to_manager(key_event_data);
3526void dispatch_pointer_event_to_manager(
const Rml::Event&
event,
3527 Rml::Element* target_element,
3528 Rml::Element* current_element)
3533 fill_base_event_data(pointer_event_data,
event, target_element, current_element);
3536 pointer_event_data.
x =
event.GetParameter<
float>(
"mouse_x", 0.0f);
3537 pointer_event_data.
y =
event.GetParameter<
float>(
"mouse_y", 0.0f);
3538 pointer_event_data.
button =
event.GetParameter<
int>(
"button", -1);
3539 pointer_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
3540 pointer_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
3541 pointer_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
3542 pointer_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
3543 pointer_event_data.
delta_x =
event.GetParameter<
float>(
"wheel_delta_x", 0.0f);
3544 pointer_event_data.
delta_y =
event.GetParameter<
float>(
"wheel_delta_y", 0.0f);
3546 dispatch_ui_event_to_manager(pointer_event_data);
3551void dispatch_textinput_event_to_manager(
const Rml::Event&
event,
3552 Rml::Element* target_element,
3553 Rml::Element* current_element)
3557 fill_base_event_data(textinput_event_data,
event, target_element, current_element);
3561 textinput_event_data.
text =
event.GetParameter<std::string>(
"text",
"");
3562 textinput_event_data.
ctrl_key =
event.GetParameter<
int>(
"ctrl_key", 0) > 0;
3563 textinput_event_data.
shift_key =
event.GetParameter<
int>(
"shift_key", 0) > 0;
3564 textinput_event_data.
alt_key =
event.GetParameter<
int>(
"alt_key", 0) > 0;
3565 textinput_event_data.
meta_key =
event.GetParameter<
int>(
"meta_key", 0) > 0;
3568 dispatch_ui_event_to_manager(textinput_event_data);
3572void dispatch_value_event_to_manager(
const Rml::Event&
event,
3573 Rml::Element* target_element,
3574 Rml::Element* current_element)
3579 fill_base_event_data(value_event_data,
event, target_element, current_element);
3582 value_event_data.
value =
event.GetParameter<
float>(
"value", 0);
3584 if(
auto* slider_element =
event.GetCurrentElement())
3586 value_event_data.
min_value = slider_element->GetAttribute<
float>(
"min", 0);
3587 value_event_data.
max_value = slider_element->GetAttribute<
float>(
"max", 0);
3588 value_event_data.
step = slider_element->GetAttribute<
float>(
"step", 0);
3591 dispatch_ui_event_to_manager(value_event_data);
3595void dispatch_change_event_to_manager(
const Rml::Event&
event,
3596 Rml::Element* target_element,
3597 Rml::Element* current_element)
3602 fill_base_event_data(change_event_data,
event, target_element, current_element);
3605 change_event_data.
value =
event.GetParameter<std::string>(
"value",
"");
3607 dispatch_ui_event_to_manager(change_event_data);
3612void dispatch_base_event_to_manager(
const Rml::Event&
event,
3613 Rml::Element* target_element,
3614 Rml::Element* current_element)
3617 fill_base_event_data(event_data,
event, target_element, current_element);
3618 dispatch_ui_event_to_manager(event_data);
3622class ui_global_event_listener :
public Rml::EventListener
3624 Rml::Event* current_event_ =
nullptr;
3626 void ProcessEvent(Rml::Event&
event)
override
3628 current_event_ = &
event;
3632 auto* target_element =
event.GetTargetElement();
3633 if (!target_element)
3638 auto* current_element =
event.GetCurrentElement();
3639 if (!current_element)
3645 const auto event_type = get_ui_event_type(
event);
3649 case ui_event_type::key:
3650 dispatch_key_event_to_manager(
event, target_element, current_element);
3653 case ui_event_type::textinput:
3654 dispatch_textinput_event_to_manager(
event, target_element, current_element);
3657 case ui_event_type::pointer:
3658 dispatch_pointer_event_to_manager(
event, target_element, current_element);
3661 case ui_event_type::change:
3662 dispatch_change_event_to_manager(
event, target_element, current_element);
3665 case ui_event_type::value:
3666 dispatch_value_event_to_manager(
event, target_element, current_element);
3669 case ui_event_type::unknown:
3672 dispatch_base_event_to_manager(
event, target_element, current_element);
3676 catch (
const std::exception& e)
3680 current_event_ =
nullptr;
3684 auto get_current_event() const ->
Rml::Event*
3686 return current_event_;
3691ui_global_event_listener g_ui_global_listener;
3694void internal_m2n_ui_ensure_native_event_listener(std::intptr_t element_ptr,
const std::string& event_type)
3696 if (element_ptr == 0)
3703 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3707 element->AddEventListener(event_type, &g_ui_global_listener);
3709 APPLOG_TRACE(
"Ensured native UI event listener: element='{}', event='{}'", element->GetId(), event_type);
3711 catch (
const mono::mono_exception& e)
3713 APPLOG_ERROR(
"Mono exception ensuring native UI event listener: {}",
e.what());
3715 catch (
const std::exception& e)
3717 APPLOG_ERROR(
"Error ensuring native UI event listener: {}",
e.what());
3722void internal_m2n_ui_stop_propagation(std::intptr_t native_ptr)
3727 auto* current_event = g_ui_global_listener.get_current_event();
3728 if (current_event && current_event ==
reinterpret_cast<Rml::Event*
>(native_ptr))
3730 current_event->StopPropagation();
3738 catch (
const std::exception& e)
3740 APPLOG_ERROR(
"Error stopping UI event propagation: {}",
e.what());
3745void internal_m2n_ui_stop_immediate_propagation(std::intptr_t native_ptr)
3749 auto* current_event = g_ui_global_listener.get_current_event();
3752 current_event->StopImmediatePropagation();
3756 APPLOG_WARNING(
"No current UI event to stop immediate propagation on");
3759 catch (
const std::exception& e)
3761 APPLOG_ERROR(
"Error stopping UI event immediate propagation: {}",
e.what());
3780auto validate_ui_element_wrapper(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
3782 if (element_ptr == 0)
3787 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3790 if (
auto comp = safe_get_component<ui_document_component>(owner_entity))
3795 return comp->document->Contains(element);
3803auto validate_ui_document_wrapper(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
3805 if (document_ptr == 0)
3810 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3813 if (
auto comp = safe_get_component<ui_document_component>(owner_entity))
3815 if (comp->document && comp->document == document)
3828auto internal_m2n_ui_document_get_wrapper(entt::entity entity_id) -> std::intptr_t
3830 if (
auto comp = safe_get_component<ui_document_component>(entity_id))
3834 return reinterpret_cast<std::intptr_t
>(comp->document);
3840auto internal_m2n_ui_document_get_element_wrapper_by_id(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string& element_id) -> std::intptr_t
3842 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3847 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3848 auto* element = document->GetElementById(element_id);
3849 return reinterpret_cast<std::intptr_t
>(element);
3852auto internal_m2n_ui_document_query_selector_wrapper(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string& selector) -> std::intptr_t
3854 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3859 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3860 auto element = document->QuerySelector(selector);
3863 return reinterpret_cast<std::intptr_t
>(element);
3870auto internal_m2n_ui_element_wrapper_get_id(std::intptr_t element_ptr, entt::entity owner_entity) -> std::string
3872 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
3877 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3878 return element->GetId();
3885auto internal_m2n_ui_document_wrapper_is_valid(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
3887 return validate_ui_document_wrapper(document_ptr, owner_entity);
3890auto internal_m2n_ui_document_wrapper_get_title(std::intptr_t document_ptr, entt::entity owner_entity) -> std::string
3892 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3897 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3898 return document->GetTitle();
3901void internal_m2n_ui_document_wrapper_set_title(std::intptr_t document_ptr, entt::entity owner_entity,
const std::string& title)
3903 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3908 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3909 document->SetTitle(title);
3912auto internal_m2n_ui_document_wrapper_is_visible(std::intptr_t document_ptr, entt::entity owner_entity) ->
bool
3914 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3919 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3920 return document->IsVisible();
3923void internal_m2n_ui_document_wrapper_show(std::intptr_t document_ptr, entt::entity owner_entity)
3925 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3930 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3934void internal_m2n_ui_document_wrapper_hide(std::intptr_t document_ptr, entt::entity owner_entity)
3936 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3941 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3945void internal_m2n_ui_document_wrapper_close(std::intptr_t document_ptr, entt::entity owner_entity)
3947 if (!validate_ui_document_wrapper(document_ptr, owner_entity))
3952 auto* document =
reinterpret_cast<Rml::ElementDocument*
>(document_ptr);
3960auto internal_m2n_ui_element_wrapper_is_valid(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
3962 return validate_ui_element_wrapper(element_ptr, owner_entity);
3965auto internal_m2n_ui_element_wrapper_get_inner_rml(std::intptr_t element_ptr, entt::entity owner_entity) -> std::string
3967 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
3972 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3973 return element->GetInnerRML();
3976void internal_m2n_ui_element_wrapper_set_inner_rml(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& rml)
3978 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
3983 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3984 element->SetInnerRML(rml);
3987auto internal_m2n_ui_element_wrapper_is_visible(std::intptr_t element_ptr, entt::entity owner_entity) ->
bool
3989 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
3994 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
3995 return element->IsVisible();
3998void internal_m2n_ui_element_wrapper_set_visible(std::intptr_t element_ptr, entt::entity owner_entity,
bool visible)
4000 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4005 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4008 element->SetProperty(
"display",
"block");
4012 element->SetProperty(
"display",
"none");
4016auto internal_m2n_ui_element_wrapper_get_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name) -> std::string
4018 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4023 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4024 return element->GetAttribute<Rml::String>(attribute_name,
"");
4027void internal_m2n_ui_element_wrapper_set_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name,
const std::string& value)
4029 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4034 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4035 element->SetAttribute(attribute_name, value);
4038void internal_m2n_ui_element_wrapper_remove_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name)
4040 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4045 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4046 element->RemoveAttribute(attribute_name);
4049auto internal_m2n_ui_element_wrapper_has_attribute(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& attribute_name) ->
bool
4051 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4056 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4057 return element->HasAttribute(attribute_name);
4060void internal_m2n_ui_element_wrapper_set_class(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& class_name,
bool activate)
4062 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4067 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4068 element->SetClass(class_name, activate);
4071auto internal_m2n_ui_element_wrapper_is_class_set(std::intptr_t element_ptr, entt::entity owner_entity,
const std::string& class_name) ->
bool
4073 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4078 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4079 return element->IsClassSet(class_name);
4082void internal_m2n_ui_element_wrapper_focus(std::intptr_t element_ptr, entt::entity owner_entity)
4084 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4089 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4093void internal_m2n_ui_element_wrapper_blur(std::intptr_t element_ptr, entt::entity owner_entity)
4095 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4100 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4104void internal_m2n_ui_element_wrapper_click(std::intptr_t element_ptr, entt::entity owner_entity)
4106 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4111 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4115void internal_m2n_ui_element_wrapper_scroll_into_view(std::intptr_t element_ptr, entt::entity owner_entity,
bool align_with_top)
4117 if (!validate_ui_element_wrapper(element_ptr, owner_entity))
4122 auto* element =
reinterpret_cast<Rml::Element*
>(element_ptr);
4123 element->ScrollIntoView(align_with_top);
4130auto script_system::bind_internal_calls(
rtti::context& ctx) ->
bool
4132 APPLOG_TRACE(
"{}::{}", hpp::type_name_str(*
this), __func__);
4135 auto reg = mono::internal_call_registry(
"Unravel.Core.Log");
4136 reg.add_internal_call(
"internal_m2n_log_trace", internal_call(internal_m2n_log_trace));
4137 reg.add_internal_call(
"internal_m2n_log_info", internal_call(internal_m2n_log_info));
4138 reg.add_internal_call(
"internal_m2n_log_warning", internal_call(internal_m2n_log_warning));
4139 reg.add_internal_call(
"internal_m2n_log_error", internal_call(internal_m2n_log_error));
4143 auto reg = mono::internal_call_registry(
"Unravel.Core.Scene");
4144 reg.add_internal_call(
"internal_m2n_load_scene", internal_call(internal_m2n_load_scene));
4145 reg.add_internal_call(
"internal_m2n_load_scene_uid", internal_call(internal_m2n_load_scene_uid));
4146 reg.add_internal_call(
"internal_m2n_create_scene", internal_call(internal_m2n_create_scene));
4147 reg.add_internal_call(
"internal_m2n_destroy_scene", internal_call(internal_m2n_destroy_scene));
4148 reg.add_internal_call(
"internal_m2n_create_entity", internal_call(internal_m2n_create_entity));
4149 reg.add_internal_call(
"internal_m2n_create_entity_from_prefab_uid",
4150 internal_call(internal_m2n_create_entity_from_prefab_uid));
4151 reg.add_internal_call(
"internal_m2n_create_entity_from_prefab_key",
4152 internal_call(internal_m2n_create_entity_from_prefab_key));
4153 reg.add_internal_call(
"internal_m2n_clone_entity", internal_call(internal_m2n_clone_entity));
4154 reg.add_internal_call(
"internal_m2n_destroy_entity", internal_call(internal_m2n_destroy_entity));
4155 reg.add_internal_call(
"internal_m2n_destroy_entity_immediate",
4156 internal_call(internal_m2n_destroy_entity_immediate));
4158 reg.add_internal_call(
"internal_m2n_is_entity_valid", internal_call(internal_m2n_is_entity_valid));
4159 reg.add_internal_call(
"internal_m2n_find_entity_by_name", internal_call(internal_m2n_find_entity_by_name));
4160 reg.add_internal_call(
"internal_m2n_find_entities_by_name", internal_call(internal_m2n_find_entities_by_name));
4161 reg.add_internal_call(
"internal_m2n_find_entity_by_tag", internal_call(internal_m2n_find_entity_by_tag));
4162 reg.add_internal_call(
"internal_m2n_find_entities_by_tag", internal_call(internal_m2n_find_entities_by_tag));
4163 reg.add_internal_call(
"internal_m2n_find_entities_with_component", internal_call(internal_m2n_find_entities_with_component));
4164 reg.add_internal_call(
"internal_m2n_find_entities_with_components", internal_call(internal_m2n_find_entities_with_components));
4168 auto reg = mono::internal_call_registry(
"Unravel.Core.Entity");
4169 reg.add_internal_call(
"internal_m2n_add_component", internal_call(internal_m2n_add_component));
4170 reg.add_internal_call(
"internal_m2n_get_component", internal_call(internal_m2n_get_component));
4171 reg.add_internal_call(
"internal_m2n_get_component_in_children",
4172 internal_call(internal_m2n_get_component_in_children));
4173 reg.add_internal_call(
"internal_m2n_has_component", internal_call(internal_m2n_has_component));
4174 reg.add_internal_call(
"internal_m2n_get_components", internal_call(internal_m2n_get_components));
4175 reg.add_internal_call(
"internal_m2n_get_components_in_children",
4176 internal_call(internal_m2n_get_components_in_children));
4178 reg.add_internal_call(
"internal_m2n_remove_component_instance",
4179 internal_call(internal_m2n_remove_component_instance));
4180 reg.add_internal_call(
"internal_m2n_remove_component_instance_delay",
4181 internal_call(internal_m2n_remove_component_instance_delay));
4183 reg.add_internal_call(
"internal_m2n_remove_component", internal_call(internal_m2n_remove_component));
4184 reg.add_internal_call(
"internal_m2n_remove_component_delay",
4185 internal_call(internal_m2n_remove_component_delay));
4187 reg.add_internal_call(
"internal_m2n_get_transform_component",
4188 internal_call(internal_m2n_get_transform_component));
4189 reg.add_internal_call(
"internal_m2n_get_name", internal_call(internal_m2n_get_name));
4190 reg.add_internal_call(
"internal_m2n_set_name", internal_call(internal_m2n_set_name));
4191 reg.add_internal_call(
"internal_m2n_get_tag", internal_call(internal_m2n_get_tag));
4192 reg.add_internal_call(
"internal_m2n_set_tag", internal_call(internal_m2n_set_tag));
4193 reg.add_internal_call(
"internal_m2n_get_layers", internal_call(internal_m2n_get_layers));
4194 reg.add_internal_call(
"internal_m2n_set_layers", internal_call(internal_m2n_set_layers));
4196 reg.add_internal_call(
"internal_m2n_get_active_global", internal_call(internal_m2n_get_active_global));
4197 reg.add_internal_call(
"internal_m2n_get_active_local", internal_call(internal_m2n_get_active_local));
4198 reg.add_internal_call(
"internal_m2n_set_active_local", internal_call(internal_m2n_set_active_local));
4202 auto reg = mono::internal_call_registry(
"Unravel.Core.TransformComponent");
4203 reg.add_internal_call(
"internal_m2n_get_children", internal_call(internal_m2n_get_children));
4204 reg.add_internal_call(
"internal_m2n_get_child", internal_call(internal_m2n_get_child));
4205 reg.add_internal_call(
"internal_m2n_get_parent", internal_call(internal_m2n_get_parent));
4206 reg.add_internal_call(
"internal_m2n_set_parent", internal_call(internal_m2n_set_parent));
4208 reg.add_internal_call(
"internal_m2n_get_position_global", internal_call(internal_m2n_get_position_global));
4209 reg.add_internal_call(
"internal_m2n_set_position_global", internal_call(internal_m2n_set_position_global));
4210 reg.add_internal_call(
"internal_m2n_move_by_global", internal_call(internal_m2n_move_by_global));
4212 reg.add_internal_call(
"internal_m2n_get_position_local", internal_call(internal_m2n_get_position_local));
4213 reg.add_internal_call(
"internal_m2n_set_position_local", internal_call(internal_m2n_set_position_local));
4214 reg.add_internal_call(
"internal_m2n_move_by_local", internal_call(internal_m2n_move_by_local));
4217 reg.add_internal_call(
"internal_m2n_get_rotation_euler_global",
4218 internal_call(internal_m2n_get_rotation_euler_global));
4219 reg.add_internal_call(
"internal_m2n_set_rotation_euler_global",
4220 internal_call(internal_m2n_set_rotation_euler_global));
4221 reg.add_internal_call(
"internal_m2n_rotate_by_euler_global",
4222 internal_call(internal_m2n_rotate_by_euler_global));
4224 reg.add_internal_call(
"internal_m2n_get_rotation_euler_local",
4225 internal_call(internal_m2n_get_rotation_euler_local));
4226 reg.add_internal_call(
"internal_m2n_set_rotation_euler_local",
4227 internal_call(internal_m2n_set_rotation_euler_local));
4228 reg.add_internal_call(
"internal_m2n_rotate_by_euler_local", internal_call(internal_m2n_rotate_by_euler_local));
4231 reg.add_internal_call(
"internal_m2n_get_rotation_global", internal_call(internal_m2n_get_rotation_global));
4232 reg.add_internal_call(
"internal_m2n_set_rotation_global", internal_call(internal_m2n_set_rotation_global));
4233 reg.add_internal_call(
"internal_m2n_rotate_by_global", internal_call(internal_m2n_rotate_by_global));
4235 reg.add_internal_call(
"internal_m2n_get_rotation_local", internal_call(internal_m2n_get_rotation_local));
4236 reg.add_internal_call(
"internal_m2n_set_rotation_local", internal_call(internal_m2n_set_rotation_local));
4237 reg.add_internal_call(
"internal_m2n_rotate_by_local", internal_call(internal_m2n_rotate_by_local));
4240 reg.add_internal_call(
"internal_m2n_rotate_axis_global", internal_call(internal_m2n_rotate_axis_global));
4241 reg.add_internal_call(
"internal_m2n_look_at", internal_call(internal_m2n_look_at));
4242 reg.add_internal_call(
"internal_m2n_transform_vector_global",
4243 internal_call(internal_m2n_transform_vector_global));
4244 reg.add_internal_call(
"internal_m2n_inverse_transform_vector_global",
4245 internal_call(internal_m2n_inverse_transform_vector_global));
4247 reg.add_internal_call(
"internal_m2n_transform_direction_global",
4248 internal_call(internal_m2n_transform_direction_global));
4249 reg.add_internal_call(
"internal_m2n_inverse_transform_direction_global",
4250 internal_call(internal_m2n_inverse_transform_direction_global));
4253 reg.add_internal_call(
"internal_m2n_get_scale_global", internal_call(internal_m2n_get_scale_global));
4254 reg.add_internal_call(
"internal_m2n_set_scale_global", internal_call(internal_m2n_set_scale_global));
4255 reg.add_internal_call(
"internal_m2n_scale_by_global", internal_call(internal_m2n_scale_by_local));
4257 reg.add_internal_call(
"internal_m2n_get_scale_local", internal_call(internal_m2n_get_scale_local));
4258 reg.add_internal_call(
"internal_m2n_set_scale_local", internal_call(internal_m2n_set_scale_local));
4259 reg.add_internal_call(
"internal_m2n_scale_by_local", internal_call(internal_m2n_scale_by_local));
4262 reg.add_internal_call(
"internal_m2n_get_skew_global", internal_call(internal_m2n_get_skew_global));
4263 reg.add_internal_call(
"internal_m2n_set_skew_globa", internal_call(internal_m2n_setl_skew_globa));
4264 reg.add_internal_call(
"internal_m2n_get_skew_local", internal_call(internal_m2n_get_skew_local));
4265 reg.add_internal_call(
"internal_m2n_set_skew_local", internal_call(internal_m2n_set_skew_local));
4269 auto reg = mono::internal_call_registry(
"Unravel.Core.PhysicsComponent");
4270 reg.add_internal_call(
"internal_m2n_physics_apply_explosion_force",
4271 internal_call(internal_m2n_physics_apply_explosion_force));
4272 reg.add_internal_call(
"internal_m2n_physics_apply_force", internal_call(internal_m2n_physics_apply_force));
4273 reg.add_internal_call(
"internal_m2n_physics_apply_torque", internal_call(internal_m2n_physics_apply_torque));
4274 reg.add_internal_call(
"internal_m2n_physics_get_velocity", internal_call(internal_m2n_physics_get_velocity));
4275 reg.add_internal_call(
"internal_m2n_physics_set_velocity", internal_call(internal_m2n_physics_set_velocity));
4276 reg.add_internal_call(
"internal_m2n_physics_get_angular_velocity",
4277 internal_call(internal_m2n_physics_get_angular_velocity));
4278 reg.add_internal_call(
"internal_m2n_physics_set_angular_velocity",
4279 internal_call(internal_m2n_physics_set_angular_velocity));
4281 reg.add_internal_call(
"internal_m2n_physics_get_include_layers",
4282 internal_call(internal_m2n_physics_get_include_layers));
4283 reg.add_internal_call(
"internal_m2n_physics_set_include_layers",
4284 internal_call(internal_m2n_physics_set_include_layers));
4285 reg.add_internal_call(
"internal_m2n_physics_get_exclude_layers",
4286 internal_call(internal_m2n_physics_get_exclude_layers));
4287 reg.add_internal_call(
"internal_m2n_physics_set_exclude_layers",
4288 internal_call(internal_m2n_physics_set_exclude_layers));
4289 reg.add_internal_call(
"internal_m2n_physics_get_collision_layers",
4290 internal_call(internal_m2n_physics_get_collision_layers));
4294 auto reg = mono::internal_call_registry(
"Unravel.Core.AnimationComponent");
4295 reg.add_internal_call(
"internal_m2n_animation_blend", internal_call(internal_m2n_animation_blend));
4296 reg.add_internal_call(
"internal_m2n_animation_play", internal_call(internal_m2n_animation_play));
4297 reg.add_internal_call(
"internal_m2n_animation_pause", internal_call(internal_m2n_animation_pause));
4298 reg.add_internal_call(
"internal_m2n_animation_resume", internal_call(internal_m2n_animation_resume));
4299 reg.add_internal_call(
"internal_m2n_animation_stop", internal_call(internal_m2n_animation_stop));
4300 reg.add_internal_call(
"internal_m2n_animation_set_speed", internal_call(internal_m2n_animation_set_speed));
4301 reg.add_internal_call(
"internal_m2n_animation_get_speed", internal_call(internal_m2n_animation_get_speed));
4305 auto reg = mono::internal_call_registry(
"Unravel.Core.CameraComponent");
4306 reg.add_internal_call(
"internal_m2n_camera_screen_point_to_ray",
4307 internal_call(internal_m2n_camera_screen_point_to_ray));
4311 auto reg = mono::internal_call_registry(
"Unravel.Core.ModelComponent");
4312 reg.add_internal_call(
"internal_m2n_model_get_enabled", internal_call(internal_m2n_model_get_enabled));
4313 reg.add_internal_call(
"internal_m2n_model_set_enabled", internal_call(internal_m2n_model_set_enabled));
4314 reg.add_internal_call(
"internal_m2n_model_get_shared_material",
4315 internal_call(internal_m2n_model_get_shared_material));
4316 reg.add_internal_call(
"internal_m2n_model_get_shared_material_count",
4317 internal_call(internal_m2n_model_get_shared_material_count));
4318 reg.add_internal_call(
"internal_m2n_model_set_shared_material",
4319 internal_call(internal_m2n_model_set_shared_material));
4320 reg.add_internal_call(
"internal_m2n_model_set_material_instance",
4321 internal_call(internal_m2n_model_set_material_instance));
4322 reg.add_internal_call(
"internal_m2n_model_get_material_instance",
4323 internal_call(internal_m2n_model_get_material_instance));
4324 reg.add_internal_call(
"internal_m2n_model_get_material_instance_count",
4325 internal_call(internal_m2n_model_get_material_instance_count));
4329 auto reg = mono::internal_call_registry(
"Unravel.Core.ParticleEmitterComponent");
4330 reg.add_internal_call(
"internal_m2n_particle_emitter_get_enabled",
4331 internal_call(internal_m2n_particle_emitter_get_enabled));
4332 reg.add_internal_call(
"internal_m2n_particle_emitter_set_enabled",
4333 internal_call(internal_m2n_particle_emitter_set_enabled));
4334 reg.add_internal_call(
"internal_m2n_particle_emitter_get_max_particles",
4335 internal_call(internal_m2n_particle_emitter_get_max_particles));
4336 reg.add_internal_call(
"internal_m2n_particle_emitter_set_max_particles",
4337 internal_call(internal_m2n_particle_emitter_set_max_particles));
4338 reg.add_internal_call(
"internal_m2n_particle_emitter_get_shape",
4339 internal_call(internal_m2n_particle_emitter_get_shape));
4340 reg.add_internal_call(
"internal_m2n_particle_emitter_set_shape",
4341 internal_call(internal_m2n_particle_emitter_set_shape));
4342 reg.add_internal_call(
"internal_m2n_particle_emitter_get_direction",
4343 internal_call(internal_m2n_particle_emitter_get_direction));
4344 reg.add_internal_call(
"internal_m2n_particle_emitter_set_direction",
4345 internal_call(internal_m2n_particle_emitter_set_direction));
4346 reg.add_internal_call(
"internal_m2n_particle_emitter_get_gravity_scale",
4347 internal_call(internal_m2n_particle_emitter_get_gravity_scale));
4348 reg.add_internal_call(
"internal_m2n_particle_emitter_set_gravity_scale",
4349 internal_call(internal_m2n_particle_emitter_set_gravity_scale));
4350 reg.add_internal_call(
"internal_m2n_particle_emitter_get_emission_rate",
4351 internal_call(internal_m2n_particle_emitter_get_emission_rate));
4352 reg.add_internal_call(
"internal_m2n_particle_emitter_set_emission_rate",
4353 internal_call(internal_m2n_particle_emitter_set_emission_rate));
4354 reg.add_internal_call(
"internal_m2n_particle_emitter_get_temporal_motion",
4355 internal_call(internal_m2n_particle_emitter_get_temporal_motion));
4356 reg.add_internal_call(
"internal_m2n_particle_emitter_set_temporal_motion",
4357 internal_call(internal_m2n_particle_emitter_set_temporal_motion));
4358 reg.add_internal_call(
"internal_m2n_particle_emitter_get_velocity_damping",
4359 internal_call(internal_m2n_particle_emitter_get_velocity_damping));
4360 reg.add_internal_call(
"internal_m2n_particle_emitter_set_velocity_damping",
4361 internal_call(internal_m2n_particle_emitter_set_velocity_damping));
4362 reg.add_internal_call(
"internal_m2n_particle_emitter_get_blend_multiplier",
4363 internal_call(internal_m2n_particle_emitter_get_blend_multiplier));
4364 reg.add_internal_call(
"internal_m2n_particle_emitter_set_blend_multiplier",
4365 internal_call(internal_m2n_particle_emitter_set_blend_multiplier));
4366 reg.add_internal_call(
"internal_m2n_particle_emitter_get_force_over_lifetime",
4367 internal_call(internal_m2n_particle_emitter_get_force_over_lifetime));
4368 reg.add_internal_call(
"internal_m2n_particle_emitter_set_force_over_lifetime",
4369 internal_call(internal_m2n_particle_emitter_set_force_over_lifetime));
4370 reg.add_internal_call(
"internal_m2n_particle_emitter_get_emission_shape_scale",
4371 internal_call(internal_m2n_particle_emitter_get_emission_shape_scale));
4372 reg.add_internal_call(
"internal_m2n_particle_emitter_set_emission_shape_scale",
4373 internal_call(internal_m2n_particle_emitter_set_emission_shape_scale));
4374 reg.add_internal_call(
"internal_m2n_particle_emitter_get_emission_lifetime",
4375 internal_call(internal_m2n_particle_emitter_get_emission_lifetime));
4376 reg.add_internal_call(
"internal_m2n_particle_emitter_set_emission_lifetime",
4377 internal_call(internal_m2n_particle_emitter_set_emission_lifetime));
4378 reg.add_internal_call(
"internal_m2n_particle_emitter_get_lifetime",
4379 internal_call(internal_m2n_particle_emitter_get_lifetime));
4380 reg.add_internal_call(
"internal_m2n_particle_emitter_set_lifetime",
4381 internal_call(internal_m2n_particle_emitter_set_lifetime));
4382 reg.add_internal_call(
"internal_m2n_particle_emitter_get_position_easing",
4383 internal_call(internal_m2n_particle_emitter_get_position_easing));
4384 reg.add_internal_call(
"internal_m2n_particle_emitter_set_position_easing",
4385 internal_call(internal_m2n_particle_emitter_set_position_easing));
4386 reg.add_internal_call(
"internal_m2n_particle_emitter_get_num_particles",
4387 internal_call(internal_m2n_particle_emitter_get_num_particles));
4388 reg.add_internal_call(
"internal_m2n_particle_emitter_is_playing",
4389 internal_call(internal_m2n_particle_emitter_is_playing));
4390 reg.add_internal_call(
"internal_m2n_particle_emitter_is_paused",
4391 internal_call(internal_m2n_particle_emitter_is_paused));
4392 reg.add_internal_call(
"internal_m2n_particle_emitter_get_texture",
4393 internal_call(internal_m2n_particle_emitter_get_texture));
4394 reg.add_internal_call(
"internal_m2n_particle_emitter_set_texture",
4395 internal_call(internal_m2n_particle_emitter_set_texture));
4396 reg.add_internal_call(
"internal_m2n_particle_emitter_play",
4397 internal_call(internal_m2n_particle_emitter_play));
4398 reg.add_internal_call(
"internal_m2n_particle_emitter_stop",
4399 internal_call(internal_m2n_particle_emitter_stop));
4400 reg.add_internal_call(
"internal_m2n_particle_emitter_stop_and_reset",
4401 internal_call(internal_m2n_particle_emitter_stop_and_reset));
4402 reg.add_internal_call(
"internal_m2n_particle_emitter_pause",
4403 internal_call(internal_m2n_particle_emitter_pause));
4404 reg.add_internal_call(
"internal_m2n_particle_emitter_resume",
4405 internal_call(internal_m2n_particle_emitter_resume));
4406 reg.add_internal_call(
"internal_m2n_particle_emitter_reset_emitter",
4407 internal_call(internal_m2n_particle_emitter_reset_emitter));
4408 reg.add_internal_call(
"internal_m2n_particle_emitter_get_loop",
4409 internal_call(internal_m2n_particle_emitter_get_loop));
4410 reg.add_internal_call(
"internal_m2n_particle_emitter_set_loop",
4411 internal_call(internal_m2n_particle_emitter_set_loop));
4415 auto reg = mono::internal_call_registry(
"Unravel.Core.TextComponent");
4416 reg.add_internal_call(
"internal_m2n_text_get_text", internal_call(internal_m2n_text_get_text));
4417 reg.add_internal_call(
"internal_m2n_text_set_text", internal_call(internal_m2n_text_set_text));
4418 reg.add_internal_call(
"internal_m2n_text_get_buffer_type", internal_call(internal_m2n_text_get_buffer_type));
4419 reg.add_internal_call(
"internal_m2n_text_set_buffer_type", internal_call(internal_m2n_text_set_buffer_type));
4420 reg.add_internal_call(
"internal_m2n_text_get_overflow_type",
4421 internal_call(internal_m2n_text_get_overflow_type));
4422 reg.add_internal_call(
"internal_m2n_text_set_overflow_type",
4423 internal_call(internal_m2n_text_set_overflow_type));
4424 reg.add_internal_call(
"internal_m2n_text_get_font", internal_call(internal_m2n_text_get_font));
4425 reg.add_internal_call(
"internal_m2n_text_set_font", internal_call(internal_m2n_text_set_font));
4427 reg.add_internal_call(
"internal_m2n_text_get_font_size", internal_call(internal_m2n_text_get_font_size));
4428 reg.add_internal_call(
"internal_m2n_text_set_font_size", internal_call(internal_m2n_text_set_font_size));
4429 reg.add_internal_call(
"internal_m2n_text_get_render_font_size",
4430 internal_call(internal_m2n_text_get_render_font_size));
4432 reg.add_internal_call(
"internal_m2n_text_get_auto_size", internal_call(internal_m2n_text_get_auto_size));
4433 reg.add_internal_call(
"internal_m2n_text_set_auto_size", internal_call(internal_m2n_text_set_auto_size));
4435 reg.add_internal_call(
"internal_m2n_text_get_auto_size_range",
4436 internal_call(internal_m2n_text_get_auto_size_range));
4437 reg.add_internal_call(
"internal_m2n_text_set_auto_size_range",
4438 internal_call(internal_m2n_text_set_auto_size_range));
4440 reg.add_internal_call(
"internal_m2n_text_get_area", internal_call(internal_m2n_text_get_area));
4441 reg.add_internal_call(
"internal_m2n_text_set_area", internal_call(internal_m2n_text_set_area));
4442 reg.add_internal_call(
"internal_m2n_text_get_render_area", internal_call(internal_m2n_text_get_render_area));
4444 reg.add_internal_call(
"internal_m2n_text_get_is_rich_text", internal_call(internal_m2n_text_get_is_rich_text));
4445 reg.add_internal_call(
"internal_m2n_text_set_is_rich_text", internal_call(internal_m2n_text_set_is_rich_text));
4447 reg.add_internal_call(
"internal_m2n_text_get_alignment", internal_call(internal_m2n_text_get_alignment));
4448 reg.add_internal_call(
"internal_m2n_text_set_alignment", internal_call(internal_m2n_text_set_alignment));
4450 reg.add_internal_call(
"internal_m2n_text_get_bounds", internal_call(internal_m2n_text_get_bounds));
4451 reg.add_internal_call(
"internal_m2n_text_get_render_bounds", internal_call(internal_m2n_text_get_render_bounds));
4454 reg.add_internal_call(
"internal_m2n_text_set_opacity", internal_call(internal_m2n_text_set_opacity));
4455 reg.add_internal_call(
"internal_m2n_text_get_opacity", internal_call(internal_m2n_text_get_opacity));
4456 reg.add_internal_call(
"internal_m2n_text_set_text_color", internal_call(internal_m2n_text_set_text_color));
4457 reg.add_internal_call(
"internal_m2n_text_get_text_color", internal_call(internal_m2n_text_get_text_color));
4458 reg.add_internal_call(
"internal_m2n_text_set_background_color", internal_call(internal_m2n_text_set_background_color));
4459 reg.add_internal_call(
"internal_m2n_text_get_background_color", internal_call(internal_m2n_text_get_background_color));
4460 reg.add_internal_call(
"internal_m2n_text_set_foreground_color", internal_call(internal_m2n_text_set_foreground_color));
4461 reg.add_internal_call(
"internal_m2n_text_get_foreground_color", internal_call(internal_m2n_text_get_foreground_color));
4462 reg.add_internal_call(
"internal_m2n_text_set_overline_color", internal_call(internal_m2n_text_set_overline_color));
4463 reg.add_internal_call(
"internal_m2n_text_get_overline_color", internal_call(internal_m2n_text_get_overline_color));
4464 reg.add_internal_call(
"internal_m2n_text_set_underline_color", internal_call(internal_m2n_text_set_underline_color));
4465 reg.add_internal_call(
"internal_m2n_text_get_underline_color", internal_call(internal_m2n_text_get_underline_color));
4466 reg.add_internal_call(
"internal_m2n_text_set_strike_color", internal_call(internal_m2n_text_set_strike_color));
4467 reg.add_internal_call(
"internal_m2n_text_get_strike_color", internal_call(internal_m2n_text_get_strike_color));
4468 reg.add_internal_call(
"internal_m2n_text_set_outline_color", internal_call(internal_m2n_text_set_outline_color));
4469 reg.add_internal_call(
"internal_m2n_text_get_outline_color", internal_call(internal_m2n_text_get_outline_color));
4470 reg.add_internal_call(
"internal_m2n_text_set_outline_width", internal_call(internal_m2n_text_set_outline_width));
4471 reg.add_internal_call(
"internal_m2n_text_get_outline_width", internal_call(internal_m2n_text_get_outline_width));
4472 reg.add_internal_call(
"internal_m2n_text_set_shadow_offsets", internal_call(internal_m2n_text_set_shadow_offsets));
4473 reg.add_internal_call(
"internal_m2n_text_get_shadow_offsets", internal_call(internal_m2n_text_get_shadow_offsets));
4474 reg.add_internal_call(
"internal_m2n_text_set_shadow_color", internal_call(internal_m2n_text_set_shadow_color));
4475 reg.add_internal_call(
"internal_m2n_text_get_shadow_color", internal_call(internal_m2n_text_get_shadow_color));
4476 reg.add_internal_call(
"internal_m2n_text_set_shadow_softener", internal_call(internal_m2n_text_set_shadow_softener));
4477 reg.add_internal_call(
"internal_m2n_text_get_shadow_softener", internal_call(internal_m2n_text_get_shadow_softener));
4478 reg.add_internal_call(
"internal_m2n_text_set_style_flags", internal_call(internal_m2n_text_set_style_flags));
4479 reg.add_internal_call(
"internal_m2n_text_get_style_flags", internal_call(internal_m2n_text_get_style_flags));
4483 auto reg = mono::internal_call_registry(
"Unravel.Core.LightComponent");
4484 reg.add_internal_call(
"internal_m2n_light_get_color", internal_call(internal_m2n_light_get_color));
4485 reg.add_internal_call(
"internal_m2n_light_set_color", internal_call(internal_m2n_light_set_color));
4489 auto reg = mono::internal_call_registry(
"Unravel.Core.Assets");
4490 reg.add_internal_call(
"internal_m2n_get_asset_by_uuid", internal_call(internal_m2n_get_asset_by_uuid));
4491 reg.add_internal_call(
"internal_m2n_get_asset_by_key", internal_call(internal_m2n_get_asset_by_key));
4492 reg.add_internal_call(
"internal_m2n_get_material_properties",
4493 internal_call(internal_m2n_get_material_properties));
4497 auto reg = mono::internal_call_registry(
"Unravel.Core.AudioClip");
4498 reg.add_internal_call(
"internal_m2n_audio_clip_get_length", internal_call(internal_m2n_audio_clip_get_length));
4502 auto reg = mono::internal_call_registry(
"Quaternion");
4503 reg.add_internal_call(
"internal_m2n_from_euler_rad", internal_call(internal_m2n_from_euler_rad));
4504 reg.add_internal_call(
"internal_m2n_to_euler_rad", internal_call(internal_m2n_to_euler_rad));
4505 reg.add_internal_call(
"internal_m2n_from_to_rotation", internal_call(internal_m2n_from_to_rotation));
4506 reg.add_internal_call(
"internal_m2n_angle_axis", internal_call(internal_m2n_angle_axis));
4507 reg.add_internal_call(
"internal_m2n_look_rotation", internal_call(internal_m2n_look_rotation));
4511 auto reg = mono::internal_call_registry(
"Unravel.Core.Gizmos");
4512 reg.add_internal_call(
"internal_m2n_gizmos_add_sphere", internal_call(internal_m2n_gizmos_add_sphere));
4513 reg.add_internal_call(
"internal_m2n_gizmos_add_ray", internal_call(internal_m2n_gizmos_add_ray));
4517 auto reg = mono::internal_call_registry(
"Unravel.Core.Tests");
4518 reg.add_internal_call(
"m2n_test_uuid", internal_call(m2n_test_uuid));
4522 auto reg = mono::internal_call_registry(
"Unravel.Core.LayerMask");
4523 reg.add_internal_call(
"internal_m2n_layers_layer_to_name", internal_call(internal_m2n_layers_layer_to_name));
4524 reg.add_internal_call(
"internal_m2n_layers_name_to_layer", internal_call(internal_m2n_layers_name_to_layer));
4528 auto reg = mono::internal_call_registry(
"Unravel.Core.Input");
4529 reg.add_internal_call(
"internal_m2n_input_get_analog_value",
4530 internal_call(internal_m2n_input_get_analog_value));
4531 reg.add_internal_call(
"internal_m2n_input_get_digital_value",
4532 internal_call(internal_m2n_input_get_analog_value));
4533 reg.add_internal_call(
"internal_m2n_input_is_pressed", internal_call(internal_m2n_input_is_pressed));
4534 reg.add_internal_call(
"internal_m2n_input_is_released", internal_call(internal_m2n_input_is_released));
4535 reg.add_internal_call(
"internal_m2n_input_is_down", internal_call(internal_m2n_input_is_down));
4536 reg.add_internal_call(
"internal_m2n_input_is_key_pressed", internal_call(internal_m2n_input_is_key_pressed));
4537 reg.add_internal_call(
"internal_m2n_input_is_key_released", internal_call(internal_m2n_input_is_key_released));
4538 reg.add_internal_call(
"internal_m2n_input_is_key_down", internal_call(internal_m2n_input_is_key_down));
4539 reg.add_internal_call(
"internal_m2n_input_is_mouse_button_pressed",
4540 internal_call(internal_m2n_input_is_mouse_button_pressed));
4541 reg.add_internal_call(
"internal_m2n_input_is_mouse_button_released",
4542 internal_call(internal_m2n_input_is_mouse_button_released));
4543 reg.add_internal_call(
"internal_m2n_input_is_mouse_button_down",
4544 internal_call(internal_m2n_input_is_mouse_button_down));
4545 reg.add_internal_call(
"internal_m2n_input_get_mouse_position",
4546 internal_call(internal_m2n_input_get_mouse_position));
4550 auto reg = mono::internal_call_registry(
"Unravel.Core.Physics");
4551 reg.add_internal_call(
"internal_m2n_physics_ray_cast", internal_call(internal_m2n_physics_ray_cast));
4552 reg.add_internal_call(
"internal_m2n_physics_ray_cast_all", internal_call(internal_m2n_physics_ray_cast_all));
4553 reg.add_internal_call(
"internal_m2n_physics_sphere_cast", internal_call(internal_m2n_physics_sphere_cast));
4554 reg.add_internal_call(
"internal_m2n_physics_sphere_cast_all",
4555 internal_call(internal_m2n_physics_sphere_cast_all));
4556 reg.add_internal_call(
"internal_m2n_physics_sphere_overlap",
4557 internal_call(internal_m2n_physics_sphere_overlap));
4561 auto reg = mono::internal_call_registry(
"Unravel.Core.IK");
4562 reg.add_internal_call(
"internal_m2n_utils_set_ik_posiiton_ccd",
4563 internal_call(internal_m2n_utils_set_ik_posiiton_ccd));
4564 reg.add_internal_call(
"internal_m2n_utils_set_ik_posiiton_fabrik",
4565 internal_call(internal_m2n_utils_set_ik_posiiton_fabrik));
4566 reg.add_internal_call(
"internal_m2n_utils_set_ik_posiiton_two_bone",
4567 internal_call(internal_m2n_utils_set_ik_posiiton_two_bone));
4569 reg.add_internal_call(
"internal_m2n_utils_set_ik_look_at_posiiton",
4570 internal_call(internal_m2n_utils_set_ik_look_at_posiiton));
4574 auto reg = mono::internal_call_registry(
"Unravel.Core.AudioSourceComponent");
4575 reg.add_internal_call(
"internal_m2n_audio_source_get_loop", internal_call(internal_m2n_audio_source_get_loop));
4576 reg.add_internal_call(
"internal_m2n_audio_source_set_loop", internal_call(internal_m2n_audio_source_set_loop));
4577 reg.add_internal_call(
"internal_m2n_audio_source_get_volume",
4578 internal_call(internal_m2n_audio_source_get_volume));
4579 reg.add_internal_call(
"internal_m2n_audio_source_set_volume",
4580 internal_call(internal_m2n_audio_source_set_volume));
4581 reg.add_internal_call(
"internal_m2n_audio_source_get_pitch",
4582 internal_call(internal_m2n_audio_source_get_pitch));
4583 reg.add_internal_call(
"internal_m2n_audio_source_set_pitch",
4584 internal_call(internal_m2n_audio_source_set_pitch));
4585 reg.add_internal_call(
"internal_m2n_audio_source_get_volume_rolloff",
4586 internal_call(internal_m2n_audio_source_get_volume_rolloff));
4587 reg.add_internal_call(
"internal_m2n_audio_source_set_volume_rolloff",
4588 internal_call(internal_m2n_audio_source_set_volume_rolloff));
4589 reg.add_internal_call(
"internal_m2n_audio_source_get_min_distance",
4590 internal_call(internal_m2n_audio_source_get_min_distance));
4591 reg.add_internal_call(
"internal_m2n_audio_source_set_min_distance",
4592 internal_call(internal_m2n_audio_source_set_min_distance));
4593 reg.add_internal_call(
"internal_m2n_audio_source_get_max_distance",
4594 internal_call(internal_m2n_audio_source_get_max_distance));
4595 reg.add_internal_call(
"internal_m2n_audio_source_set_max_distance",
4596 internal_call(internal_m2n_audio_source_set_max_distance));
4597 reg.add_internal_call(
"internal_m2n_audio_source_get_mute", internal_call(internal_m2n_audio_source_get_mute));
4599 reg.add_internal_call(
"internal_m2n_audio_source_set_mute", internal_call(internal_m2n_audio_source_set_mute));
4601 reg.add_internal_call(
"internal_m2n_audio_source_is_playing",
4602 internal_call(internal_m2n_audio_source_is_playing));
4603 reg.add_internal_call(
"internal_m2n_audio_source_is_paused",
4604 internal_call(internal_m2n_audio_source_is_paused));
4605 reg.add_internal_call(
"internal_m2n_audio_source_play", internal_call(internal_m2n_audio_source_play));
4606 reg.add_internal_call(
"internal_m2n_audio_source_stop", internal_call(internal_m2n_audio_source_stop));
4608 reg.add_internal_call(
"internal_m2n_audio_source_pause", internal_call(internal_m2n_audio_source_pause));
4609 reg.add_internal_call(
"internal_m2n_audio_source_resume", internal_call(internal_m2n_audio_source_resume));
4610 reg.add_internal_call(
"internal_m2n_audio_source_get_audio_clip",
4611 internal_call(internal_m2n_audio_source_get_audio_clip));
4612 reg.add_internal_call(
"internal_m2n_audio_source_set_audio_clip",
4613 internal_call(internal_m2n_audio_source_set_audio_clip));
4617 auto reg = mono::internal_call_registry(
"Unravel.Core.UIDocumentComponent");
4618 reg.add_internal_call(
"internal_m2n_ui_document_get_asset", internal_call(internal_m2n_ui_document_get_asset));
4619 reg.add_internal_call(
"internal_m2n_ui_document_set_asset", internal_call(internal_m2n_ui_document_set_asset));
4620 reg.add_internal_call(
"internal_m2n_ui_document_is_loaded", internal_call(internal_m2n_ui_document_is_loaded));
4621 reg.add_internal_call(
"internal_m2n_ui_document_is_enabled", internal_call(internal_m2n_ui_document_is_enabled));
4622 reg.add_internal_call(
"internal_m2n_ui_document_set_enabled", internal_call(internal_m2n_ui_document_set_enabled));
4623 reg.add_internal_call(
"internal_m2n_ui_document_close", internal_call(internal_m2n_ui_document_close));
4624 reg.add_internal_call(
"internal_m2n_ui_document_get_title", internal_call(internal_m2n_ui_document_get_title));
4625 reg.add_internal_call(
"internal_m2n_ui_document_set_title", internal_call(internal_m2n_ui_document_set_title));
4626 reg.add_internal_call(
"internal_m2n_ui_document_get_wrapper", internal_call(internal_m2n_ui_document_get_wrapper));
4631 auto reg = mono::internal_call_registry(
"Unravel.Core.UIDocument");
4632 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_is_valid", internal_call(internal_m2n_ui_document_wrapper_is_valid));
4633 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_get_title", internal_call(internal_m2n_ui_document_wrapper_get_title));
4634 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_set_title", internal_call(internal_m2n_ui_document_wrapper_set_title));
4635 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_is_visible", internal_call(internal_m2n_ui_document_wrapper_is_visible));
4636 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_show", internal_call(internal_m2n_ui_document_wrapper_show));
4637 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_hide", internal_call(internal_m2n_ui_document_wrapper_hide));
4638 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_close", internal_call(internal_m2n_ui_document_wrapper_close));
4639 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_get_element_by_id", internal_call(internal_m2n_ui_document_get_element_wrapper_by_id));
4640 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_query_selector", internal_call(internal_m2n_ui_document_query_selector_wrapper));
4641 reg.add_internal_call(
"internal_m2n_ui_document_wrapper_query_selector_all", internal_call(internal_m2n_ui_document_query_selector_wrapper));
4645 auto reg = mono::internal_call_registry(
"Unravel.Core.UIElement");
4646 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_valid", internal_call(internal_m2n_ui_element_wrapper_is_valid));
4647 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_inner_rml", internal_call(internal_m2n_ui_element_wrapper_get_inner_rml));
4648 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_inner_rml", internal_call(internal_m2n_ui_element_wrapper_set_inner_rml));
4649 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_visible", internal_call(internal_m2n_ui_element_wrapper_is_visible));
4650 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_visible", internal_call(internal_m2n_ui_element_wrapper_set_visible));
4651 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_attribute", internal_call(internal_m2n_ui_element_wrapper_get_attribute));
4652 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_attribute", internal_call(internal_m2n_ui_element_wrapper_set_attribute));
4653 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_remove_attribute", internal_call(internal_m2n_ui_element_wrapper_remove_attribute));
4654 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_has_attribute", internal_call(internal_m2n_ui_element_wrapper_has_attribute));
4655 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_set_class", internal_call(internal_m2n_ui_element_wrapper_set_class));
4656 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_is_class_set", internal_call(internal_m2n_ui_element_wrapper_is_class_set));
4657 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_focus", internal_call(internal_m2n_ui_element_wrapper_focus));
4658 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_blur", internal_call(internal_m2n_ui_element_wrapper_blur));
4659 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_click", internal_call(internal_m2n_ui_element_wrapper_click));
4660 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_scroll_into_view", internal_call(internal_m2n_ui_element_wrapper_scroll_into_view));
4661 reg.add_internal_call(
"internal_m2n_ui_element_wrapper_get_id", internal_call(internal_m2n_ui_element_wrapper_get_id));
4665 auto reg = mono::internal_call_registry(
"Unravel.Core.UIEventManager");
4666 reg.add_internal_call(
"internal_m2n_ui_ensure_native_event_listener", internal_call(internal_m2n_ui_ensure_native_event_listener));
4670 auto reg = mono::internal_call_registry(
"Unravel.Core.UIEventBase");
4671 reg.add_internal_call(
"internal_m2n_ui_stop_propagation", internal_call(internal_m2n_ui_stop_propagation));
4672 reg.add_internal_call(
"internal_m2n_ui_stop_immediate_propagation", internal_call(internal_m2n_ui_stop_immediate_propagation));
4676 auto reg = mono::internal_call_registry(
"Unravel.Core.Application");
4677 reg.add_internal_call(
"internal_m2n_application_quit", internal_call(internal_m2n_application_quit));
4681 auto reg = mono::internal_call_registry(
"Unravel.Core.Time");
4682 reg.add_internal_call(
"internal_m2n_set_time_scale", internal_call(internal_m2n_set_time_scale));
4686 auto reg = mono::internal_call_registry(
"Unravel.Core.GCMonitor");
4687 reg.add_internal_call(
"internal_m2n_get_mono_heap_size", internal_call(mono::gc_get_heap_size));
4688 reg.add_internal_call(
"internal_m2n_get_mono_used_size", internal_call(mono::gc_get_used_size));
unravel::physics_vector< hit_info > hits
animation_clip::seconds_t seconds_t
std::shared_ptr< material > sptr
std::chrono::duration< float > delta_t
#define APPLOG_WARNING(...)
#define APPLOG_ERROR(...)
#define APPLOG_INFO_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_WARNING_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_ERROR_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_TRACE_LOC(FILE_LOC, LINE_LOC, FUNC_LOC,...)
#define APPLOG_TRACE(...)
auto look_rotation(const glm::vec3 &forward, const glm::vec3 &upwards) -> glm::quat
auto from_to_rotation(const glm::vec3 &from, const glm::vec3 &to) -> glm::quat
auto start(seq_action action, const seq_scope_policy &scope_policy, hpp::source_location location) -> seq_id_t
Starts a new action.
auto delay(const duration_t &duration, const sentinel_t &sentinel) -> seq_action
Creates a delay action.
auto tokenize(const std::string &str, const std::string &delimiters) -> string_tokens_t
auto convert_rml_key_to_input(Rml::Input::KeyIdentifier rml_key) -> input::key_code
Convert RmlUi key identifier to engine input key code.
auto ik_set_position_ccd(entt::handle end_effector, const math::vec3 &target, size_t num_bones_in_chain, float threshold, int max_iterations) -> bool
auto generate_uuid() -> hpp::uuid
@ sphere
Sphere type reflection probe.
auto ik_set_position_two_bone(entt::handle end_effector, const math::vec3 &target, const math::vec3 &forward, float weight, float soften, int max_iterations) -> bool
hpp::small_vector< T, SmallSizeCapacity > physics_vector
auto ik_set_position_fabrik(entt::handle end_effector, const math::vec3 &target, size_t num_bones_in_chain, float threshold, int max_iterations) -> bool
auto ik_look_at_position(entt::handle end_effector, const math::vec3 &target, float weight) -> bool
bool is_valid(octet_iterator start, octet_iterator end)
const text_vector< size_t > * offsets
std::function< bool(size_t type_hash, entt::handle e)> has_native
std::function< bool(size_t type_hash, entt::handle e)> remove_native
std::function< bool(size_t type_hash, entt::handle e)> add_native
void draw(const bx::Aabb &_aabb)
void lineTo(float _x, float _y, float _z=0.0f)
void setColor(uint32_t _abgr)
void setWireframe(bool _wireframe)
void moveTo(float _x, float _y, float _z=0.0f)
Storage for box vector values and wraps up common functionality.
static bbox empty
An empty bounding box.
static color transparent()
std::string current_element_id
std::intptr_t current_element_ptr
std::string target_element_id
std::intptr_t target_element_ptr
static auto context() -> rtti::context &