Implement the new methods for Vector3.

This commit is contained in:
Relintai 2023-05-27 11:03:21 +02:00
parent 744d8ce240
commit 53856370fb
2 changed files with 138 additions and 22 deletions

View File

@ -48,6 +48,11 @@ pandemonium_real GDAPI pandemonium_vector3_get_axis(const pandemonium_vector3 *p
return self->get_axis(p_axis);
}
void GDAPI pandemonium_vector3_set_all(pandemonium_vector3 *p_self, const pandemonium_real p_value) {
Vector3 *self = (Vector3 *)p_self;
self->set_all(p_value);
}
pandemonium_int GDAPI pandemonium_vector3_min_axis(const pandemonium_vector3 *p_self) {
const Vector3 *self = (const Vector3 *)p_self;
return self->min_axis();
@ -66,6 +71,10 @@ pandemonium_real GDAPI pandemonium_vector3_length_squared(const pandemonium_vect
return self->length_squared();
}
void GDAPI pandemonium_vector3_normalize(pandemonium_vector3 *p_self) {
Vector3 *self = (Vector3 *)p_self;
self->normalize();
}
pandemonium_vector3 GDAPI pandemonium_vector3_normalized(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
@ -82,7 +91,29 @@ pandemonium_vector3 GDAPI pandemonium_vector3_inverse(const pandemonium_vector3
*((Vector3 *)&dest) = self->inverse();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_limit_length(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->limit_length();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_limit_length_len(const pandemonium_vector3 *p_self, const pandemonium_real p_val) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->limit_length(p_val);
return dest;
}
void GDAPI pandemonium_vector3_zero(pandemonium_vector3 *p_self) {
Vector3 *self = (Vector3 *)p_self;
self->zero();
}
void GDAPI pandemonium_vector3_snap(pandemonium_vector3 *p_self, const pandemonium_vector3 *p_val) {
Vector3 *self = (Vector3 *)p_self;
const Vector3 *val = (const Vector3 *)p_val;
self->snap(*val);
}
pandemonium_vector3 GDAPI pandemonium_vector3_snapped(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_by) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
@ -92,6 +123,12 @@ pandemonium_vector3 GDAPI pandemonium_vector3_snapped(const pandemonium_vector3
return dest;
}
void GDAPI pandemonium_vector3_rotate(pandemonium_vector3 *p_self, const pandemonium_vector3 *p_axis, const pandemonium_real p_phi) {
pandemonium_vector3 dest;
Vector3 *self = (Vector3 *)p_self;
const Vector3 *axis = (const Vector3 *)p_axis;
self->rotate(*axis, 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 dest;
const Vector3 *self = (const Vector3 *)p_self;
@ -107,7 +144,13 @@ pandemonium_vector3 GDAPI pandemonium_vector3_linear_interpolate(const pandemoni
*((Vector3 *)&dest) = self->linear_interpolate(*b, p_t);
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_slerp(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_real p_weight) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *to = (const Vector3 *)p_to;
*((Vector3 *)&dest) = self->slerp(*to, p_weight);
return dest;
}
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) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
@ -117,6 +160,15 @@ pandemonium_vector3 GDAPI pandemonium_vector3_cubic_interpolate(const pandemoniu
*((Vector3 *)&dest) = self->cubic_interpolate(*b, *pre_a, *post_b, p_t);
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_bezier_interpolate(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_control_1, const pandemonium_vector3 *p_control_2, const pandemonium_vector3 *p_end, const pandemonium_real p_t) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *control_1 = (const Vector3 *)p_control_1;
const Vector3 *control_2 = (const Vector3 *)p_control_2;
const Vector3 *end = (const Vector3 *)p_end;
*((Vector3 *)&dest) = self->cubic_interpolate(*control_1, *control_2, *end, p_t);
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_move_toward(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_real p_delta) {
pandemonium_vector3 dest;
@ -160,27 +212,63 @@ pandemonium_vector3 GDAPI pandemonium_vector3_abs(const pandemonium_vector3 *p_s
*((Vector3 *)&dest) = self->abs();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_floor(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->floor();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_sign(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->sign();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_ceil(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->ceil();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_round(const pandemonium_vector3 *p_self) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->round();
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_posmod(const pandemonium_vector3 *p_self, const pandemonium_real p_mod) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
*((Vector3 *)&dest) = self->posmod(p_mod);
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_posmodv(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_modv) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *modv = (const Vector3 *)p_modv;
*((Vector3 *)&dest) = self->posmodv(*modv);
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_project(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *to = (const Vector3 *)p_to;
*((Vector3 *)&dest) = self->project(*to);
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_real GDAPI pandemonium_vector3_signed_angle_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_vector3 *p_axis) {
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *to = (const Vector3 *)p_to;
const Vector3 *axis = (const Vector3 *)p_axis;
return self->signed_angle_to(*to, *axis);
}
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;
@ -189,6 +277,15 @@ pandemonium_vector3 GDAPI pandemonium_vector3_direction_to(const pandemonium_vec
return dest;
}
pandemonium_vector3 GDAPI pandemonium_vector3_clamp(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_min, const pandemonium_vector3 *p_max) {
pandemonium_vector3 dest;
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *min = (const Vector3 *)p_min;
const Vector3 *max = (const Vector3 *)p_max;
*((Vector3 *)&dest) = self->clamp(*min, *max);
return dest;
}
pandemonium_real GDAPI pandemonium_vector3_distance_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) {
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *b = (const Vector3 *)p_b;
@ -225,6 +322,22 @@ pandemonium_vector3 GDAPI pandemonium_vector3_reflect(const pandemonium_vector3
return dest;
}
pandemonium_bool GDAPI pandemonium_vector3_is_equal_approx(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v) {
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *v = (const Vector3 *)p_v;
return self->is_equal_approx(*v);
}
pandemonium_bool GDAPI pandemonium_vector3_is_equal_approx_tolerance(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v, const pandemonium_real p_tolerance) {
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *v = (const Vector3 *)p_v;
return self->is_equal_approx(*v, p_tolerance);
}
pandemonium_bool GDAPI pandemonium_vector3_is_equal_approxt(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v, const pandemonium_real p_tolerance) {
const Vector3 *self = (const Vector3 *)p_self;
const Vector3 *v = (const Vector3 *)p_v;
return self->is_equal_approxt(*v, p_tolerance);
}
pandemonium_vector3 GDAPI pandemonium_vector3_operator_add(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_b) {
pandemonium_vector3 raw_dest;
Vector3 *dest = (Vector3 *)&raw_dest;

View File

@ -64,10 +64,12 @@ typedef enum {
PANDEMONIUM_VECTOR3_AXIS_Z,
} pandemonium_vector3_axis;
//TODO operator index
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);
//_FORCE_INLINE_ void set_all(real_t p_value)
void GDAPI pandemonium_vector3_set_all(pandemonium_vector3 *p_self, const pandemonium_real p_val);
pandemonium_int GDAPI pandemonium_vector3_min_axis(const pandemonium_vector3 *p_self);
pandemonium_int GDAPI pandemonium_vector3_max_axis(const pandemonium_vector3 *p_self);
@ -75,24 +77,25 @@ pandemonium_int GDAPI pandemonium_vector3_max_axis(const pandemonium_vector3 *p_
pandemonium_real GDAPI pandemonium_vector3_length(const pandemonium_vector3 *p_self);
pandemonium_real GDAPI pandemonium_vector3_length_squared(const pandemonium_vector3 *p_self);
//_FORCE_INLINE_ void normalize();
void GDAPI pandemonium_vector3_normalize(pandemonium_vector3 *p_self);
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;
pandemonium_vector3 GDAPI pandemonium_vector3_limit_length(const pandemonium_vector3 *p_self);
pandemonium_vector3 GDAPI pandemonium_vector3_limit_length_len(const pandemonium_vector3 *p_self, const pandemonium_real p_val);
//_FORCE_INLINE_ void zero();
void GDAPI pandemonium_vector3_zero(pandemonium_vector3 *p_self);
//void snap(Vector3 p_val);
void GDAPI pandemonium_vector3_snap(pandemonium_vector3 *p_self, const pandemonium_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);
void GDAPI pandemonium_vector3_rotate(pandemonium_vector3 *p_self, const pandemonium_vector3 *p_axis, const pandemonium_real 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_slerp(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_real p_weight);
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_bezier_interpolate(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_control_1, const pandemonium_vector3 *p_control_2, const pandemonium_vector3 *p_end, const pandemonium_real p_t);
pandemonium_vector3 GDAPI pandemonium_vector3_move_toward(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_real p_delta);
@ -103,30 +106,30 @@ pandemonium_basis GDAPI pandemonium_vector3_to_diagonal_matrix(const pandemonium
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_sign(const pandemonium_vector3 *p_self);
pandemonium_vector3 GDAPI pandemonium_vector3_ceil(const pandemonium_vector3 *p_self);
//_FORCE_INLINE_ Vector3 round() const;
pandemonium_vector3 GDAPI pandemonium_vector3_round(const pandemonium_vector3 *p_self);
//Vector3 clamp(const Vector3 &p_min, const Vector3 &p_max) const;
pandemonium_vector3 GDAPI pandemonium_vector3_clamp(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_min, const pandemonium_vector3 *p_max);
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_vector3 GDAPI pandemonium_vector3_posmod(const pandemonium_vector3 *p_self, const pandemonium_real p_mod);
pandemonium_vector3 GDAPI pandemonium_vector3_posmodv(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_modv);
pandemonium_vector3 GDAPI pandemonium_vector3_project(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to);
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_real GDAPI pandemonium_vector3_signed_angle_to(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_to, const pandemonium_vector3 *p_axis);
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);
//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_bool GDAPI pandemonium_vector3_is_equal_approx(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v);
pandemonium_bool GDAPI pandemonium_vector3_is_equal_approx_tolerance(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v, const pandemonium_real p_tolerance);
pandemonium_bool GDAPI pandemonium_vector3_is_equal_approxt(const pandemonium_vector3 *p_self, const pandemonium_vector3 *p_v, const pandemonium_real p_tolerance);
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);