From 6f32996c63bccba6ff2e55d62e15c2f4139f62fd Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 27 May 2023 13:36:49 +0200 Subject: [PATCH] Added Vector4, Vector4i. --- gdnative/vector4.cpp | 324 +++++++++++++++++++++++++++++++++++++++++ gdnative/vector4i.cpp | 211 +++++++++++++++++++++++++++ include/gdn/gdnative.h | 12 ++ include/gdn/vector4.h | 141 ++++++++++++++++++ include/gdn/vector4i.h | 115 +++++++++++++++ 5 files changed, 803 insertions(+) create mode 100644 gdnative/vector4.cpp create mode 100644 gdnative/vector4i.cpp create mode 100644 include/gdn/vector4.h create mode 100644 include/gdn/vector4i.h diff --git a/gdnative/vector4.cpp b/gdnative/vector4.cpp new file mode 100644 index 0000000..c0d1651 --- /dev/null +++ b/gdnative/vector4.cpp @@ -0,0 +1,324 @@ +/**************************************************************************/ +/* vector4.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://pandemoniumengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "gdn/vector4.h" + +#include "core/math/vector4.h" +#include "core/variant/variant.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static_assert(sizeof(pandemonium_vector4) == sizeof(Vector4), "Vector4 size mismatch"); + +pandemonium_real GDAPI *pandemonium_vector4_operator_index(pandemonium_vector4 *p_self, const pandemonium_int p_idx) { + Vector4 *self = (Vector4 *)p_self; + return (pandemonium_real *)&self->operator[](p_idx); +} +const pandemonium_real GDAPI *pandemonium_vector4_operator_index_const(const pandemonium_vector4 *p_self, const pandemonium_int p_idx) { + const Vector4 *self = (const Vector4 *)p_self; + return (const pandemonium_real *)&self->operator[](p_idx); +} + +void GDAPI pandemonium_vector4_set_axis(pandemonium_vector4 *p_self, const pandemonium_vector4_axis p_axis, const pandemonium_real p_val) { + Vector4 *self = (Vector4 *)p_self; + self->set_axis(p_axis, p_val); +} +pandemonium_real GDAPI pandemonium_vector4_get_axis(const pandemonium_vector4 *p_self, const pandemonium_vector4_axis p_axis) { + const Vector4 *self = (const Vector4 *)p_self; + return self->get_axis(p_axis); +} + +void GDAPI pandemonium_vector4_set_all(pandemonium_vector4 *p_self, const pandemonium_real p_value) { + Vector4 *self = (Vector4 *)p_self; + self->set_all(p_value); +} + +pandemonium_int GDAPI pandemonium_vector4_min_axis(const pandemonium_vector4 *p_self) { + const Vector4 *self = (const Vector4 *)p_self; + return self->min_axis(); +} +pandemonium_int GDAPI pandemonium_vector4_max_axis(const pandemonium_vector4 *p_self) { + const Vector4 *self = (const Vector4 *)p_self; + return self->max_axis(); +} + +pandemonium_real GDAPI pandemonium_vector4_length(const pandemonium_vector4 *p_self) { + const Vector4 *self = (const Vector4 *)p_self; + return self->length(); +} +pandemonium_real GDAPI pandemonium_vector4_length_squared(const pandemonium_vector4 *p_self) { + const Vector4 *self = (const Vector4 *)p_self; + return self->length_squared(); +} + +void GDAPI pandemonium_vector4_normalize(pandemonium_vector4 *p_self) { + Vector4 *self = (Vector4 *)p_self; + self->normalize(); +} +pandemonium_vector4 GDAPI pandemonium_vector4_normalized(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->normalized(); + return dest; +} +pandemonium_bool GDAPI pandemonium_vector4_is_normalized(const pandemonium_vector4 *p_self) { + const Vector4 *self = (const Vector4 *)p_self; + return self->is_normalized(); +} +pandemonium_vector4 GDAPI pandemonium_vector4_inverse(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->inverse(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_limit_length(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->limit_length(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_limit_length_len(const pandemonium_vector4 *p_self, const pandemonium_real p_val) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->limit_length(p_val); + return dest; +} + +void GDAPI pandemonium_vector4_zero(pandemonium_vector4 *p_self) { + Vector4 *self = (Vector4 *)p_self; + self->zero(); +} + +void GDAPI pandemonium_vector4_snap(pandemonium_vector4 *p_self, const pandemonium_vector4 *p_val) { + Vector4 *self = (Vector4 *)p_self; + const Vector4 *val = (const Vector4 *)p_val; + self->snap(*val); +} +pandemonium_vector4 GDAPI pandemonium_vector4_snapped(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_by) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *snap_axis = (const Vector4 *)p_by; + + *((Vector4 *)&dest) = self->snapped(*snap_axis); + return dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_linear_interpolate(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b, const pandemonium_real p_t) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + *((Vector4 *)&dest) = self->linear_interpolate(*b, p_t); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_cubic_interpolate(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b, const pandemonium_vector4 *p_pre_a, const pandemonium_vector4 *p_post_b, const pandemonium_real p_t) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + const Vector4 *pre_a = (const Vector4 *)p_pre_a; + const Vector4 *post_b = (const Vector4 *)p_post_b; + *((Vector4 *)&dest) = self->cubic_interpolate(*b, *pre_a, *post_b, p_t); + return dest; +} + +pandemonium_real GDAPI pandemonium_vector4_dot(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + return self->dot(*b); +} + +pandemonium_vector4 GDAPI pandemonium_vector4_abs(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->abs(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_floor(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->floor(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_sign(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->sign(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_ceil(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->ceil(); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_round(const pandemonium_vector4 *p_self) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->round(); + return dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_posmod(const pandemonium_vector4 *p_self, const pandemonium_real p_mod) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + *((Vector4 *)&dest) = self->posmod(p_mod); + return dest; +} +pandemonium_vector4 GDAPI pandemonium_vector4_posmodv(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_modv) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *modv = (const Vector4 *)p_modv; + *((Vector4 *)&dest) = self->posmodv(*modv); + return dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_direction_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_to) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *to = (const Vector4 *)p_to; + *((Vector4 *)&dest) = self->direction_to(*to); + return dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_clamp(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_min, const pandemonium_vector4 *p_max) { + pandemonium_vector4 dest; + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *min = (const Vector4 *)p_min; + const Vector4 *max = (const Vector4 *)p_max; + *((Vector4 *)&dest) = self->clamp(*min, *max); + return dest; +} + +pandemonium_real GDAPI pandemonium_vector4_distance_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + return self->distance_to(*b); +} + +pandemonium_real GDAPI pandemonium_vector4_distance_squared_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + return self->distance_squared_to(*b); +} + +pandemonium_bool GDAPI pandemonium_vector4_is_equal_approx(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_v) { + const Vector4 *self = (const Vector4 *)p_self; + const Vector4 *v = (const Vector4 *)p_v; + return self->is_equal_approx(*v); +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_add(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + *dest = *self + *b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_subtract(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + *dest = *self - *b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_multiply_vector(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + *dest = *self * *b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_multiply_scalar(const pandemonium_vector4 *p_self, const pandemonium_real p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + *dest = *self * p_b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_divide_vector(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + *dest = *self / *b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_divide_scalar(const pandemonium_vector4 *p_self, const pandemonium_real p_b) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + Vector4 *self = (Vector4 *)p_self; + *dest = *self / p_b; + return raw_dest; +} + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_neg(const pandemonium_vector4 *p_self) { + pandemonium_vector4 raw_dest; + Vector4 *dest = (Vector4 *)&raw_dest; + const Vector4 *self = (const Vector4 *)p_self; + *dest = -(*self); + return raw_dest; +} + +pandemonium_bool GDAPI pandemonium_vector4_operator_equal(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + return *self == *b; +} + +pandemonium_bool GDAPI pandemonium_vector4_operator_less(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b) { + Vector4 *self = (Vector4 *)p_self; + const Vector4 *b = (const Vector4 *)p_b; + return *self < *b; +} + +pandemonium_string GDAPI pandemonium_vector4_as_string(const pandemonium_vector4 *p_self) { + pandemonium_string ret; + const Vector4 *self = (const Vector4 *)p_self; + memnew_placement(&ret, String(*self)); + return ret; +} + +void GDAPI pandemonium_vector4_new(pandemonium_vector4 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w) { + Vector4 *dest = (Vector4 *)r_dest; + *dest = Vector4(p_x, p_y, p_z, p_w); +} + +#ifdef __cplusplus +} +#endif diff --git a/gdnative/vector4i.cpp b/gdnative/vector4i.cpp new file mode 100644 index 0000000..e4d09b5 --- /dev/null +++ b/gdnative/vector4i.cpp @@ -0,0 +1,211 @@ +/**************************************************************************/ +/* vector4i.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://pandemoniumengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "gdn/vector4i.h" + +#include "core/math/vector4i.h" +#include "core/variant/variant.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static_assert(sizeof(pandemonium_vector4i) == sizeof(Vector4i), "Vector4i size mismatch"); + +pandemonium_int GDAPI *pandemonium_vector4i_operator_index(pandemonium_vector4i *p_self, const pandemonium_int p_idx) { + Vector4i *self = (Vector4i *)p_self; + return (pandemonium_int *)&self->operator[](p_idx); +} +const pandemonium_int GDAPI *pandemonium_vector4i_operator_index_const(const pandemonium_vector4i *p_self, const pandemonium_int p_idx) { + const Vector4i *self = (const Vector4i *)p_self; + return (const pandemonium_int *)&self->operator[](p_idx); +} + +void GDAPI pandemonium_vector4i_set_axis(pandemonium_vector4i *p_self, const pandemonium_vector4i_axis p_axis, const pandemonium_int p_val) { + Vector4i *self = (Vector4i *)p_self; + self->set_axis(p_axis, p_val); +} +pandemonium_int GDAPI pandemonium_vector4i_get_axis(const pandemonium_vector4i *p_self, const pandemonium_vector4i_axis p_axis) { + const Vector4i *self = (const Vector4i *)p_self; + return self->get_axis(p_axis); +} + +void GDAPI pandemonium_vector4i_set_all(pandemonium_vector4i *p_self, const pandemonium_int p_value) { + Vector4i *self = (Vector4i *)p_self; + self->set_all(p_value); +} + +pandemonium_int GDAPI pandemonium_vector4i_min_axis(const pandemonium_vector4i *p_self) { + const Vector4i *self = (const Vector4i *)p_self; + return self->min_axis(); +} +pandemonium_int GDAPI pandemonium_vector4i_max_axis(const pandemonium_vector4i *p_self) { + const Vector4i *self = (const Vector4i *)p_self; + return self->max_axis(); +} + +pandemonium_real GDAPI pandemonium_vector4i_length(const pandemonium_vector4i *p_self) { + const Vector4i *self = (const Vector4i *)p_self; + return self->length(); +} +pandemonium_int GDAPI pandemonium_vector4i_length_squared(const pandemonium_vector4i *p_self) { + const Vector4i *self = (const Vector4i *)p_self; + return self->length_squared(); +} + +void GDAPI pandemonium_vector4i_zero(pandemonium_vector4i *p_self) { + Vector4i *self = (Vector4i *)p_self; + self->zero(); +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_linear_interpolate(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b, const pandemonium_real p_t) { + pandemonium_vector4i dest; + const Vector4i *self = (const Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + *((Vector4i *)&dest) = self->linear_interpolate(*b, p_t); + return dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_abs(const pandemonium_vector4i *p_self) { + pandemonium_vector4i dest; + const Vector4i *self = (const Vector4i *)p_self; + *((Vector4i *)&dest) = self->abs(); + return dest; +} +pandemonium_vector4i GDAPI pandemonium_vector4i_sign(const pandemonium_vector4i *p_self) { + pandemonium_vector4i dest; + const Vector4i *self = (const Vector4i *)p_self; + *((Vector4i *)&dest) = self->sign(); + return dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_clamp(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_min, const pandemonium_vector4i *p_max) { + pandemonium_vector4i dest; + const Vector4i *self = (const Vector4i *)p_self; + const Vector4i *min = (const Vector4i *)p_min; + const Vector4i *max = (const Vector4i *)p_max; + *((Vector4i *)&dest) = self->clamp(*min, *max); + return dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_add(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + *dest = *self + *b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_subtract(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + *dest = *self - *b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_multiply_vector(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + *dest = *self * *b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_multiply_scalar(const pandemonium_vector4i *p_self, const pandemonium_int p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + *dest = *self * p_b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_divide_vector(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + *dest = *self / *b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_divide_scalar(const pandemonium_vector4i *p_self, const pandemonium_int p_b) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + Vector4i *self = (Vector4i *)p_self; + *dest = *self / p_b; + return raw_dest; +} + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_neg(const pandemonium_vector4i *p_self) { + pandemonium_vector4i raw_dest; + Vector4i *dest = (Vector4i *)&raw_dest; + const Vector4i *self = (const Vector4i *)p_self; + *dest = -(*self); + return raw_dest; +} + +pandemonium_bool GDAPI pandemonium_vector4i_operator_equal(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + return *self == *b; +} + +pandemonium_bool GDAPI pandemonium_vector4i_operator_less(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b) { + Vector4i *self = (Vector4i *)p_self; + const Vector4i *b = (const Vector4i *)p_b; + return *self < *b; +} + +pandemonium_vector4 GDAPI pandemonium_vector4i_to_vector4(const pandemonium_vector4i *p_self) { + pandemonium_vector4 dest; + const Vector4i *self = (const Vector4i *)p_self; + *((Vector4 *)&dest) = self->to_vector4(); + return dest; +} + +pandemonium_string GDAPI pandemonium_vector4i_as_string(const pandemonium_vector4i *p_self) { + pandemonium_string ret; + const Vector4i *self = (const Vector4i *)p_self; + memnew_placement(&ret, String(*self)); + return ret; +} + +void GDAPI pandemonium_vector4i_new(pandemonium_vector4i *r_dest, const pandemonium_int p_x, const pandemonium_int p_y, const pandemonium_int p_z, const pandemonium_int p_w) { + Vector4i *dest = (Vector4i *)r_dest; + *dest = Vector4i(p_x, p_y, p_z, p_w); +} + +#ifdef __cplusplus +} +#endif diff --git a/include/gdn/gdnative.h b/include/gdn/gdnative.h index 66d6d41..c5c44bc 100644 --- a/include/gdn/gdnative.h +++ b/include/gdn/gdnative.h @@ -164,6 +164,18 @@ typedef void pandemonium_object; #include +////// Vector3i + +#include + +////// Vector4 + +#include + +////// Vector4i + +#include + ////// Transform2D #include diff --git a/include/gdn/vector4.h b/include/gdn/vector4.h new file mode 100644 index 0000000..7f92d39 --- /dev/null +++ b/include/gdn/vector4.h @@ -0,0 +1,141 @@ +/**************************************************************************/ +/* vector4.h */ +/**************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://pandemoniumengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef GDNATIVE_VECTOR4_H +#define GDNATIVE_VECTOR4_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define PANDEMONIUM_VECTOR4_SIZE 16 + +#ifndef PANDEMONIUM_CORE_API_PANDEMONIUM_VECTOR4_TYPE_DEFINED +#define PANDEMONIUM_CORE_API_PANDEMONIUM_VECTOR4_TYPE_DEFINED +typedef struct { + uint8_t _dont_touch_that[PANDEMONIUM_VECTOR4_SIZE]; +} pandemonium_vector4; +#endif + +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PANDEMONIUM_VECTOR4_AXIS_X, + PANDEMONIUM_VECTOR4_AXIS_Y, + PANDEMONIUM_VECTOR4_AXIS_Z, + PANDEMONIUM_VECTOR4_AXIS_W, +} pandemonium_vector4_axis; + +//getters / setters + +pandemonium_real GDAPI *pandemonium_vector4_operator_index(pandemonium_vector4 *p_self, const pandemonium_int p_idx); +const pandemonium_real GDAPI *pandemonium_vector4_operator_index_const(const pandemonium_vector4 *p_self, const pandemonium_int p_idx); + +void GDAPI pandemonium_vector4_set_axis(pandemonium_vector4 *p_self, const pandemonium_vector4_axis p_axis, const pandemonium_real p_val); +pandemonium_real GDAPI pandemonium_vector4_get_axis(const pandemonium_vector4 *p_self, const pandemonium_vector4_axis p_axis); + +void GDAPI pandemonium_vector4_set_all(pandemonium_vector4 *p_self, const pandemonium_real p_val); + +pandemonium_int GDAPI pandemonium_vector4_min_axis(const pandemonium_vector4 *p_self); +pandemonium_int GDAPI pandemonium_vector4_max_axis(const pandemonium_vector4 *p_self); + +pandemonium_real GDAPI pandemonium_vector4_length(const pandemonium_vector4 *p_self); +pandemonium_real GDAPI pandemonium_vector4_length_squared(const pandemonium_vector4 *p_self); + +void GDAPI pandemonium_vector4_normalize(pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_normalized(const pandemonium_vector4 *p_self); +pandemonium_bool GDAPI pandemonium_vector4_is_normalized(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_inverse(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_limit_length(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_limit_length_len(const pandemonium_vector4 *p_self, const pandemonium_real p_val); + +void GDAPI pandemonium_vector4_zero(pandemonium_vector4 *p_self); + +void GDAPI pandemonium_vector4_snap(pandemonium_vector4 *p_self, const pandemonium_vector4 *p_val); +pandemonium_vector4 GDAPI pandemonium_vector4_snapped(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_by); + +pandemonium_vector4 GDAPI pandemonium_vector4_linear_interpolate(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b, const pandemonium_real p_t); +pandemonium_vector4 GDAPI pandemonium_vector4_cubic_interpolate(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b, const pandemonium_vector4 *p_pre_a, const pandemonium_vector4 *p_post_b, const pandemonium_real p_t); + +pandemonium_real GDAPI pandemonium_vector4_dot(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4_abs(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_floor(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_sign(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_ceil(const pandemonium_vector4 *p_self); +pandemonium_vector4 GDAPI pandemonium_vector4_round(const pandemonium_vector4 *p_self); + +pandemonium_vector4 GDAPI pandemonium_vector4_clamp(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_min, const pandemonium_vector4 *p_max); + +pandemonium_real GDAPI pandemonium_vector4_distance_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); +pandemonium_real GDAPI pandemonium_vector4_distance_squared_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4_posmod(const pandemonium_vector4 *p_self, const pandemonium_real p_mod); +pandemonium_vector4 GDAPI pandemonium_vector4_posmodv(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_modv); + +pandemonium_vector4 GDAPI pandemonium_vector4_direction_to(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); + +pandemonium_bool GDAPI pandemonium_vector4_is_equal_approx(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_v); + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_add(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); +pandemonium_vector4 GDAPI pandemonium_vector4_operator_subtract(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_multiply_vector(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); +pandemonium_vector4 GDAPI pandemonium_vector4_operator_multiply_scalar(const pandemonium_vector4 *p_self, const pandemonium_real p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_divide_vector(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); +pandemonium_vector4 GDAPI pandemonium_vector4_operator_divide_scalar(const pandemonium_vector4 *p_self, const pandemonium_real p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4_operator_neg(const pandemonium_vector4 *p_self); + +pandemonium_bool GDAPI pandemonium_vector4_operator_equal(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); +pandemonium_bool GDAPI pandemonium_vector4_operator_less(const pandemonium_vector4 *p_self, const pandemonium_vector4 *p_b); + +pandemonium_string GDAPI pandemonium_vector4_as_string(const pandemonium_vector4 *p_self); + +void GDAPI pandemonium_vector4_new(pandemonium_vector4 *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w); + +#ifdef __cplusplus +} +#endif + +#endif // GDNATIVE_VECTOR4_H diff --git a/include/gdn/vector4i.h b/include/gdn/vector4i.h new file mode 100644 index 0000000..1b240bd --- /dev/null +++ b/include/gdn/vector4i.h @@ -0,0 +1,115 @@ +/**************************************************************************/ +/* vector4i.h */ +/**************************************************************************/ +/* This file is part of: */ +/* PANDEMONIUM ENGINE */ +/* https://pandemoniumengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef GDNATIVE_VECTOR4I_H +#define GDNATIVE_VECTOR4I_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define PANDEMONIUM_VECTOR4I_SIZE 16 + +#ifndef PANDEMONIUM_CORE_API_PANDEMONIUM_VECTOR4I_TYPE_DEFINED +#define PANDEMONIUM_CORE_API_PANDEMONIUM_VECTOR4I_TYPE_DEFINED +typedef struct { + uint8_t _dont_touch_that[PANDEMONIUM_VECTOR4I_SIZE]; +} pandemonium_vector4i; +#endif + +// reduce extern "C" nesting for VS2013 +#ifdef __cplusplus +} +#endif + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PANDEMONIUM_VECTOR4I_AXIS_X, + PANDEMONIUM_VECTOR4I_AXIS_Y, + PANDEMONIUM_VECTOR4I_AXIS_Z, + PANDEMONIUM_VECTOR4I_AXIS_W, +} pandemonium_vector4i_axis; + +pandemonium_int GDAPI *pandemonium_vector4i_operator_index(pandemonium_vector4i *p_self, const pandemonium_int p_idx); +const pandemonium_int GDAPI *pandemonium_vector4i_operator_index_const(const pandemonium_vector4i *p_self, const pandemonium_int p_idx); + +void GDAPI pandemonium_vector4i_set_axis(pandemonium_vector4i *p_self, const pandemonium_vector4i_axis p_axis, const pandemonium_int p_val); +pandemonium_int GDAPI pandemonium_vector4i_get_axis(const pandemonium_vector4i *p_self, const pandemonium_vector4i_axis p_axis); + +void GDAPI pandemonium_vector4i_set_all(pandemonium_vector4i *p_self, const pandemonium_int p_val); + +pandemonium_int GDAPI pandemonium_vector4i_min_axis(const pandemonium_vector4i *p_self); +pandemonium_int GDAPI pandemonium_vector4i_max_axis(const pandemonium_vector4i *p_self); + +pandemonium_real GDAPI pandemonium_vector4i_length(const pandemonium_vector4i *p_self); +pandemonium_int GDAPI pandemonium_vector4i_length_squared(const pandemonium_vector4i *p_self); + +void GDAPI pandemonium_vector4i_zero(pandemonium_vector4i *p_self); + +pandemonium_vector4i GDAPI pandemonium_vector4i_linear_interpolate(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b, const pandemonium_real p_t); + +pandemonium_vector4i GDAPI pandemonium_vector4i_abs(const pandemonium_vector4i *p_self); +pandemonium_vector4i GDAPI pandemonium_vector4i_sign(const pandemonium_vector4i *p_self); + +pandemonium_vector4i GDAPI pandemonium_vector4i_clamp(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_min, const pandemonium_vector4i *p_max); + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_add(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_subtract(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_multiply_vector(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_multiply_scalar(const pandemonium_vector4i *p_self, const pandemonium_int p_b); + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_divide_vector(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_divide_scalar(const pandemonium_vector4i *p_self, const pandemonium_int p_b); + +pandemonium_vector4i GDAPI pandemonium_vector4i_operator_neg(const pandemonium_vector4i *p_self); + +pandemonium_bool GDAPI pandemonium_vector4i_operator_equal(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); +pandemonium_bool GDAPI pandemonium_vector4i_operator_less(const pandemonium_vector4i *p_self, const pandemonium_vector4i *p_b); + +pandemonium_vector4 GDAPI pandemonium_vector4i_to_vector4(const pandemonium_vector4i *p_self); + +pandemonium_string GDAPI pandemonium_vector4i_as_string(const pandemonium_vector4i *p_self); + +void GDAPI pandemonium_vector4i_new(pandemonium_vector4i *r_dest, const pandemonium_int p_x, const pandemonium_int p_y, const pandemonium_int p_z, const pandemonium_int p_w); + +#ifdef __cplusplus +} +#endif + +#endif // GDNATIVE_VECTOR4I_H