Unravel Engine C++ Reference
Loading...
Searching...
No Matches
physics_component_bindings.cpp
Go to the documentation of this file.
2#include "script_bindings.h"
3
4#include "../script_interop.h"
5
7
8namespace unravel
9{
10namespace
11{
12
13//------------------------------
14
15void internal_m2n_physics_apply_explosion_force(entt::entity id,
16 float explosion_force,
17 const math::vec3& explosion_position,
18 float explosion_radius,
19 float upwards_modifier,
20 force_mode mode)
21{
23 {
24 comp->apply_explosion_force(explosion_force, explosion_position, explosion_radius, upwards_modifier, mode);
25 }
26}
27void internal_m2n_physics_apply_force(entt::entity id, const math::vec3& value, force_mode mode)
28{
30 {
31 comp->apply_force(value, mode);
32 }
33}
34
35void internal_m2n_physics_apply_torque(entt::entity id, const math::vec3& value, force_mode mode)
36{
38 {
39 comp->apply_torque(value, mode);
40 }
41}
42
43auto internal_m2n_physics_get_velocity(entt::entity id) -> math::vec3
44{
46 {
47 return comp->get_velocity();
48 }
49
50 return {};
51}
52
53void internal_m2n_physics_set_velocity(entt::entity id, const math::vec3& velocity)
54{
56 {
57 comp->set_velocity(velocity);
58 }
59}
60
61auto internal_m2n_physics_get_angular_velocity(entt::entity id) -> math::vec3
62{
64 {
65 return comp->get_angular_velocity();
66 }
67
68 return {};
69}
70
71void internal_m2n_physics_set_angular_velocity(entt::entity id, const math::vec3& velocity)
72{
74 {
75 comp->set_angular_velocity(velocity);
76 }
77}
78
79auto internal_m2n_physics_get_include_layers(entt::entity id) -> layer_mask
80{
82 {
83 return comp->get_collision_include_mask();
84 }
85
86 return {};
87}
88
89void internal_m2n_physics_set_include_layers(entt::entity id, layer_mask mask)
90{
92 {
93 comp->set_collision_include_mask(mask);
94 }
95}
96
97auto internal_m2n_physics_get_exclude_layers(entt::entity id) -> layer_mask
98{
100 {
101 return comp->get_collision_exclude_mask();
102 }
103
104 return {};
105}
106
107void internal_m2n_physics_set_exclude_layers(entt::entity id, layer_mask mask)
108{
109 if(auto comp = safe_get_component<physics_component>(id))
110 {
111 comp->set_collision_exclude_mask(mask);
112 }
113}
114
115auto internal_m2n_physics_get_collision_layers(entt::entity id) -> layer_mask
116{
117 if(auto comp = safe_get_component<physics_component>(id))
118 {
119 return comp->get_collision_mask();
120 }
121
122 return {};
123}
124
125auto internal_m2n_physics_get_is_sensor(entt::entity id) -> bool
126{
127 if(auto comp = safe_get_component<physics_component>(id))
128 {
129 return comp->is_sensor();
130 }
131
132 return false;
133}
134
135void internal_m2n_physics_set_is_sensor(entt::entity id, bool sensor)
136{
137 if(auto comp = safe_get_component<physics_component>(id))
138 {
139 comp->set_is_sensor(sensor);
140 }
141}
142
143auto internal_m2n_physics_get_mass(entt::entity id) -> float
144{
145 if(auto comp = safe_get_component<physics_component>(id))
146 {
147 return comp->get_mass();
148 }
149
150 return 1.0f;
151}
152
153void internal_m2n_physics_set_mass(entt::entity id, float mass)
154{
155 if(auto comp = safe_get_component<physics_component>(id))
156 {
157 comp->set_mass(mass);
158 }
159}
160
161auto internal_m2n_physics_get_is_kinematic(entt::entity id) -> bool
162{
163 if(auto comp = safe_get_component<physics_component>(id))
164 {
165 return comp->is_kinematic();
166 }
167
168 return false;
169}
170
171void internal_m2n_physics_set_is_kinematic(entt::entity id, bool kinematic)
172{
173 if(auto comp = safe_get_component<physics_component>(id))
174 {
175 comp->set_is_kinematic(kinematic);
176 }
177}
178
179auto internal_m2n_physics_get_use_gravity(entt::entity id) -> bool
180{
181 if(auto comp = safe_get_component<physics_component>(id))
182 {
183 return comp->is_using_gravity();
184 }
185
186 return true;
187}
188
189void internal_m2n_physics_set_use_gravity(entt::entity id, bool use_gravity)
190{
191 if(auto comp = safe_get_component<physics_component>(id))
192 {
193 comp->set_is_using_gravity(use_gravity);
194 }
195}
196
197} // namespace
198
200{
201 APPLOG_TRACE("{}", __func__);
202
203 auto reg = dotnet::internal_call_registry("Unravel.Core.PhysicsComponent");
204 reg.add_internal_call("internal_m2n_physics_apply_explosion_force",
205 dotnet_internal_call(internal_m2n_physics_apply_explosion_force));
206 reg.add_internal_call("internal_m2n_physics_apply_force", dotnet_internal_call(internal_m2n_physics_apply_force));
207 reg.add_internal_call("internal_m2n_physics_apply_torque", dotnet_internal_call(internal_m2n_physics_apply_torque));
208 reg.add_internal_call("internal_m2n_physics_get_velocity", dotnet_internal_call(internal_m2n_physics_get_velocity));
209 reg.add_internal_call("internal_m2n_physics_set_velocity", dotnet_internal_call(internal_m2n_physics_set_velocity));
210 reg.add_internal_call("internal_m2n_physics_get_angular_velocity",
211 dotnet_internal_call(internal_m2n_physics_get_angular_velocity));
212 reg.add_internal_call("internal_m2n_physics_set_angular_velocity",
213 dotnet_internal_call(internal_m2n_physics_set_angular_velocity));
214
215 reg.add_internal_call("internal_m2n_physics_get_include_layers",
216 dotnet_internal_call(internal_m2n_physics_get_include_layers));
217 reg.add_internal_call("internal_m2n_physics_set_include_layers",
218 dotnet_internal_call(internal_m2n_physics_set_include_layers));
219 reg.add_internal_call("internal_m2n_physics_get_exclude_layers",
220 dotnet_internal_call(internal_m2n_physics_get_exclude_layers));
221 reg.add_internal_call("internal_m2n_physics_set_exclude_layers",
222 dotnet_internal_call(internal_m2n_physics_set_exclude_layers));
223 reg.add_internal_call("internal_m2n_physics_get_collision_layers",
224 dotnet_internal_call(internal_m2n_physics_get_collision_layers));
225
226 reg.add_internal_call("internal_m2n_physics_get_is_sensor",
227 dotnet_internal_call(internal_m2n_physics_get_is_sensor));
228 reg.add_internal_call("internal_m2n_physics_set_is_sensor",
229 dotnet_internal_call(internal_m2n_physics_set_is_sensor));
230 reg.add_internal_call("internal_m2n_physics_get_mass",
231 dotnet_internal_call(internal_m2n_physics_get_mass));
232 reg.add_internal_call("internal_m2n_physics_set_mass",
233 dotnet_internal_call(internal_m2n_physics_set_mass));
234 reg.add_internal_call("internal_m2n_physics_get_is_kinematic",
235 dotnet_internal_call(internal_m2n_physics_get_is_kinematic));
236 reg.add_internal_call("internal_m2n_physics_set_is_kinematic",
237 dotnet_internal_call(internal_m2n_physics_set_is_kinematic));
238 reg.add_internal_call("internal_m2n_physics_get_use_gravity",
239 dotnet_internal_call(internal_m2n_physics_get_use_gravity));
240 reg.add_internal_call("internal_m2n_physics_set_use_gravity",
241 dotnet_internal_call(internal_m2n_physics_set_use_gravity));
242}
243
244} // namespace unravel
int layer_mask
#define APPLOG_TRACE(...)
Definition logging.h:17
void register_physics_component_script_bindings()
@ mask
Hard alpha cutoff; casts cutout shadows.
auto safe_get_component(entt::entity id) -> T *