2025-09-26 12:00:59 +00:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using Godot;
|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace Rokojori
|
|
|
|
{
|
2025-09-28 08:42:28 +00:00
|
|
|
public class QuadTreeWalker<T,D>:TreeWalker<QuadTreeNode<T,D>>
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
2025-09-28 08:42:28 +00:00
|
|
|
public override QuadTreeNode<T,D> Parent( QuadTreeNode<T,D> node )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
2025-09-28 08:42:28 +00:00
|
|
|
if ( node is QuadTree<T,D> )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
var cell = node as QuadTreeCell<T,D>;
|
2025-09-26 12:00:59 +00:00
|
|
|
|
|
|
|
return cell.isRoot ? cell.tree : cell.parent;
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
public override int NumChildren( QuadTreeNode<T,D> node )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
2025-09-28 08:42:28 +00:00
|
|
|
if ( node is QuadTree<T,D> tree )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
|
|
|
return tree.rootCells.Count;
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
var cell = node as QuadTreeCell<T,D>;
|
2025-09-26 12:00:59 +00:00
|
|
|
|
|
|
|
return cell.numCells;
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
public override QuadTreeNode<T,D> ChildAt( QuadTreeNode<T,D> node, int index )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
|
|
|
if ( index < 0 || index >= NumChildren( node ) )
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
if ( node is QuadTree<T,D> tree )
|
2025-09-26 12:00:59 +00:00
|
|
|
{
|
|
|
|
return tree.rootCells[ index ];
|
|
|
|
}
|
|
|
|
|
2025-09-28 08:42:28 +00:00
|
|
|
var cell = node as QuadTreeCell<T,D>;
|
2025-09-26 12:00:59 +00:00
|
|
|
|
|
|
|
return cell.cells[ index ];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|