quad tree improvements

This commit is contained in:
2016-12-27 06:50:31 +07:00
parent 8f997be60d
commit 1c0a66cd01

View File

@@ -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> node_pool, IsoIPool<Item> item_pool) {
for ( int i = 0, e = Nodes.Length; i < e; ++i ) {
var node = Nodes[i];