diff --git a/Assets/IsoTools/Scripts/Internal/IsoQuadTree.cs b/Assets/IsoTools/Scripts/Internal/IsoQuadTree.cs index 9fc2d25..9794720 100644 --- a/Assets/IsoTools/Scripts/Internal/IsoQuadTree.cs +++ b/Assets/IsoTools/Scripts/Internal/IsoQuadTree.cs @@ -89,6 +89,7 @@ namespace IsoTools.Internal { if ( node == null ) { if ( NodeBounds[i].Contains(bounds) ) { Nodes[i] = node = node_pool.Take().Init(this, NodeBounds[i]); + TryMoveItemsToNode(node); if ( node.AddItem(bounds, content, out item, node_pool, item_pool) ) { return true; } @@ -163,6 +164,19 @@ namespace IsoTools.Internal { return this; } + void TryMoveItemsToNode(Node node) { + for ( int i = 0; i < Items.Count; ) { + var item = Items[i]; + if ( node.SelfBounds.Contains(item.Bounds) ) { + Items.Remove(item); + node.Items.Add(item); + item.Owner = node; + } else { + ++i; + } + } + } + void ClearNodes(IsoIPool node_pool, IsoIPool item_pool) { for ( int i = 0, e = Nodes.Length; i < e; ++i ) { var node = Nodes[i];