diff --git a/src/main/java/pl/pateman/dynamicaabbtree/AABBTreeNode.java b/src/main/java/pl/pateman/dynamicaabbtree/AABBTreeNode.java index e21c5d0..cd845b8 100644 --- a/src/main/java/pl/pateman/dynamicaabbtree/AABBTreeNode.java +++ b/src/main/java/pl/pateman/dynamicaabbtree/AABBTreeNode.java @@ -57,8 +57,11 @@ void computeAABBWithMargin(float margin) { void resetForReuse() { assignChildren(INVALID_NODE_INDEX, INVALID_NODE_INDEX); - setData(null); + aabb.setMin(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY); + aabb.setMax(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY); setParent(INVALID_NODE_INDEX); + setHeight(0); + setData(null); aabb.setMin(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY); aabb.setMax(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY); diff --git a/src/test/java/pl/pateman/dynamicaabbtree/AABBTreeTest.java b/src/test/java/pl/pateman/dynamicaabbtree/AABBTreeTest.java index 2589c70..889ff5d 100644 --- a/src/test/java/pl/pateman/dynamicaabbtree/AABBTreeTest.java +++ b/src/test/java/pl/pateman/dynamicaabbtree/AABBTreeTest.java @@ -8,6 +8,7 @@ import java.util.List; import static org.junit.Assert.*; +import static pl.pateman.dynamicaabbtree.AABBTreeNode.INVALID_NODE_INDEX; public class AABBTreeTest { @@ -237,7 +238,7 @@ public void shouldClearTheTree() { assertFalse(tree.contains(entity2)); assertTrue(tree.getFreeNodes().isEmpty()); assertTrue(tree.getNodes().isEmpty()); - assertEquals(AABBTreeNode.INVALID_NODE_INDEX, tree.getRoot()); + assertEquals(INVALID_NODE_INDEX, tree.getRoot()); } @Test @@ -367,6 +368,30 @@ public void shouldDetectRayIntersection() { assertEquals(1L, intersecting.get(0).getID()); } + @Test + public void shouldRestoreNodeToInitialStateOnReuse() { + // Given + TestEntity entity = new TestEntity(1, 0.0f, 0.0f, 1.0f, 1.0f); + AABBTreeNode node = new AABBTreeNode<>(); + + // When + node.setHeight(10); + node.setIndex(2); + node.setParent(1); + node.setData(entity); + node.assignChildren(3, 4); + + node.resetForReuse(); + + // Then + assertEquals(INVALID_NODE_INDEX, node.getLeftChild()); + assertEquals(INVALID_NODE_INDEX, node.getRightChild()); + assertEquals(new AABBf(), node.getAABB()); + assertEquals(INVALID_NODE_INDEX, node.getParent()); + assertEquals(0, node.getHeight()); + assertNull(node.getData()); + } + private AABBTree givenTree() { return new AABBTree<>(); }