summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBastiaan Olij <mux213@gmail.com>2018-11-22 22:14:28 +1100
committerBastiaan Olij <mux213@gmail.com>2018-11-22 22:14:28 +1100
commitd7982cfac3496de12cb41f789973f2d996628236 (patch)
treeb53d6cb9eef00a2adc8435c69ab7a1a81f373ed4
parent8ffda12b83f3ba22cb4cfa785f5931c15b6897c0 (diff)
downloadredot-cpp-d7982cfac3496de12cb41f789973f2d996628236.tar.gz
Redid PR 190 for master now that nativescript 1.1 has been merged
-rw-r--r--include/core/Vector3.hpp8
-rw-r--r--src/core/Vector3.cpp22
2 files changed, 29 insertions, 1 deletions
diff --git a/include/core/Vector3.hpp b/include/core/Vector3.hpp
index fa7dcf4..bdfff2b 100644
--- a/include/core/Vector3.hpp
+++ b/include/core/Vector3.hpp
@@ -7,6 +7,7 @@
namespace godot {
+class Basis;
struct Vector3 {
@@ -79,6 +80,8 @@ struct Vector3 {
Vector3 cubic_interpolate(const Vector3& b, const Vector3& pre_a, const Vector3& post_b, const real_t t) const;
+ Vector3 bounce(const Vector3& p_normal) const;
+
real_t length() const;
real_t length_squared() const;
@@ -89,10 +92,15 @@ struct Vector3 {
real_t dot(const Vector3& b) const;
+ real_t angle_to(const Vector3& b) const;
+
Vector3 floor() const;
Vector3 inverse() const;
+ bool is_normalized() const;
+
+ Basis outer(const Vector3& b) const;
diff --git a/src/core/Vector3.cpp b/src/core/Vector3.cpp
index 2f2e45e..4098825 100644
--- a/src/core/Vector3.cpp
+++ b/src/core/Vector3.cpp
@@ -10,7 +10,6 @@
namespace godot {
-
Vector3::Vector3(real_t x, real_t y, real_t z)
{
this->x = x;
@@ -209,6 +208,11 @@ Vector3 Vector3::cubic_interpolate(const Vector3& b, const Vector3& pre_a, const
return out;
}
+Vector3 Vector3::bounce(const Vector3& p_normal) const
+{
+ return -reflect(p_normal);
+}
+
real_t Vector3::length() const
{
real_t x2=x*x;
@@ -242,6 +246,11 @@ real_t Vector3::dot(const Vector3& b) const
return x*b.x + y*b.y + z*b.z;
}
+real_t Vector3::angle_to(const Vector3& b) const
+{
+ return std::atan2(cross(b).length(), dot(b));
+}
+
Vector3 Vector3::floor() const
{
return Vector3(::floor(x), ::floor(y), ::floor(z));
@@ -252,7 +261,18 @@ Vector3 Vector3::inverse() const
return Vector3( 1.0/x, 1.0/y, 1.0/z );
}
+bool Vector3::is_normalized() const
+{
+ return std::abs(length_squared() - 1.0) < 0.00001;
+}
+Basis Vector3::outer(const Vector3& b) const
+{
+ Vector3 row0(x * b.x, x * b.y, x * b.z);
+ Vector3 row1(y * b.x, y * b.y, y * b.z);
+ Vector3 row2(z * b.x, z * b.y, z * b.z);
+ return Basis(row0, row1, row2);
+}
int Vector3::max_axis() const