diff options
author | Aaron Franke <arnfranke@yahoo.com> | 2022-10-05 21:40:33 -0500 |
---|---|---|
committer | Aaron Franke <arnfranke@yahoo.com> | 2022-10-07 11:27:41 -0500 |
commit | 65eeb94f75d00cf523da114de3587f930cdec13f (patch) | |
tree | dde77921057db9be1a1ffc79da1e22c3915c1cfe /src/variant/plane.cpp | |
parent | 1507253bd5a8b33df1e72b3848b978bcf4a01586 (diff) | |
download | redot-cpp-65eeb94f75d00cf523da114de3587f930cdec13f.tar.gz |
Update core data structures to match the engine
Diffstat (limited to 'src/variant/plane.cpp')
-rw-r--r-- | src/variant/plane.cpp | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/src/variant/plane.cpp b/src/variant/plane.cpp index 43575c9..015b6a4 100644 --- a/src/variant/plane.cpp +++ b/src/variant/plane.cpp @@ -31,6 +31,7 @@ #include <godot_cpp/variant/plane.hpp> #include <godot_cpp/variant/string.hpp> +#include <godot_cpp/variant/variant.hpp> namespace godot { @@ -59,7 +60,7 @@ Vector3 Plane::get_any_perpendicular_normal() const { static const Vector3 p2 = Vector3(0, 1, 0); Vector3 p; - if (Math::abs(normal.dot(p1)) > 0.99) { // if too similar to p1 + if (Math::abs(normal.dot(p1)) > 0.99f) { // if too similar to p1 p = p2; // use p2 } else { p = p1; // use p1 @@ -89,7 +90,7 @@ bool Plane::intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r *r_result = ((vec3_cross(normal1, normal2) * p_plane0.d) + (vec3_cross(normal2, normal0) * p_plane1.d) + (vec3_cross(normal0, normal1) * p_plane2.d)) / - denom; + denom; } return true; @@ -107,7 +108,7 @@ bool Plane::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 real_t dist = (normal.dot(p_from) - d) / den; //printf("dist is %i\n",dist); - if (dist > CMP_EPSILON) { //this is a ray, before the emitting pos (p_from) doesn't exist + if (dist > (real_t)CMP_EPSILON) { //this is a ray, before the emitting pos (p_from) doesn't exist return false; } @@ -130,7 +131,7 @@ bool Plane::intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vec real_t dist = (normal.dot(p_begin) - d) / den; //printf("dist is %i\n",dist); - if (dist < -CMP_EPSILON || dist > (1.0 + CMP_EPSILON)) { + if (dist < (real_t)-CMP_EPSILON || dist > (1.0f + (real_t)CMP_EPSILON)) { return false; } @@ -140,6 +141,33 @@ bool Plane::intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vec return true; } +Variant Plane::intersect_3_bind(const Plane &p_plane1, const Plane &p_plane2) const { + Vector3 inters; + if (intersect_3(p_plane1, p_plane2, &inters)) { + return inters; + } else { + return Variant(); + } +} + +Variant Plane::intersects_ray_bind(const Vector3 &p_from, const Vector3 &p_dir) const { + Vector3 inters; + if (intersects_ray(p_from, p_dir, &inters)) { + return inters; + } else { + return Variant(); + } +} + +Variant Plane::intersects_segment_bind(const Vector3 &p_begin, const Vector3 &p_end) const { + Vector3 inters; + if (intersects_segment(p_begin, p_end, &inters)) { + return inters; + } else { + return Variant(); + } +} + /* misc */ bool Plane::is_equal_approx_any_side(const Plane &p_plane) const { @@ -151,7 +179,7 @@ bool Plane::is_equal_approx(const Plane &p_plane) const { } Plane::operator String() const { - return normal.operator String() + ", " + String::num(d, 3); + return "[N: " + normal.operator String() + ", D: " + String::num_real(d, false) + "]"; } } // namespace godot |