summaryrefslogtreecommitdiff
path: root/modules/gdnative/godot/godot_quat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gdnative/godot/godot_quat.cpp')
-rw-r--r--modules/gdnative/godot/godot_quat.cpp231
1 files changed, 172 insertions, 59 deletions
diff --git a/modules/gdnative/godot/godot_quat.cpp b/modules/gdnative/godot/godot_quat.cpp
index 7c3a71dfc0..7235e4fcec 100644
--- a/modules/gdnative/godot/godot_quat.cpp
+++ b/modules/gdnative/godot/godot_quat.cpp
@@ -28,77 +28,190 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "godot_quat.h"
+#include "core/variant.h"
-#include "math/quat.h"
+#include "core/math/quat.h"
#ifdef __cplusplus
extern "C" {
#endif
-void _quat_api_anchor() {
+void _quat_api_anchor() {}
+
+void GDAPI godot_quat_new(godot_quat *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_z, const godot_real p_w) {
+
+ Quat *dest = (Quat *)r_dest;
+ *dest = Quat(p_x, p_y, p_z, p_w);
}
-void GDAPI godot_quat_new(godot_quat *p_quat) {
- Quat *quat = (Quat *)p_quat;
- *quat = Quat();
+void GDAPI godot_quat_new_with_axis_angle(godot_quat *r_dest, const godot_vector3 *p_axis, const godot_real p_angle) {
+ const Vector3 *axis = (const Vector3 *)p_axis;
+ Quat *dest = (Quat *)r_dest;
+ *dest = Quat(*axis, p_angle);
}
-void GDAPI godot_quat_new_with_elements(godot_quat *p_quat, const godot_real x, const godot_real y, const godot_real z, const godot_real w) {
- Quat *quat = (Quat *)p_quat;
- *quat = Quat(x, y, z, w);
+godot_real GDAPI godot_quat_get_x(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->x;
}
-void GDAPI godot_quat_new_with_rotation(godot_quat *p_quat, const godot_vector3 *p_axis, const godot_real p_angle) {
- Quat *quat = (Quat *)p_quat;
- const Vector3 *axis = (const Vector3 *)p_axis;
- *quat = Quat(*axis, p_angle);
-}
-
-void GDAPI godot_quat_new_with_shortest_arc(godot_quat *p_quat, const godot_vector3 *p_v0, const godot_vector3 *p_v1) {
- Quat *quat = (Quat *)p_quat;
- const Vector3 *v0 = (const Vector3 *)p_v0;
- const Vector3 *v1 = (const Vector3 *)p_v1;
- *quat = Quat(*v0, *v1);
-}
-
-godot_vector3 GDAPI godot_quat_get_euler(const godot_quat *p_quat) {
- Quat *quat = (Quat *)p_quat;
- Vector3 euler = quat->get_euler();
- return *(godot_vector3 *)&euler;
-}
-
-void GDAPI godot_quat_set_euler(godot_quat *p_quat, const godot_vector3 *p_euler) {
- Quat *quat = (Quat *)p_quat;
- const Vector3 *euler = (const Vector3 *)p_euler;
- quat->set_euler(*euler);
-}
-
-godot_real GDAPI *godot_quat_index(godot_quat *p_quat, const godot_int p_idx) {
- Quat *quat = (Quat *)p_quat;
- switch (p_idx) {
- case 0:
- return &quat->x;
- case 1:
- return &quat->y;
- case 2:
- return &quat->z;
- default:
- return &quat->y;
- }
-}
-
-godot_real GDAPI godot_quat_const_index(const godot_quat *p_quat, const godot_int p_idx) {
- const Quat *quat = (const Quat *)p_quat;
- switch (p_idx) {
- case 0:
- return quat->x;
- case 1:
- return quat->y;
- case 2:
- return quat->z;
- default:
- return quat->y;
- }
+void GDAPI godot_quat_set_x(godot_quat *p_self, const godot_real val) {
+ Quat *self = (Quat *)p_self;
+ self->x = val;
+}
+
+godot_real GDAPI godot_quat_get_y(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->y;
+}
+
+void GDAPI godot_quat_set_y(godot_quat *p_self, const godot_real val) {
+ Quat *self = (Quat *)p_self;
+ self->y = val;
+}
+
+godot_real GDAPI godot_quat_get_z(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->z;
+}
+
+void GDAPI godot_quat_set_z(godot_quat *p_self, const godot_real val) {
+ Quat *self = (Quat *)p_self;
+ self->z = val;
+}
+
+godot_real GDAPI godot_quat_get_w(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->w;
+}
+
+void GDAPI godot_quat_set_w(godot_quat *p_self, const godot_real val) {
+ Quat *self = (Quat *)p_self;
+ self->w = val;
+}
+
+godot_string GDAPI godot_quat_as_string(const godot_quat *p_self) {
+ godot_string ret;
+ const Quat *self = (const Quat *)p_self;
+ memnew_placement(&ret, String(*self));
+ return ret;
+}
+
+godot_real GDAPI godot_quat_length(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->length();
+}
+
+godot_real GDAPI godot_quat_length_squared(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->length_squared();
+}
+
+godot_quat GDAPI godot_quat_normalized(const godot_quat *p_self) {
+ godot_quat dest;
+ const Quat *self = (const Quat *)p_self;
+ *((Quat *)&dest) = self->normalized();
+ return dest;
+}
+
+godot_bool GDAPI godot_quat_is_normalized(const godot_quat *p_self) {
+ const Quat *self = (const Quat *)p_self;
+ return self->is_normalized();
+}
+
+godot_quat GDAPI godot_quat_inverse(const godot_quat *p_self) {
+ godot_quat dest;
+ const Quat *self = (const Quat *)p_self;
+ *((Quat *)&dest) = self->inverse();
+ return dest;
+}
+
+godot_real GDAPI godot_quat_dot(const godot_quat *p_self, const godot_quat *p_b) {
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ return self->dot(*b);
+}
+
+godot_vector3 GDAPI godot_quat_xform(const godot_quat *p_self, const godot_vector3 *p_v) {
+ godot_vector3 dest;
+ const Quat *self = (const Quat *)p_self;
+ const Vector3 *v = (const Vector3 *)p_v;
+ *((Vector3 *)&dest) = self->xform(*v);
+ return dest;
+}
+
+godot_quat GDAPI godot_quat_slerp(const godot_quat *p_self, const godot_quat *p_b, const godot_real p_t) {
+ godot_quat dest;
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ *((Quat *)&dest) = self->slerp(*b, p_t);
+ return dest;
+}
+
+godot_quat GDAPI godot_quat_slerpni(const godot_quat *p_self, const godot_quat *p_b, const godot_real p_t) {
+ godot_quat dest;
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ *((Quat *)&dest) = self->slerpni(*b, p_t);
+ return dest;
+}
+
+godot_quat GDAPI godot_quat_cubic_slerp(const godot_quat *p_self, const godot_quat *p_b, const godot_quat *p_pre_a, const godot_quat *p_post_b, const godot_real p_t) {
+ godot_quat dest;
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ const Quat *pre_a = (const Quat *)p_pre_a;
+ const Quat *post_b = (const Quat *)p_post_b;
+ *((Quat *)&dest) = self->cubic_slerp(*b, *pre_a, *post_b, p_t);
+ return dest;
+}
+
+godot_quat GDAPI godot_quat_operator_multiply(const godot_quat *p_self, const godot_real p_b) {
+ godot_quat raw_dest;
+ Quat *dest = (Quat *)&raw_dest;
+ const Quat *self = (const Quat *)p_self;
+ *dest = *self * p_b;
+ return raw_dest;
+}
+
+godot_quat GDAPI godot_quat_operator_add(const godot_quat *p_self, const godot_quat *p_b) {
+ godot_quat raw_dest;
+ Quat *dest = (Quat *)&raw_dest;
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ *dest = *self + *b;
+ return raw_dest;
+}
+
+godot_quat GDAPI godot_quat_operator_substract(const godot_quat *p_self, const godot_quat *p_b) {
+ godot_quat raw_dest;
+ Quat *dest = (Quat *)&raw_dest;
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ *dest = *self - *b;
+ return raw_dest;
+}
+
+godot_quat GDAPI godot_quat_operator_divide(const godot_quat *p_self, const godot_real p_b) {
+ godot_quat raw_dest;
+ Quat *dest = (Quat *)&raw_dest;
+ const Quat *self = (const Quat *)p_self;
+ *dest = *self / p_b;
+ return raw_dest;
+}
+
+godot_bool GDAPI godot_quat_operator_equal(const godot_quat *p_self, const godot_quat *p_b) {
+ const Quat *self = (const Quat *)p_self;
+ const Quat *b = (const Quat *)p_b;
+ return *self == *b;
+}
+
+godot_quat GDAPI godot_quat_operator_neg(const godot_quat *p_self) {
+ godot_quat raw_dest;
+ Quat *dest = (Quat *)&raw_dest;
+ const Quat *self = (const Quat *)p_self;
+ *dest = -(*self);
+ return raw_dest;
}
#ifdef __cplusplus