diff --git a/gdnative/vector3.cpp b/gdnative/vector3.cpp index 4a04583..4e0743e 100644 --- a/gdnative/vector3.cpp +++ b/gdnative/vector3.cpp @@ -30,8 +30,8 @@ #include "gdn/vector3.h" -#include "core/variant/variant.h" #include "core/containers/vector.h" +#include "core/variant/variant.h" #ifdef __cplusplus extern "C" { @@ -39,23 +39,19 @@ extern "C" { static_assert(sizeof(pandemonium_vector3) == sizeof(Vector3), "Vector3 size mismatch"); -void GDAPI pandemonium_vector3_new(pandemonium_vector3 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z) { - Vector3 *dest = (Vector3 *)r_dest; - *dest = Vector3(p_x, p_y, p_z); +void GDAPI pandemonium_vector3_set_axis(pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis, const pandemonium_real p_val) { + Vector3 *self = (Vector3 *)p_self; + self->set_axis(p_axis, p_val); } - -pandemonium_string GDAPI pandemonium_vector3_as_string(const pandemonium_vector3 *p_self) { - pandemonium_string ret; +pandemonium_real GDAPI pandemonium_vector3_get_axis(const pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis) { const Vector3 *self = (const Vector3 *)p_self; - memnew_placement(&ret, String(*self)); - return ret; + return self->get_axis(p_axis); } pandemonium_int GDAPI pandemonium_vector3_min_axis(const pandemonium_vector3 *p_self) { const Vector3 *self = (const Vector3 *)p_self; return self->min_axis(); } - pandemonium_int GDAPI pandemonium_vector3_max_axis(const pandemonium_vector3 *p_self) { const Vector3 *self = (const Vector3 *)p_self; return self->max_axis(); @@ -65,24 +61,21 @@ pandemonium_real GDAPI pandemonium_vector3_length(const pandemonium_vector3 *p_s const Vector3 *self = (const Vector3 *)p_self; return self->length(); } - pandemonium_real GDAPI pandemonium_vector3_length_squared(const pandemonium_vector3 *p_self) { const Vector3 *self = (const Vector3 *)p_self; return self->length_squared(); } -pandemonium_bool GDAPI pandemonium_vector3_is_normalized(const pandemonium_vector3 *p_self) { - const Vector3 *self = (const Vector3 *)p_self; - return self->is_normalized(); -} - pandemonium_vector3 GDAPI pandemonium_vector3_normalized(const pandemonium_vector3 *p_self) { pandemonium_vector3 dest; const Vector3 *self = (const Vector3 *)p_self; *((Vector3 *)&dest) = self->normalized(); return dest; } - +pandemonium_bool GDAPI pandemonium_vector3_is_normalized(const pandemonium_vector3 *p_self) { + const Vector3 *self = (const Vector3 *)p_self; + return self->is_normalized(); +} pandemonium_vector3 GDAPI pandemonium_vector3_inverse(const pandemonium_vector3 *p_self) { pandemonium_vector3 dest; const Vector3 *self = (const Vector3 *)p_self; @@ -133,12 +126,6 @@ pandemonium_vector3 GDAPI pandemonium_vector3_move_toward(const pandemonium_vect return dest; } -pandemonium_real GDAPI pandemonium_vector3_dot(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) { - const Vector3 *self = (const Vector3 *)p_self; - const Vector3 *b = (const Vector3 *)p_b; - return self->dot(*b); -} - pandemonium_vector3 GDAPI pandemonium_vector3_cross(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) { pandemonium_vector3 dest; const Vector3 *self = (const Vector3 *)p_self; @@ -146,6 +133,11 @@ pandemonium_vector3 GDAPI pandemonium_vector3_cross(const pandemonium_vector3 *p *((Vector3 *)&dest) = self->cross(*b); return dest; } +pandemonium_real GDAPI pandemonium_vector3_dot(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) { + const Vector3 *self = (const Vector3 *)p_self; + const Vector3 *b = (const Vector3 *)p_b; + return self->dot(*b); +} pandemonium_basis GDAPI pandemonium_vector3_outer(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) { pandemonium_basis dest; @@ -183,6 +175,12 @@ pandemonium_vector3 GDAPI pandemonium_vector3_ceil(const pandemonium_vector3 *p_ return dest; } +pandemonium_real GDAPI pandemonium_vector3_angle_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to) { + const Vector3 *self = (const Vector3 *)p_self; + const Vector3 *to = (const Vector3 *)p_to; + return self->angle_to(*to); +} + pandemonium_vector3 GDAPI pandemonium_vector3_direction_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to) { pandemonium_vector3 dest; const Vector3 *self = (const Vector3 *)p_self; @@ -203,12 +201,6 @@ pandemonium_real GDAPI pandemonium_vector3_distance_squared_to(const pandemonium return self->distance_squared_to(*b); } -pandemonium_real GDAPI pandemonium_vector3_angle_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to) { - const Vector3 *self = (const Vector3 *)p_self; - const Vector3 *to = (const Vector3 *)p_to; - return self->angle_to(*to); -} - pandemonium_vector3 GDAPI pandemonium_vector3_slide(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_n) { pandemonium_vector3 dest; const Vector3 *self = (const Vector3 *)p_self; @@ -285,6 +277,14 @@ pandemonium_vector3 GDAPI pandemonium_vector3_operator_divide_scalar(const pande return raw_dest; } +pandemonium_vector3 GDAPI pandemonium_vector3_operator_neg(const pandemonium_vector3 *p_self) { + pandemonium_vector3 raw_dest; + Vector3 *dest = (Vector3 *)&raw_dest; + const Vector3 *self = (const Vector3 *)p_self; + *dest = -(*self); + return raw_dest; +} + pandemonium_bool GDAPI pandemonium_vector3_operator_equal(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) { Vector3 *self = (Vector3 *)p_self; const Vector3 *b = (const Vector3 *)p_b; @@ -297,22 +297,16 @@ pandemonium_bool GDAPI pandemonium_vector3_operator_less(const pandemonium_vecto return *self < *b; } -pandemonium_vector3 GDAPI pandemonium_vector3_operator_neg(const pandemonium_vector3 *p_self) { - pandemonium_vector3 raw_dest; - Vector3 *dest = (Vector3 *)&raw_dest; +pandemonium_string GDAPI pandemonium_vector3_as_string(const pandemonium_vector3 *p_self) { + pandemonium_string ret; const Vector3 *self = (const Vector3 *)p_self; - *dest = -(*self); - return raw_dest; + memnew_placement(&ret, String(*self)); + return ret; } -void GDAPI pandemonium_vector3_set_axis(pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis, const pandemonium_real p_val) { - Vector3 *self = (Vector3 *)p_self; - self->set_axis(p_axis, p_val); -} - -pandemonium_real GDAPI pandemonium_vector3_get_axis(const pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis) { - const Vector3 *self = (const Vector3 *)p_self; - return self->get_axis(p_axis); +void GDAPI pandemonium_vector3_new(pandemonium_vector3 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z) { + Vector3 *dest = (Vector3 *)r_dest; + *dest = Vector3(p_x, p_y, p_z); } #ifdef __cplusplus diff --git a/include/gdn/vector3.h b/include/gdn/vector3.h index 28f5307..737c9d0 100644 --- a/include/gdn/vector3.h +++ b/include/gdn/vector3.h @@ -64,83 +64,87 @@ typedef enum { PANDEMONIUM_VECTOR3_AXIS_Z, } pandemonium_vector3_axis; -void GDAPI pandemonium_vector3_new(pandemonium_vector3 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z); +void GDAPI pandemonium_vector3_set_axis(pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis, const pandemonium_real p_val); +pandemonium_real GDAPI pandemonium_vector3_get_axis(const pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis); -pandemonium_string GDAPI pandemonium_vector3_as_string(const pandemonium_vector3 *p_self); +//_FORCE_INLINE_ void set_all(real_t p_value) pandemonium_int GDAPI pandemonium_vector3_min_axis(const pandemonium_vector3 *p_self); - pandemonium_int GDAPI pandemonium_vector3_max_axis(const pandemonium_vector3 *p_self); pandemonium_real GDAPI pandemonium_vector3_length(const pandemonium_vector3 *p_self); - pandemonium_real GDAPI pandemonium_vector3_length_squared(const pandemonium_vector3 *p_self); -pandemonium_bool GDAPI pandemonium_vector3_is_normalized(const pandemonium_vector3 *p_self); - +//_FORCE_INLINE_ void normalize(); pandemonium_vector3 GDAPI pandemonium_vector3_normalized(const pandemonium_vector3 *p_self); - +pandemonium_bool GDAPI pandemonium_vector3_is_normalized(const pandemonium_vector3 *p_self); pandemonium_vector3 GDAPI pandemonium_vector3_inverse(const pandemonium_vector3 *p_self); +//Vector3 limit_length(const real_t p_len = 1.0) const; +//_FORCE_INLINE_ void zero(); + +//void snap(Vector3 p_val); pandemonium_vector3 GDAPI pandemonium_vector3_snapped(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_by); +//void rotate(const Vector3 &p_axis, real_t p_phi); pandemonium_vector3 GDAPI pandemonium_vector3_rotated(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_axis, const pandemonium_real p_phi); pandemonium_vector3 GDAPI pandemonium_vector3_linear_interpolate(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b, const pandemonium_real p_t); - +//_FORCE_INLINE_ Vector3 slerp(const Vector3 &p_to, real_t p_weight) const; pandemonium_vector3 GDAPI pandemonium_vector3_cubic_interpolate(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b, const pandemonium_vector3 *p_pre_a, const pandemonium_vector3 *p_post_b, const pandemonium_real p_t); +//_FORCE_INLINE_ Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const; pandemonium_vector3 GDAPI pandemonium_vector3_move_toward(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_real p_delta); -pandemonium_real GDAPI pandemonium_vector3_dot(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_vector3 GDAPI pandemonium_vector3_cross(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - +pandemonium_real GDAPI pandemonium_vector3_dot(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); pandemonium_basis GDAPI pandemonium_vector3_outer(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_basis GDAPI pandemonium_vector3_to_diagonal_matrix(const pandemonium_vector3 *p_self); pandemonium_vector3 GDAPI pandemonium_vector3_abs(const pandemonium_vector3 *p_self); - pandemonium_vector3 GDAPI pandemonium_vector3_floor(const pandemonium_vector3 *p_self); - +//_FORCE_INLINE_ Vector3 sign() const; pandemonium_vector3 GDAPI pandemonium_vector3_ceil(const pandemonium_vector3 *p_self); +//_FORCE_INLINE_ Vector3 round() const; -pandemonium_vector3 GDAPI pandemonium_vector3_direction_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); +//Vector3 clamp(const Vector3 &p_min, const Vector3 &p_max) const; pandemonium_real GDAPI pandemonium_vector3_distance_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_real GDAPI pandemonium_vector3_distance_squared_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); +//_FORCE_INLINE_ Vector3 posmod(const real_t p_mod) const; +//_FORCE_INLINE_ Vector3 posmodv(const Vector3 &p_modv) const; +//_FORCE_INLINE_ Vector3 project(const Vector3 &p_to) const; + pandemonium_real GDAPI pandemonium_vector3_angle_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to); +//_FORCE_INLINE_ real_t signed_angle_to(const Vector3 &p_to, const Vector3 &p_axis) const; +pandemonium_vector3 GDAPI pandemonium_vector3_direction_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); pandemonium_vector3 GDAPI pandemonium_vector3_slide(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_n); - pandemonium_vector3 GDAPI pandemonium_vector3_bounce(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_n); - pandemonium_vector3 GDAPI pandemonium_vector3_reflect(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_n); -pandemonium_vector3 GDAPI pandemonium_vector3_operator_add(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); +//bool is_equal_approx(const Vector3 &p_v) const; +//inline bool is_equal_approx(const Vector3 &p_v, real_t p_tolerance) const; +//inline bool is_equal_approxt(const Vector3 &p_v, real_t p_tolerance) const; +pandemonium_vector3 GDAPI pandemonium_vector3_operator_add(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); pandemonium_vector3 GDAPI pandemonium_vector3_operator_subtract(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); pandemonium_vector3 GDAPI pandemonium_vector3_operator_multiply_vector(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_vector3 GDAPI pandemonium_vector3_operator_multiply_scalar(const pandemonium_vector3 *p_self, const pandemonium_real p_b); pandemonium_vector3 GDAPI pandemonium_vector3_operator_divide_vector(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_vector3 GDAPI pandemonium_vector3_operator_divide_scalar(const pandemonium_vector3 *p_self, const pandemonium_real p_b); -pandemonium_bool GDAPI pandemonium_vector3_operator_equal(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - -pandemonium_bool GDAPI pandemonium_vector3_operator_less(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); - pandemonium_vector3 GDAPI pandemonium_vector3_operator_neg(const pandemonium_vector3 *p_self); -void GDAPI pandemonium_vector3_set_axis(pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis, const pandemonium_real p_val); +pandemonium_bool GDAPI pandemonium_vector3_operator_equal(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); +pandemonium_bool GDAPI pandemonium_vector3_operator_less(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b); -pandemonium_real GDAPI pandemonium_vector3_get_axis(const pandemonium_vector3 *p_self, const pandemonium_vector3_axis p_axis); +pandemonium_string GDAPI pandemonium_vector3_as_string(const pandemonium_vector3 *p_self); + +void GDAPI pandemonium_vector3_new(pandemonium_vector3 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z); #ifdef __cplusplus }