9 #ifndef Navigation_WorkingMemory_H
10 #define Navigation_WorkingMemory_H
21 static const BufferIndex BufferIndex_Count = 13;
23 class AStarTraversalContext;
24 class PathRefinerContext;
25 class PathClamperContext;
26 class NavDataChangeIndexInGrid;
27 class SpatializedPointCollectorContext;
28 class ChannelArrayComputer;
29 class DynamicNavMeshContext;
30 class QueryDynamicOutput;
38 struct MyLimitHandler : public MemoryHeap::LimitHandler
40 virtual ~MyLimitHandler() {}
41 virtual bool OnExceedLimit(MemoryHeap* , UPInt ) {
return false; };
42 virtual void OnFreeSegment(MemoryHeap* , UPInt ) { };
47 WorkingBuffer() : m_memory(
KY_NULL), m_memorySize(0), m_inUse(false) {}
58 WorkingMemory(
KyUInt32 memoryLimitSize = 4 * 1024 * 1024 ,
KyUInt32 granularityOfBufferResize = 5 * 1024);
62 void InitMemoryHeap(
KyUInt32 memoryLimitSize);
64 void SetNewLimit(
KyUInt32 memoryLimitSize);
66 void* ResizeBuffer(BufferIndex bufferIdx,
KyUInt32 newMinByteSize = 0);
68 void ReleaseAllMemoryBuffer();
69 void ReleaseUnusedMemoryBuffer();
70 void ReleaseMemory(
void* memory)
73 KY_HEAP_FREE(m_memoryHeap, memory);
76 void InitBuffersToNull();
78 BufferIndex TakeUsageOfFirstUnusedBufferIdx();
79 void ReleaseBuffer(BufferIndex bufferIdx);
81 void* GetBuffer(BufferIndex bufferIdx)
const;
82 KyUInt32 GetBufferSize(BufferIndex bufferIdx)
const;
84 KyUInt32 GetTotalAllocatedSize()
const;
87 AStarTraversalContext* GetOrCreateAStarTraversalContext();
88 PathRefinerContext* GetOrCreatePathRefinerContext();
89 PathClamperContext* GetOrCreatePathClamperContext();
90 NavDataChangeIndexInGrid* GetOrCreateNavDataChangeIndexInGrid();
91 ChannelArrayComputer* GetOrCreateChannelArrayComputer();
92 DynamicNavMeshContext* GetOrCreateDynamicNavMeshContext();
93 SpatializedPointCollectorContext* GetOrCreateSpatializedPointCollectorContext();
95 void CreateAllPathfinderContexts();
96 void CreateChannelArrayComputer();
97 void CreateDynamicNavMeshContext();
98 void CreateSpatializedPointCollectorContext();
100 MemoryHeap* m_memoryHeap;
101 MyLimitHandler m_myLimitHandler;
102 KyUInt32 m_granularityOfBufferResize;
103 WorkingBuffer m_workingBuffer[BufferIndex_Count];
106 AStarTraversalContext* m_astarContext;
107 PathRefinerContext* m_refinerContext;
108 PathClamperContext* m_clamperContext;
109 NavDataChangeIndexInGrid* m_navDataChangeIndexInGrid;
110 ChannelArrayComputer* m_channelArrayComputer;
112 SpatializedPointCollectorContext* m_collectorContext;
114 DynamicNavMeshContext* m_dynamicNavMeshContext;
116 Ptr<QueryDynamicOutput> m_queryDynamicOutput;
119 KY_INLINE
void WorkingMemory::ReleaseBuffer(BufferIndex bufferIdx)
121 KY_ASSERT(bufferIdx < BufferIndex_Count);
122 m_workingBuffer[bufferIdx].m_inUse =
false;
124 KY_INLINE
void* WorkingMemory::GetBuffer(BufferIndex bufferIdx)
const
126 KY_ASSERT(bufferIdx < BufferIndex_Count);
127 return m_workingBuffer[bufferIdx].m_memory;
130 KY_INLINE
KyUInt32 WorkingMemory::GetBufferSize(BufferIndex bufferIdx)
const
132 KY_ASSERT(bufferIdx < BufferIndex_Count);
133 return m_workingBuffer[bufferIdx].m_memorySize;
138 KY_INLINE AStarTraversalContext* WorkingMemory::GetOrCreateAStarTraversalContext()
141 CreateAllPathfinderContexts();
142 return m_astarContext;
144 KY_INLINE PathRefinerContext* WorkingMemory::GetOrCreatePathRefinerContext()
146 if (m_refinerContext ==
KY_NULL)
147 CreateAllPathfinderContexts();
148 return m_refinerContext;
150 KY_INLINE PathClamperContext* WorkingMemory::GetOrCreatePathClamperContext()
152 if (m_clamperContext ==
KY_NULL)
153 CreateAllPathfinderContexts();
154 return m_clamperContext;
156 KY_INLINE NavDataChangeIndexInGrid* WorkingMemory::GetOrCreateNavDataChangeIndexInGrid()
158 if (m_navDataChangeIndexInGrid ==
KY_NULL)
159 CreateAllPathfinderContexts();
160 return m_navDataChangeIndexInGrid;
162 KY_INLINE ChannelArrayComputer* WorkingMemory::GetOrCreateChannelArrayComputer()
164 if (m_channelArrayComputer ==
KY_NULL)
165 CreateChannelArrayComputer();
166 return m_channelArrayComputer;
168 KY_INLINE DynamicNavMeshContext* WorkingMemory::GetOrCreateDynamicNavMeshContext()
170 if (m_dynamicNavMeshContext ==
KY_NULL)
171 CreateDynamicNavMeshContext();
172 return m_dynamicNavMeshContext;
174 KY_INLINE SpatializedPointCollectorContext* WorkingMemory::GetOrCreateSpatializedPointCollectorContext()
176 if (m_collectorContext ==
KY_NULL)
177 CreateSpatializedPointCollectorContext();
178 return m_collectorContext;
183 #endif //Navigation_NavMeshQueryBuffer_H
#define KY_NULL
Null value.
Definition: types.h:247
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:387
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
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226