Unravel Engine C++ Reference
Loading...
Searching...
No Matches
model_component_bindings.cpp
Go to the documentation of this file.
2#include "script_bindings.h"
4
5#include "../script_interop.h"
6
9
10namespace unravel
11{
12namespace
13{
14
15auto internal_m2n_model_get_enabled(entt::entity id) -> bool
16{
17 if(auto comp = safe_get_component<model_component>(id))
18 {
19 return comp->is_enabled();
20 }
21
22 return false;
23}
24
25void internal_m2n_model_set_enabled(entt::entity id, bool enabled)
26{
27 if(auto comp = safe_get_component<model_component>(id))
28 {
29 comp->set_enabled(enabled);
30 }
31}
32
33auto internal_m2n_model_get_shared_material(entt::entity id, uint32_t index) -> hpp::uuid
34{
35 if(auto comp = safe_get_component<model_component>(id))
36 {
37 return comp->get_model().get_material(index).uid();
38 }
39
40 return {};
41}
42
43auto internal_m2n_model_get_shared_material_count(entt::entity id) -> int
44{
45 if(auto comp = safe_get_component<model_component>(id))
46 {
47 return comp->get_model().get_materials().size();
48 }
49
50 return {};
51}
52
53auto internal_m2n_model_get_material_instance(entt::entity id, uint32_t index)
55{
56 if(auto comp = safe_get_component<model_component>(id))
57 {
58 auto instance = comp->get_model().get_material_instance(index);
59 return get_material_properties(instance);
60 }
61
62 return {};
63}
64
65void internal_m2n_model_set_shared_material(entt::entity id, const hpp::uuid& uid, uint32_t index)
66{
67 if(auto comp = safe_get_component<model_component>(id))
68 {
69 auto& ctx = engine::context();
70 auto& am = ctx.get_cached<asset_manager>();
71 auto asset = am.get_asset<material>(uid);
72
73 auto model = comp->get_model();
74 model.set_material(asset, index);
75 comp->set_model(model);
76 }
77}
78
79void internal_m2n_model_set_material_instance(entt::entity id,
81 uint32_t index)
82{
83 using converter = dotnet::managed_interface::converter;
84
85 if(auto comp = safe_get_component<model_component>(id))
86 {
87 auto model = comp->get_model();
88
89 if(props.valid)
90 {
91 auto material = model.get_or_emplace_material_instance(index);
93 model.set_material_instance(material, index);
94 }
95 else
96 {
97 model.set_material_instance(nullptr, index);
98 }
99 comp->set_model(model);
100 }
101}
102
103auto internal_m2n_model_get_material_instance_count(entt::entity id) -> int
104{
105 if(auto comp = safe_get_component<model_component>(id))
106 {
107 return comp->get_model().get_material_instances().size();
108 }
109
110 return {};
111}
112
113//------------------------------
114
115} // namespace
116
118{
119 APPLOG_TRACE("{}", __func__);
120
121 auto reg = dotnet::internal_call_registry("Unravel.Core.ModelComponent");
122 reg.add_internal_call("internal_m2n_model_get_enabled", dotnet_internal_call(internal_m2n_model_get_enabled));
123 reg.add_internal_call("internal_m2n_model_set_enabled", dotnet_internal_call(internal_m2n_model_set_enabled));
124 reg.add_internal_call("internal_m2n_model_get_shared_material",
125 dotnet_internal_call(internal_m2n_model_get_shared_material));
126 reg.add_internal_call("internal_m2n_model_get_shared_material_count",
127 dotnet_internal_call(internal_m2n_model_get_shared_material_count));
128 reg.add_internal_call("internal_m2n_model_set_shared_material",
129 dotnet_internal_call(internal_m2n_model_set_shared_material));
130 reg.add_internal_call("internal_m2n_model_set_material_instance",
131 dotnet_internal_call(internal_m2n_model_set_material_instance));
132 reg.add_internal_call("internal_m2n_model_get_material_instance",
133 dotnet_internal_call(internal_m2n_model_get_material_instance));
134 reg.add_internal_call("internal_m2n_model_get_material_instance_count",
135 dotnet_internal_call(internal_m2n_model_get_material_instance_count));
136}
137
138} // namespace unravel
uint16_t index
#define APPLOG_TRACE(...)
Definition logging.h:17
void register_model_component_script_bindings()
void set_material_properties(const material::sptr &material, const dotnetpp_backend::managed_interface::material_properties &props)
auto safe_get_component(entt::entity id) -> T *
auto get_material_properties(const material::sptr &material) -> dotnetpp_backend::managed_interface::material_properties
static auto context() -> rtti::context &
Definition engine.cpp:111
bool enabled