39 void DebugRender(ImDrawList* drawList, ImVec2 offset,
float scale);
105 uint numNodes = worldSize / maxSize;
107 for (
uint x = 0; x < numNodes; x++)
110 for (
uint y = 0; y < numNodes; y++)
142 else if (node->
size > size && node->
size != this->minSize)
148 const uint halfNodeSize = node->
size / 2;
222 if (node->
size == size)
224 if (node->
x == coord.
x && node->
y == coord.
y)
230 else if (node->
size > size)
288 if (node->
size == size)
290 if (node->
x == coord.
x && node->
y == coord.
y)
295 else if (node->
size > size)
370 static ImU32 colors[] =
372 IM_COL32(128, 0, 0, 128),
373 IM_COL32(0, 128, 0, 128),
374 IM_COL32(0, 0, 128, 128),
375 IM_COL32(128, 0, 128, 128),
376 IM_COL32(128, 128, 0, 128),
377 IM_COL32(0, 128, 128, 128),
384 ImVec2 min{ (float)offset.
x + node->
x * scale, (
float)offset.
y + node->
y * scale };
385 ImVec2 max{ (float)offset.
x + (node->
x + node->
size) * scale, (float)offset.
y + (node->
y + node->
size) * scale };
386 drawList->AddRectFilled(min, max, colors[
colorIndex]);
Allocates memory in chunks.
Definition arenaallocator.h:36
Math::uint2 Allocate(uint size)
allocate a region, return region
Definition occupancyquadtree.h:200
bool RecursiveDeallocate(Node *node, Math::uint2 coord, uint size)
recursively traverse tree and deallocate
Definition occupancyquadtree.h:219
Memory::ArenaAllocator< sizeof(Node) *64 > allocator
Definition occupancyquadtree.h:75
void RecursiveDebugRender(Node *node, ImDrawList *drawList, ImVec2 offset, float scale)
recursively debug render
Definition occupancyquadtree.h:368
uint minSize
Definition occupancyquadtree.h:77
Util::FixedArray< Util::FixedArray< Node > > topLevelNodes
Definition occupancyquadtree.h:76
bool IsOccupied(const Math::uint2 coord, uint size)
check if region is alloced
Definition occupancyquadtree.h:347
void DebugRender(ImDrawList *drawList, ImVec2 offset, float scale)
debug render
Definition occupancyquadtree.h:401
bool RecursiveSearch(Node *node, Math::uint2 coord, uint size)
recursively traverse tree and find if allocated
Definition occupancyquadtree.h:285
void Setup(uint worldSize, uint maxSize, uint minSize)
setup with a world size and a biggest allocation size
Definition occupancyquadtree.h:102
bool RecursiveAllocate(Node *node, uint size, Math::uint2 &outCoord)
recursively traverse tree to allocate node from tree
Definition occupancyquadtree.h:129
~OccupancyQuadTree()
destructor
Definition occupancyquadtree.h:93
OccupancyQuadTree()
constructor
Definition occupancyquadtree.h:84
void Clear()
Clear the tree.
Definition occupancyquadtree.h:326
bool Deallocate(const Math::uint2 coord, uint size)
deallocate region
Definition occupancyquadtree.h:266
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
#define n_assert(exp)
Definition debug.h:50
The occupancy quad tree implements a tree which allows for a quick search.
Definition occupancyquadtree.h:17
static uint colorIndex
Definition occupancyquadtree.h:362
Nebula's scalar datatype.
scalar x
Definition scalar.h:61
scalar y
Definition scalar.h:61
unsigned int x
Definition scalar.h:115
unsigned int y
Definition scalar.h:115
Definition occupancyquadtree.h:43
Node()
Definition occupancyquadtree.h:44
Node * bottomRight
Definition occupancyquadtree.h:58
uint size
Definition occupancyquadtree.h:61
Node * bottomLeft
Definition occupancyquadtree.h:57
Node * topLeft
Definition occupancyquadtree.h:55
uint x
Definition occupancyquadtree.h:62
bool occupied
Definition occupancyquadtree.h:59
uint y
Definition occupancyquadtree.h:62
Node * topRight
Definition occupancyquadtree.h:56
uint occupancyCounter
Definition occupancyquadtree.h:60
unsigned int uint
Definition types.h:33