rj-action-library/Runtime/Structures/Spatial/QuadTree/QuadTreeWalker.cs

53 lines
1.0 KiB
C#
Raw Normal View History

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 ];
}
}
}