8 #ifndef Navigation_NavDataChangeIndexInGrid_H
9 #define Navigation_NavDataChangeIndexInGrid_H
17 class AstarNodeIndexInGrid;
20 class NavDataChangeIndexInGrid
25 struct CellPosNavDataIdx
27 KY_INLINE
bool IsValid()
const {
return m_navDataChangeIdx != 0; }
32 NavDataChangeIndexInGrid() : m_currentOffsetFromBuffer(0), m_navGraphChangeIdx(0) {}
34 NavDataChangeIndexInGrid(WorkingMemory* workingMemory,
const CellBox& cellBox) :
35 m_navGraphChangeIdx(0), m_abstractGraphChangeIdx(0), m_cellBox(cellBox)
37 m_workingMemContainerBase.Init(workingMemory);
38 m_currentOffsetFromBuffer = 0;
42 ~NavDataChangeIndexInGrid() { ReleaseWorkingMemoryBuffer(); }
44 void Init(WorkingMemory* workingMemory,
const CellBox& cellBox)
46 m_workingMemContainerBase.Init(workingMemory);
48 m_currentOffsetFromBuffer = 0;
49 m_navGraphChangeIdx = 0;
50 m_abstractGraphChangeIdx = 0;
54 void RetrieveAllIndices(AstarNodeIndexInGrid& astarNodeIndexInGrid);
55 void RetrieveAllIndicesFromDatabase(Database* database);
57 void ReleaseWorkingMemoryBuffer();
59 KyUInt32 GetAvailableSizeInBytes()
const;
61 bool IsEnoughPlaceForAllocation(
KyUInt32 sizeInBytes);
67 void* AllocateInBufferAndMemsetTo0(
KyUInt32 sizeOfOneElementInBytes,
KyUInt32 numberOfElements);
69 CellPosNavDataIdx* AllocateCellPosNavDataIdx(
KyUInt32 numberOfCell);
70 CellPosNavDataIdx* GetCellPosNavDataIdx(
const CellPos& cellPos);
72 bool IsInitialized()
const {
return m_workingMemContainerBase.IsInitialized(); }
75 WorkingMemContainerBase m_workingMemContainerBase;
82 KY_INLINE
void NavDataChangeIndexInGrid::ReleaseWorkingMemoryBuffer() { m_workingMemContainerBase.ReleaseBuffer(); }
84 KY_INLINE
KyUInt32 NavDataChangeIndexInGrid::GetAvailableSizeInBytes()
const {
return m_workingMemContainerBase.GetBufferSize() - m_currentOffsetFromBuffer; }
86 KY_INLINE
bool NavDataChangeIndexInGrid::IsEnoughPlaceForAllocation(
KyUInt32 sizeInBytes)
88 while (GetAvailableSizeInBytes() < sizeInBytes)
90 if (TryToResize() ==
false)
97 KY_INLINE NavDataChangeIndexInGrid::CellPosNavDataIdx* NavDataChangeIndexInGrid::AllocateCellPosNavDataIdx(
KyUInt32 numberOfCell)
99 return (CellPosNavDataIdx*)AllocateInBufferAndMemsetTo0(
sizeof(CellPosNavDataIdx), numberOfCell);
102 KY_INLINE NavDataChangeIndexInGrid::CellPosNavDataIdx* NavDataChangeIndexInGrid::GetCellPosNavDataIdx(
const CellPos& cellPos)
104 CellPosNavDataIdx* memoryStartForGrid = (CellPosNavDataIdx*)(m_workingMemContainerBase.GetBuffer());
105 return memoryStartForGrid + m_cellBox.GetRowMajorIndex(cellPos);
111 #endif //Navigation_NavDataChangeIndexInGrid_H
Box2i CellBox
A type that represents a bounding box around cells in a 2D grid.
Definition: navmeshtypes.h:34
Vec2i CellPos
A type that represents the position of a cell within a 2D grid.
Definition: navmeshtypes.h:33
PathFinderAbstractGraphTraversalMode
Enumerates the possible way of dealing with AbstractGraphs.
Definition: pathfinderabstractgraphtraversalmode.h:16
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36