UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DetourTileCache.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2// Modified version of Recast/Detour's source file
3
4//
5// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
6//
7// This software is provided 'as-is', without any express or implied
8// warranty. In no event will the authors be held liable for any damages
9// arising from the use of this software.
10// Permission is granted to anyone to use this software for any purpose,
11// including commercial applications, and to alter it and redistribute it
12// freely, subject to the following restrictions:
13// 1. The origin of this software must not be misrepresented; you must not
14// claim that you wrote the original software. If you use this software
15// in a product, an acknowledgment in the product documentation would be
16// appreciated but is not required.
17// 2. Altered source versions must be plainly marked as such, and must not be
18// misrepresented as being the original software.
19// 3. This notice may not be removed or altered from any source distribution.
20//
21
22#ifndef DETOURTILECACHE_H
23#define DETOURTILECACHE_H
24
25#include "CoreMinimal.h"
27#include "Detour/DetourStatus.h"
28
29struct dtTileCacheAlloc;
31
32typedef unsigned int dtObstacleRef;
33
34typedef unsigned int dtCompressedTileRef;
35
41
43{
44 unsigned int salt;
46 unsigned char* compressed;
48 unsigned char* data;
50 unsigned int flags;
52};
53
61
62static const int DT_MAX_TOUCHED_TILES = 8;
64{
67 dtCompressedTileRef touched[DT_MAX_TOUCHED_TILES];
68 dtCompressedTileRef pending[DT_MAX_TOUCHED_TILES];
69 unsigned short salt;
70 unsigned char state;
71 unsigned char ntouched;
72 unsigned char npending;
74};
75
97
99{
100 virtual void markAreas(struct dtTileCacheLayer* layer, const dtReal* orig, const dtReal cs, const dtReal ch) = 0;
101
102//@UE BEGIN Adding support for LWCoords.
103#if !DT_LARGE_WORLD_COORDINATES_DISABLED
104 // This function is deprecated use the version that uses dtReal
105 virtual void markAreas(struct dtTileCacheLayer* layer, const float* orig, const float cs, const float ch) final {};
106#endif // DT_LARGE_WORLD_COORDINATES_DISABLED
107//@UE END Adding support for LWCoords.
108
109 virtual void process(struct dtNavMeshCreateParams* params,
110 unsigned char* polyAreas, unsigned short* polyFlags) = 0;
111};
112
113
115{
116public:
119
120 struct dtTileCacheAlloc* getAlloc() { return m_talloc; }
121 struct dtTileCacheCompressor* getCompressor() { return m_tcomp; }
122 struct dtTileCacheMeshProcess* getProcessor() { return m_tmproc; }
123 const dtTileCacheParams* getParams() const { return &m_params; }
124
125 inline int getTileCount() const { return m_params.maxTiles; }
126 inline const dtCompressedTile* getTile(const int i) const { return &m_tiles[i]; }
127
128 inline int getObstacleCount() const { return m_params.maxObstacles; }
129 inline const dtTileCacheObstacle* getObstacle(const int i) const { return &m_obstacles[i]; }
130
132
134
136 struct dtTileCacheAlloc* talloc,
139
140 NAVMESH_API int getTilesAt(const int tx, const int ty, dtCompressedTileRef* tiles, const int maxTiles) const ;
141
142 NAVMESH_API dtCompressedTile* getTileAt(const int tx, const int ty, const int tlayer);
145
146 NAVMESH_API dtStatus addTile(unsigned char* data, const int dataSize, unsigned char flags, dtCompressedTileRef* result);
147
148 NAVMESH_API dtStatus removeTile(dtCompressedTileRef ref, unsigned char** data, int* dataSize);
149
150 NAVMESH_API dtStatus addObstacle(const dtReal* pos, const dtReal radius, const dtReal height, dtObstacleRef* result);
152
153 NAVMESH_API dtStatus queryTiles(const dtReal* bmin, const dtReal* bmax,
154 dtCompressedTileRef* results, int* resultCount, const int maxResults) const;
155
156 NAVMESH_API dtStatus update(const dtReal /*dt*/, class dtNavMesh* navmesh);
157
158 NAVMESH_API dtStatus buildNavMeshTilesAt(const int tx, const int ty, class dtNavMesh* navmesh);
159
161
162 NAVMESH_API void calcTightTileBounds(const struct dtTileCacheLayerHeader* header, dtReal* bmin, dtReal* bmax) const;
163
164 NAVMESH_API void getObstacleBounds(const struct dtTileCacheObstacle* ob, dtReal* bmin, dtReal* bmax) const;
165
166
168 inline dtCompressedTileRef encodeTileId(unsigned int salt, unsigned int it) const
169 {
170 return ((dtCompressedTileRef)salt << m_tileBits) | (dtCompressedTileRef)it;
171 }
172
174 inline unsigned int decodeTileIdSalt(dtCompressedTileRef ref) const
175 {
176 const dtCompressedTileRef saltMask = ((dtCompressedTileRef)1<<m_saltBits)-1;
177 return (unsigned int)((ref >> m_tileBits) & saltMask);
178 }
179
181 inline unsigned int decodeTileIdTile(dtCompressedTileRef ref) const
182 {
183 const dtCompressedTileRef tileMask = ((dtCompressedTileRef)1<<m_tileBits)-1;
184 return (unsigned int)(ref & tileMask);
185 }
186
188 inline dtObstacleRef encodeObstacleId(unsigned int salt, unsigned int it) const
189 {
190 return ((dtObstacleRef)salt << 16) | (dtObstacleRef)it;
191 }
192
194 inline unsigned int decodeObstacleIdSalt(dtObstacleRef ref) const
195 {
196 const dtObstacleRef saltMask = ((dtObstacleRef)1<<16)-1;
197 return (unsigned int)((ref >> 16) & saltMask);
198 }
199
201 inline unsigned int decodeObstacleIdObstacle(dtObstacleRef ref) const
202 {
203 const dtObstacleRef tileMask = ((dtObstacleRef)1<<16)-1;
204 return (unsigned int)(ref & tileMask);
205 }
206
207
208private:
209
210 enum ObstacleRequestAction
211 {
212 REQUEST_ADD,
213 REQUEST_REMOVE,
214 };
215
216 struct ObstacleRequest
217 {
218 int action;
219 dtObstacleRef ref;
220 };
221
222 int m_tileLutSize;
223 int m_tileLutMask;
224
225 dtCompressedTile** m_posLookup;
226 dtCompressedTile* m_nextFreeTile;
227 dtCompressedTile* m_tiles;
228
229 unsigned int m_saltBits;
230 unsigned int m_tileBits;
231
232 dtTileCacheParams m_params;
233
234 dtTileCacheAlloc* m_talloc;
235 dtTileCacheCompressor* m_tcomp;
236 dtTileCacheMeshProcess* m_tmproc;
237
238 dtTileCacheObstacle* m_obstacles;
239 dtTileCacheObstacle* m_nextFreeObstacle;
240
241 static const int MAX_REQUESTS = 64;
242 ObstacleRequest m_reqs[MAX_REQUESTS];
243 int m_nreqs;
244
245 static const int MAX_UPDATE = 64;
246 dtCompressedTileRef m_update[MAX_UPDATE];
247 int m_nupdate;
248
249};
250
253
254#endif
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
double dtReal
Definition DetourLargeWorldCoordinates.h:15
NAVMESH_API void dtFreeTileCache(dtTileCache *tc)
Definition DetourTileCache.cpp:45
unsigned int dtObstacleRef
Definition DetourTileCache.h:32
ObstacleState
Definition DetourTileCache.h:55
@ DT_OBSTACLE_EMPTY
Definition DetourTileCache.h:56
@ DT_OBSTACLE_PROCESSED
Definition DetourTileCache.h:58
@ DT_OBSTACLE_REMOVING
Definition DetourTileCache.h:59
@ DT_OBSTACLE_PROCESSING
Definition DetourTileCache.h:57
NAVMESH_API dtTileCache * dtAllocTileCache()
Definition DetourTileCache.cpp:38
unsigned int dtCompressedTileRef
Definition DetourTileCache.h:34
dtCompressedTileFlags
Flags for addTile.
Definition DetourTileCache.h:38
@ DT_COMPRESSEDTILE_FREE_DATA
Navmesh owns the tile memory and should free it.
Definition DetourTileCache.h:39
unsigned int dtStatus
Definition RecastGraphAStar.h:29
Definition DetourNavMesh.h:503
Definition DetourTileCache.h:115
dtObstacleRef encodeObstacleId(unsigned int salt, unsigned int it) const
Encodes an obstacle id.
Definition DetourTileCache.h:188
NAVMESH_API dtStatus queryTiles(const dtReal *bmin, const dtReal *bmax, dtCompressedTileRef *results, int *resultCount, const int maxResults) const
Definition DetourTileCache.cpp:453
const dtTileCacheParams * getParams() const
Definition DetourTileCache.h:123
struct dtTileCacheMeshProcess * getProcessor()
Definition DetourTileCache.h:122
unsigned int decodeTileIdSalt(dtCompressedTileRef ref) const
Decodes a tile salt.
Definition DetourTileCache.h:174
NAVMESH_API dtCompressedTileRef getTileRef(const dtCompressedTile *tile) const
Definition DetourTileCache.cpp:266
unsigned int decodeObstacleIdObstacle(dtObstacleRef ref) const
Decodes an obstacle id.
Definition DetourTileCache.h:201
NAVMESH_API dtStatus update(const dtReal, class dtNavMesh *navmesh)
Definition DetourTileCache.cpp:494
NAVMESH_API int getTilesAt(const int tx, const int ty, dtCompressedTileRef *tiles, const int maxTiles) const
Definition DetourTileCache.cpp:225
NAVMESH_API void calcTightTileBounds(const struct dtTileCacheLayerHeader *header, dtReal *bmin, dtReal *bmax) const
Definition DetourTileCache.cpp:792
NAVMESH_API dtStatus buildNavMeshTile(const dtCompressedTileRef ref, class dtNavMesh *navmesh)
Definition DetourTileCache.cpp:626
NAVMESH_API const dtTileCacheObstacle * getObstacleByRef(dtObstacleRef ref)
Definition DetourTileCache.cpp:280
NAVMESH_API const dtCompressedTile * getTileByRef(dtCompressedTileRef ref) const
Definition DetourTileCache.cpp:155
int getObstacleCount() const
Definition DetourTileCache.h:128
const dtCompressedTile * getTile(const int i) const
Definition DetourTileCache.h:126
dtCompressedTileRef encodeTileId(unsigned int salt, unsigned int it) const
Encodes a tile id.
Definition DetourTileCache.h:168
NAVMESH_API dtStatus removeTile(dtCompressedTileRef ref, unsigned char **data, int *dataSize)
Definition DetourTileCache.cpp:338
unsigned int decodeTileIdTile(dtCompressedTileRef ref) const
Decodes a tile id.
Definition DetourTileCache.h:181
NAVMESH_API dtStatus init(const dtTileCacheParams *params, struct dtTileCacheAlloc *talloc, struct dtTileCacheCompressor *tcomp, struct dtTileCacheMeshProcess *tmproc)
Definition DetourTileCache.cpp:170
NAVMESH_API void getObstacleBounds(const struct dtTileCacheObstacle *ob, dtReal *bmin, dtReal *bmax) const
Definition DetourTileCache.cpp:803
struct dtTileCacheAlloc * getAlloc()
Definition DetourTileCache.h:120
NAVMESH_API dtStatus addObstacle(const dtReal *pos, const dtReal radius, const dtReal height, dtObstacleRef *result)
Definition DetourTileCache.cpp:404
NAVMESH_API dtObstacleRef getObstacleRef(const dtTileCacheObstacle *obmin) const
Definition DetourTileCache.cpp:273
NAVMESH_API ~dtTileCache()
Definition DetourTileCache.cpp:135
const dtTileCacheObstacle * getObstacle(const int i) const
Definition DetourTileCache.h:129
NAVMESH_API dtStatus addTile(unsigned char *data, const int dataSize, unsigned char flags, dtCompressedTileRef *result)
Definition DetourTileCache.cpp:294
unsigned int decodeObstacleIdSalt(dtObstacleRef ref) const
Decodes an obstacle salt.
Definition DetourTileCache.h:194
struct dtTileCacheCompressor * getCompressor()
Definition DetourTileCache.h:121
NAVMESH_API dtTileCache()
Definition DetourTileCache.cpp:116
NAVMESH_API dtCompressedTile * getTileAt(const int tx, const int ty, const int tlayer)
Definition DetourTileCache.cpp:247
NAVMESH_API dtStatus buildNavMeshTilesAt(const int tx, const int ty, class dtNavMesh *navmesh)
Definition DetourTileCache.cpp:610
NAVMESH_API dtStatus removeObstacle(const dtObstacleRef ref)
Definition DetourTileCache.cpp:438
int getTileCount() const
Definition DetourTileCache.h:125
action
Definition TestServer.py:515
Definition DetourTileCache.h:43
unsigned char * data
Definition DetourTileCache.h:48
dtCompressedTile * next
Definition DetourTileCache.h:51
unsigned int flags
Definition DetourTileCache.h:50
unsigned char * compressed
Definition DetourTileCache.h:46
int compressedSize
Definition DetourTileCache.h:47
struct dtTileCacheLayerHeader * header
Definition DetourTileCache.h:45
int dataSize
Definition DetourTileCache.h:49
unsigned int salt
Counter describing modifications to the tile.
Definition DetourTileCache.h:44
Definition DetourNavMeshBuilder.h:65
Definition DetourTileCacheBuilder.h:133
Definition DetourTileCacheBuilder.h:152
Definition DetourTileCacheBuilder.h:39
Definition DetourTileCacheBuilder.h:50
Definition DetourTileCache.h:99
virtual void markAreas(struct dtTileCacheLayer *layer, const dtReal *orig, const dtReal cs, const dtReal ch)=0
virtual void process(struct dtNavMeshCreateParams *params, unsigned char *polyAreas, unsigned short *polyFlags)=0
virtual void markAreas(struct dtTileCacheLayer *layer, const float *orig, const float cs, const float ch) final
Definition DetourTileCache.h:105
Definition DetourTileCache.h:64
unsigned char ntouched
Definition DetourTileCache.h:71
dtCompressedTileRef touched[DT_MAX_TOUCHED_TILES]
Definition DetourTileCache.h:67
unsigned char state
Definition DetourTileCache.h:70
dtReal height
Definition DetourTileCache.h:66
unsigned char npending
Definition DetourTileCache.h:72
dtReal pos[3]
Definition DetourTileCache.h:65
dtReal radius
Definition DetourTileCache.h:66
dtTileCacheObstacle * next
Definition DetourTileCache.h:73
unsigned short salt
Definition DetourTileCache.h:69
dtCompressedTileRef pending[DT_MAX_TOUCHED_TILES]
Definition DetourTileCache.h:68
Definition DetourTileCache.h:77
int width
Definition DetourTileCache.h:80
dtReal orig[3]
Definition DetourTileCache.h:78
int height
Definition DetourTileCache.h:80
int maxTiles
Definition DetourTileCache.h:86
dtReal ch
Definition DetourTileCache.h:79
dtReal maxSimplificationError
Definition DetourTileCache.h:84
int regionPartitioning
Definition DetourTileCache.h:94
int maxObstacles
Definition DetourTileCache.h:87
dtReal detailSampleDist
Definition DetourTileCache.h:89
dtReal walkableRadius
Definition DetourTileCache.h:82
dtReal detailSampleMaxError
Definition DetourTileCache.h:90
dtReal cs
Definition DetourTileCache.h:79
dtReal walkableClimb
Definition DetourTileCache.h:83
int mergeRegionArea
Definition DetourTileCache.h:92
int minRegionArea
Definition DetourTileCache.h:91
dtReal walkableHeight
Definition DetourTileCache.h:81
dtReal simplificationElevationRatio
Definition DetourTileCache.h:85
int regionChunkSize
Definition DetourTileCache.h:93