summaryrefslogtreecommitdiffstats
path: root/core/math/vector3.cpp
diff options
context:
space:
mode:
authorHein-Pieter van Braam <hp@tmm.cx>2017-02-14 04:10:02 +0100
committerHein-Pieter van Braam <hp@tmm.cx>2017-02-14 13:32:23 +0100
commitadcc211feb7827127b2548c791f2de0b6efda3d3 (patch)
tree8bb33b592e3d3982ca5faf5e041c37644d5b525d /core/math/vector3.cpp
parent81edda18f39efc4f783bc6fa2b381c01cfc0ef2d (diff)
downloadredot-engine-adcc211feb7827127b2548c791f2de0b6efda3d3.tar.gz
Make nan==nan true for GDScript
After discussing this with Reduz this seemed like the best way to fix #7354. This will make composite values that contain NaN in the same places as well as the same other values compare as the same. Additionally non-composite values now also compare equal if they are both NaN. This breaks IEEE specifications but this is probably what most users expect. There is a GDScript function check for NaN if the user needs this information. This fixes #7354 and probably also fixes #6947
Diffstat (limited to 'core/math/vector3.cpp')
-rw-r--r--core/math/vector3.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp
index 2ab5fa0465..7fdb54bb69 100644
--- a/core/math/vector3.cpp
+++ b/core/math/vector3.cpp
@@ -176,6 +176,17 @@ Vector3 Vector3::cubic_interpolate(const Vector3& p_b,const Vector3& p_pre_a, co
return out;
}
# endif
+bool Vector3::nan_equals(const Vector3& p_v) const {
+ return (x == p_v.x && y == p_v.y && z == p_v.z) ||
+ (x == p_v.x && y == p_v.y && isnan(z) && isnan(p_v.z)) ||
+ (x == p_v.x && isnan(y) && isnan(p_v.y) && z == p_v.z) ||
+ (isnan(x) && isnan(p_v.x) && y == p_v.y && z == p_v.z) ||
+ (x == p_v.x && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z)) ||
+ (isnan(x) && isnan(p_v.x) && y == p_v.y && isnan(z) && isnan(p_v.z)) ||
+ (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && z == p_v.z) ||
+ (isnan(x) && isnan(p_v.x) && isnan(y) && isnan(p_v.y) && isnan(z) && isnan(p_v.z));
+}
+
Vector3::operator String() const {
return (rtos(x)+", "+rtos(y)+", "+rtos(z));