diff options
| author | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-01-12 17:58:42 +0100 |
|---|---|---|
| committer | A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> | 2024-01-12 17:58:42 +0100 |
| commit | b4191bf8f64f984f469dc4fcef0c0f23cf6cf226 (patch) | |
| tree | 617c5bdba9649f80d65f8ac5762ed178eec30bd9 | |
| parent | 26b1fd0d842fa3c2f090ead47e8ea7cd2d6515e1 (diff) | |
| download | redot-engine-b4191bf8f64f984f469dc4fcef0c0f23cf6cf226.tar.gz | |
[Core] Fix `AABB.encloses` failing on shared upper bound
This differs from `Rect2(i)` and was fixed for those classes in the past
| -rw-r--r-- | core/math/aabb.h | 6 | ||||
| -rw-r--r-- | tests/core/math/test_aabb.h | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/core/math/aabb.h b/core/math/aabb.h index 859810df37..cea845bf7c 100644 --- a/core/math/aabb.h +++ b/core/math/aabb.h @@ -200,11 +200,11 @@ inline bool AABB::encloses(const AABB &p_aabb) const { return ( (src_min.x <= dst_min.x) && - (src_max.x > dst_max.x) && + (src_max.x >= dst_max.x) && (src_min.y <= dst_min.y) && - (src_max.y > dst_max.y) && + (src_max.y >= dst_max.y) && (src_min.z <= dst_min.z) && - (src_max.z > dst_max.z)); + (src_max.z >= dst_max.z)); } Vector3 AABB::get_support(const Vector3 &p_normal) const { diff --git a/tests/core/math/test_aabb.h b/tests/core/math/test_aabb.h index d3560ff6b6..b9f84cca24 100644 --- a/tests/core/math/test_aabb.h +++ b/tests/core/math/test_aabb.h @@ -228,11 +228,20 @@ TEST_CASE("[AABB] Merging") { TEST_CASE("[AABB] Encloses") { const AABB aabb_big = AABB(Vector3(-1.5, 2, -2.5), Vector3(4, 5, 6)); + CHECK_MESSAGE( + aabb_big.encloses(aabb_big), + "encloses() with itself should return the expected result."); + AABB aabb_small = AABB(Vector3(-1.5, 2, -2.5), Vector3(1, 1, 1)); CHECK_MESSAGE( aabb_big.encloses(aabb_small), "encloses() with fully contained AABB (touching the edge) should return the expected result."); + aabb_small = AABB(Vector3(1.5, 6, 2.5), Vector3(1, 1, 1)); + CHECK_MESSAGE( + aabb_big.encloses(aabb_small), + "encloses() with fully contained AABB (touching the edge) should return the expected result."); + aabb_small = AABB(Vector3(0.5, 1.5, -2), Vector3(1, 1, 1)); CHECK_MESSAGE( !aabb_big.encloses(aabb_small), |
