Merge pull request #15091 from poke1024/fix-rect2-distance-to

Fix Rect2::distance_to() not returning 0
This commit is contained in:
Noshyaar 2018-01-01 18:37:46 +07:00 committed by GitHub
commit 8dcc28254c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -303,22 +303,31 @@ struct Rect2 {
inline real_t distance_to(const Vector2 &p_point) const { inline real_t distance_to(const Vector2 &p_point) const {
real_t dist = 1e20; real_t dist;
bool inside = true;
if (p_point.x < position.x) { if (p_point.x < position.x) {
dist = MIN(dist, position.x - p_point.x); real_t d = position.x - p_point.x;
dist = inside ? d : MIN(dist, d);
inside = false;
} }
if (p_point.y < position.y) { 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)) { 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)) { 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; return 0;
else else
return dist; return dist;