Unravel Engine C++ Reference
Loading...
Searching...
No Matches
camera_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//------------------------------
14auto internal_m2n_camera_screen_point_to_ray(entt::entity id,
15 const math::vec2& origin,
17{
18 if(auto comp = safe_get_component<camera_component>(id))
19 {
20 math::vec3 ray_origin{};
21 math::vec3 ray_dir{};
22 bool result = comp->get_camera().viewport_to_ray(origin, ray_origin, ray_dir);
23 if(result)
24 {
25 using converter = dotnet::managed_interface::converter;
26 managed_ray->origin = converter::convert<math::vec3, dotnetpp_backend::managed_interface::vector3>(ray_origin);
27 managed_ray->direction = converter::convert<math::vec3, dotnetpp_backend::managed_interface::vector3>(ray_dir);
28 }
29 return result;
30 }
31
32 return false;
33}
34
35auto internal_m2n_camera_screen_point_to_world_2d(entt::entity id, const math::vec2& origin) -> math::vec3
36{
37 if(auto comp = safe_get_component<camera_component>(id))
38 {
39 math::vec3 world_pos{};
40
41 const auto& frustum = comp->get_camera().get_frustum();
42
43 bool result = comp->get_camera().viewport_to_world(origin, frustum.planes[math::volume_plane::near_plane], world_pos, false);
44 if(!result)
45 {
46 return {};
47 }
48 return world_pos;
49 }
50 return {};
51}
52
53auto internal_m2n_camera_screen_point_to_world(entt::entity id, const math::vec3& origin) -> math::vec3
54{
55 if(auto comp = safe_get_component<camera_component>(id))
56 {
57 math::vec2 screen_point(origin.x, origin.y);
58 float distance_from_camera = origin.z;
59
60 math::vec3 ray_origin{};
61 math::vec3 ray_dir{};
62
63 if(!comp->get_camera().viewport_to_ray(screen_point, ray_origin, ray_dir))
64 {
65 return {};
66 }
67
68 math::vec3 world_pos = ray_origin + (ray_dir * distance_from_camera);
69 return world_pos;
70 }
71 return {};
72}
73
74} // namespace
75
77{
78 APPLOG_TRACE("{}", __func__);
79
80 auto reg = dotnet::internal_call_registry("Unravel.Core.CameraComponent");
81 reg.add_internal_call("internal_m2n_camera_screen_point_to_ray",
82 dotnet_internal_call(internal_m2n_camera_screen_point_to_ray));
83 reg.add_internal_call("internal_m2n_camera_screen_point_to_world_2d",
84 dotnet_internal_call(internal_m2n_camera_screen_point_to_world_2d));
85 reg.add_internal_call("internal_m2n_camera_screen_point_to_world",
86 dotnet_internal_call(internal_m2n_camera_screen_point_to_world));
87}
88
89} // namespace unravel
#define APPLOG_TRACE(...)
Definition logging.h:17
auto safe_get_component(entt::entity id) -> T *
void register_camera_component_script_bindings()