Explorar el Código

[Core] Fix `AABB.encloses` failing on shared upper bound

This differs from `Rect2(i)` and was fixed for those classes in the past
A Thousand Ships hace 1 año
padre
commit
b4191bf8f6
Se han modificado 2 ficheros con 12 adiciones y 3 borrados
  1. 3 3
      core/math/aabb.h
  2. 9 0
      tests/core/math/test_aabb.h

+ 3 - 3
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 {

+ 9 - 0
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),