From 7bff71a9f522147c8ef7bac44c1fe450f08145ba Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 27 Jun 2022 10:40:24 +0200 Subject: [PATCH] Fix Rect2::distance_to not returning 0. Was relying on comparison with 1e20 which cannot be represented as float, causing some epsilon to always be returned and compilers complaining when using -Werror. --- src/core/Rect2.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/core/Rect2.cpp b/src/core/Rect2.cpp index 7c5fe56..2b4aaaf 100644 --- a/src/core/Rect2.cpp +++ b/src/core/Rect2.cpp @@ -46,25 +46,35 @@ namespace godot { #endif real_t Rect2::distance_to(const Vector2 &p_point) const { - real_t dist = 1e20; + real_t dist = 0.0; + bool inside = true; if (p_point.x < position.x) { - dist = MIN(dist, position.x - p_point.x); + real_t d = position.x - p_point.x; + dist = d; + inside = false; } if (p_point.y < position.y) { - dist = MIN(dist, position.y - p_point.y); + real_t d = position.y - p_point.y; + dist = inside ? d : MIN(dist, d); + inside = false; } if (p_point.x >= (position.x + size.x)) { - dist = MIN(p_point.x - (position.x + size.x), dist); + real_t d = p_point.x - (position.x + size.x); + dist = inside ? d : MIN(dist, d); + inside = false; } if (p_point.y >= (position.y + size.y)) { - dist = MIN(p_point.y - (position.y + size.y), dist); + real_t d = p_point.y - (position.y + size.y); + dist = inside ? d : MIN(dist, d); + inside = false; } - if (dist == 1e20) + if (inside) { return 0; - else + } else { return dist; + } } Rect2 Rect2::clip(const Rect2 &p_rect) const { /// return a clipped rect