2#ifndef LIBSBX_SCRIPTING_INTEROP_HPP_
3#define LIBSBX_SCRIPTING_INTEROP_HPP_
7#include <libsbx/utility/enum.hpp>
8#include <libsbx/utility/type_name.hpp>
10#include <libsbx/devices/input.hpp>
12#include <libsbx/scenes/node.hpp>
13#include <libsbx/scenes/scenes_module.hpp>
15#include <libsbx/physics/character_controller.hpp>
17#include <libsbx/scripting/managed/string.hpp>
18#include <libsbx/scripting/managed/type.hpp>
19#include <libsbx/scripting/managed/assembly.hpp>
21namespace sbx::scripting {
25 enum class log_level : std::int32_t {
26 trace = utility::bit_v<0>,
27 debug = utility::bit_v<1>,
28 info = utility::bit_v<2>,
29 warn = utility::bit_v<3>,
30 error = utility::bit_v<4>,
31 critical = utility::bit_v<5>
34 static auto log_log_message(log_level level,
managed::string message) -> void;
46 static auto transform_get_position(std::uint32_t
node,
math::vector3* position) -> void;
48 static auto transform_set_position(std::uint32_t
node,
math::vector3* position) -> void;
50 static auto transform_get_world_position(std::uint32_t
node,
math::vector3* position) -> void;
56 static auto transform_get_right(std::uint32_t
node,
math::vector3* right) -> void;
58 static auto transform_get_forward(std::uint32_t
node,
math::vector3* forward) -> void;
64 static auto character_controller_get_height(std::uint32_t
node, std::float_t* height) -> void;
66 static auto character_controller_get_radius(std::uint32_t
node, std::float_t* radius) -> void;
68 static auto character_controller_get_slope_limit(std::uint32_t
node, std::float_t* slope_limit) -> void;
70 static auto character_controller_get_step_offset(std::uint32_t
node, std::float_t* step_offset) -> void;
72 static auto character_controller_get_is_grounded(std::uint32_t
node) -> managed::bool32;
74 static auto character_controller_get_flags(std::uint32_t
node, std::uint8_t* flags) -> void;
76 static auto character_controller_move(std::uint32_t
node,
math::vector3* displacement) -> void;
78 static auto input_is_key_pressed(devices::key key) -> managed::bool32;
80 static auto input_is_key_down(devices::key key) -> managed::bool32;
82 static auto input_is_key_released(devices::key key) -> managed::bool32;
84 static auto input_is_mouse_button_pressed(devices::mouse_button mouse_button) -> managed::bool32;
86 static auto input_is_mouse_button_down(devices::mouse_button mouse_button) -> managed::bool32;
88 static auto input_is_mouse_button_released(devices::mouse_button mouse_button) -> managed::bool32;
90 static auto input_mouse_position(
math::vector2* position) -> void;
92 static auto input_scroll_delta(
math::vector2* scroll_delta) -> void;
96 static auto camera_get_position(
math::vector3* position) -> void;
98 static auto camera_set_position(
math::vector3* position) -> void;
104 static auto camera_get_forward(
math::vector3* forward) -> void;
110 static auto camera_get_viewport(
math::vector2* viewport) -> void;
112 static auto time_delta_time(std::float_t* delta_time) -> void;
114 template<
typename Type>
115 static auto register_managed_component(std::string_view name,
managed::assembly& core_assembly) ->
void {
116 auto& scenes_module = core::engine::get_module<scenes::scenes_module>();
118 const auto component_name = std::format(
"Sbx.Core.{}", name);
120 auto& type = core_assembly.get_type(component_name);
123 _add_component_functions[type.get_type_id()] = [&scenes_module](scenes::node
node) ->
void {
124 auto& scenes_module = core::engine::get_module<scenes::scenes_module>();
125 auto& scene = scenes_module.active_scene();
126 auto& graph = scene.graph();
128 graph.add_component<Type>(
node);
130 _has_component_functions[type.get_type_id()] = [&scenes_module](scenes::node
node) ->
bool {
131 auto& scenes_module = core::engine::get_module<scenes::scenes_module>();
132 auto& scene = scenes_module.active_scene();
133 auto& graph = scene.graph();
135 return graph.has_component<Type>(
node);
146 utility::logger<
"scripting">::warn(
"No C# component class found for {}!", component_name);
152 inline static auto _add_component_functions = std::unordered_map<managed::type_id, std::function<void(scenes::node)>>{};
153 inline static auto _has_component_functions = std::unordered_map<managed::type_id, std::function<bool(scenes::node)>>{};
Definition: quaternion.hpp:25
A vector in two-dimensional space.
Definition: vector2.hpp:28
Definition: vector3.hpp:23
3D ray with normalized direction.
Definition: ray.hpp:37
Definition: assembly.hpp:27
Definition: string.hpp:11
Definition: logger.hpp:124
Definition: interop.hpp:23