From 5e79f98addeaf857bc30fc7c12d0ad809757e193 Mon Sep 17 00:00:00 2001 From: implausiblyfun Date: Sun, 19 Dec 2021 11:30:31 -0500 Subject: [PATCH] alg\floatgeom: Fix Polygon rect collision overeager singledimension overlap --- alg/floatgeom/polygon.go | 8 ++++++-- alg/floatgeom/polygon_test.go | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/alg/floatgeom/polygon.go b/alg/floatgeom/polygon.go index d5af26d1..92ccca3a 100644 --- a/alg/floatgeom/polygon.go +++ b/alg/floatgeom/polygon.go @@ -137,15 +137,19 @@ func (pg Polygon2) RectCollides(r Rect2) bool { dx2 := pg.Bounding.Max.X() dy2 := pg.Bounding.Max.Y() + overlapX := false if x > dx { if x < dx2 { - return pg.OverlappingRectCollides(r) + overlapX = true } } else { if dx < x2 { - return pg.OverlappingRectCollides(r) + overlapX = true } } + if !overlapX { + return false + } if y > dy { if y < dy2 { return pg.OverlappingRectCollides(r) diff --git a/alg/floatgeom/polygon_test.go b/alg/floatgeom/polygon_test.go index b3f9a2cf..86dd3c3b 100644 --- a/alg/floatgeom/polygon_test.go +++ b/alg/floatgeom/polygon_test.go @@ -119,6 +119,15 @@ func TestPolygon2_RectCollides(t *testing.T) { rect: NewRect2(0, 0, 2, 2), shouldCollide: true, }, + { + poly: NewPolygon2( + Point2{1.1, 1.1}, + Point2{1.1, 1.1}, + Point2{1.1, 1.1}, + ), + rect: NewRect2(0, 2, 2, 2), + shouldCollide: false, + }, } for i, tc := range tcs { if tc.poly.RectCollides(tc.rect) != tc.shouldCollide {