Recast Navigation  1.0.35
DetourTileCache.h
Go to the documentation of this file.
1 #ifndef DETOURTILECACHE_H
2 #define DETOURTILECACHE_H
3 
4 #include "SharedConfig.h"
5 #include "DetourStatus.h"
6 
7 typedef unsigned int dtObstacleRef;
8 
9 typedef unsigned int dtCompressedTileRef;
10 
13 {
15 };
16 
18 {
19  unsigned int salt;
21  unsigned char* compressed;
23  unsigned char* data;
24  int dataSize;
25  unsigned int flags;
27 };
28 
30 {
35 };
36 
37 static const int DT_MAX_TOUCHED_TILES = 8;
39 {
40  float pos[3], radius, height;
43  unsigned short salt;
44  unsigned char state;
45  unsigned char ntouched;
46  unsigned char npending;
48 };
49 
51 {
52  float orig[3];
53  float cs, ch;
54  int width, height;
59  int maxTiles;
61 };
62 
64 {
66 
67  virtual void process(struct dtNavMeshCreateParams* params,
68  navAreaMask* polyAreas) = 0;
69 };
70 
71 
73 {
74 public:
75  dtTileCache();
76  ~dtTileCache();
77 
78  struct dtTileCacheAlloc* getAlloc() { return m_talloc; }
79  struct dtTileCacheCompressor* getCompressor() { return m_tcomp; }
80  const dtTileCacheParams* getParams() const { return &m_params; }
81 
82  inline int getTileCount() const { return m_params.maxTiles; }
83  inline const dtCompressedTile* getTile(const int i) const { return &m_tiles[i]; }
84 
85  inline int getObstacleCount() const { return m_params.maxObstacles; }
86  inline const dtTileCacheObstacle* getObstacle(const int i) const { return &m_obstacles[i]; }
87 
89 
91 
92  dtStatus init(const dtTileCacheParams* params,
93  struct dtTileCacheAlloc* talloc,
94  struct dtTileCacheCompressor* tcomp,
95  struct dtTileCacheMeshProcess* tmproc);
96 
97  int getTilesAt(const int tx, const int ty, dtCompressedTileRef* tiles, const int maxTiles) const;
98 
99  dtCompressedTile* getTileAt(const int tx, const int ty, const int tlayer);
102 
103  dtStatus addTile(unsigned char* data, const int dataSize, unsigned char flags, dtCompressedTileRef* result);
104 
105  dtStatus removeTile(dtCompressedTileRef ref, unsigned char** data, int* dataSize);
106 
107  dtStatus addObstacle(const float* pos, const float radius, const float height, dtObstacleRef* result);
109 
110  dtStatus queryTiles(const float* bmin, const float* bmax,
111  dtCompressedTileRef* results, int* resultCount, const int maxResults) const;
112 
113  dtStatus update(const float /*dt*/, class dtNavMesh* navmesh);
114 
115  dtStatus buildNavMeshTilesAt(const int tx, const int ty, class dtNavMesh* navmesh);
116 
117  dtStatus buildNavMeshTile(const dtCompressedTileRef ref, class dtNavMesh* navmesh);
118 
119  void calcTightTileBounds(const struct dtTileCacheLayerHeader* header, float* bmin, float* bmax) const;
120 
121  void getObstacleBounds(const struct dtTileCacheObstacle* ob, float* bmin, float* bmax) const;
122 
123 
125  inline dtCompressedTileRef encodeTileId(unsigned int salt, unsigned int it) const
126  {
127  return ((dtCompressedTileRef)salt << m_tileBits) | (dtCompressedTileRef)it;
128  }
129 
131  inline unsigned int decodeTileIdSalt(dtCompressedTileRef ref) const
132  {
133  const dtCompressedTileRef saltMask = ((dtCompressedTileRef)1 << m_saltBits) - 1;
134  return (unsigned int)((ref >> m_tileBits) & saltMask);
135  }
136 
138  inline unsigned int decodeTileIdTile(dtCompressedTileRef ref) const
139  {
140  const dtCompressedTileRef tileMask = ((dtCompressedTileRef)1 << m_tileBits) - 1;
141  return (unsigned int)(ref & tileMask);
142  }
143 
145  inline dtObstacleRef encodeObstacleId(unsigned int salt, unsigned int it) const
146  {
147  return ((dtObstacleRef)salt << 16) | (dtObstacleRef)it;
148  }
149 
151  inline unsigned int decodeObstacleIdSalt(dtObstacleRef ref) const
152  {
153  const dtObstacleRef saltMask = ((dtObstacleRef)1 << 16) - 1;
154  return (unsigned int)((ref >> 16) & saltMask);
155  }
156 
158  inline unsigned int decodeObstacleIdObstacle(dtObstacleRef ref) const
159  {
160  const dtObstacleRef tileMask = ((dtObstacleRef)1 << 16) - 1;
161  return (unsigned int)(ref & tileMask);
162  }
163 
164 
165 private:
166 
167  enum ObstacleRequestAction
168  {
169  REQUEST_ADD,
170  REQUEST_REMOVE,
171  };
172 
173  struct ObstacleRequest
174  {
175  int action;
176  dtObstacleRef ref;
177  };
178 
179  int m_tileLutSize;
180  int m_tileLutMask;
181 
182  dtCompressedTile** m_posLookup;
183  dtCompressedTile* m_nextFreeTile;
184  dtCompressedTile* m_tiles;
185 
186  unsigned int m_saltBits;
187  unsigned int m_tileBits;
188 
189  dtTileCacheParams m_params;
190 
191  dtTileCacheAlloc* m_talloc;
192  dtTileCacheCompressor* m_tcomp;
193  dtTileCacheMeshProcess* m_tmproc;
194 
195  dtTileCacheObstacle* m_obstacles;
196  dtTileCacheObstacle* m_nextFreeObstacle;
197 
198  static const int MAX_REQUESTS = 64;
199  ObstacleRequest m_reqs[MAX_REQUESTS];
200  int m_nreqs;
201 
202  static const int MAX_UPDATE = 64;
203  dtCompressedTileRef m_update[MAX_UPDATE];
204  int m_nupdate;
205 
206 };
207 
209 void dtFreeTileCache(dtTileCache* tc);
210 
211 #endif
float orig[3]
Definition: DetourTileCache.h:52
int getTilesAt(const int tx, const int ty, dtCompressedTileRef *tiles, const int maxTiles) const
Definition: DetourTileCache.cpp:172
dtStatus removeTile(dtCompressedTileRef ref, unsigned char **data, int *dataSize)
Definition: DetourTileCache.cpp:287
Definition: DetourTileCache.h:50
dtStatus queryTiles(const float *bmin, const float *bmax, dtCompressedTileRef *results, int *resultCount, const int maxResults) const
Definition: DetourTileCache.cpp:402
dtObstacleRef encodeObstacleId(unsigned int salt, unsigned int it) const
Encodes an obstacle id.
Definition: DetourTileCache.h:145
int getObstacleCount() const
Definition: DetourTileCache.h:85
float pos[3]
Definition: DetourTileCache.h:40
Definition: DetourTileCacheBuilder.h:79
float ch
Definition: DetourTileCache.h:53
int compressedSize
Definition: DetourTileCache.h:22
dtStatus addTile(unsigned char *data, const int dataSize, unsigned char flags, dtCompressedTileRef *result)
Definition: DetourTileCache.cpp:241
Represents the source data used to build an navigation mesh tile.
Definition: DetourNavMeshBuilder.h:27
Definition: DetourTileCacheBuilder.h:33
dtCompressedTile * getTileAt(const int tx, const int ty, const int tlayer)
Definition: DetourTileCache.cpp:194
float cs
Definition: DetourTileCache.h:53
Definition: DetourTileCache.h:63
Definition: DetourTileCache.h:72
float radius
Definition: DetourTileCache.h:40
const dtTileCacheObstacle * getObstacleByRef(dtObstacleRef ref)
Definition: DetourTileCache.cpp:227
dtStatus addObstacle(const float *pos, const float radius, const float height, dtObstacleRef *result)
Definition: DetourTileCache.cpp:353
Definition: DetourTileCache.h:17
unsigned char * data
Definition: DetourTileCache.h:23
int maxObstacles
Definition: DetourTileCache.h:60
unsigned short salt
Definition: DetourTileCache.h:43
unsigned int dtStatus
Definition: DetourStatus.h:22
void dtFreeTileCache(dtTileCache *tc)
Definition: DetourTileCache.cpp:19
const dtCompressedTile * getTile(const int i) const
Definition: DetourTileCache.h:83
struct dtTileCacheCompressor * getCompressor()
Definition: DetourTileCache.h:79
unsigned int salt
Counter describing modifications to the tile.
Definition: DetourTileCache.h:19
dtObstacleRef getObstacleRef(const dtTileCacheObstacle *obmin) const
Definition: DetourTileCache.cpp:220
unsigned int decodeObstacleIdObstacle(dtObstacleRef ref) const
Decodes an obstacle id.
Definition: DetourTileCache.h:158
A navigation mesh based on tiles of convex polygons.
Definition: DetourNavMesh.h:328
struct dtTileCacheAlloc * getAlloc()
Definition: DetourTileCache.h:78
const dtTileCacheParams * getParams() const
Definition: DetourTileCache.h:80
Definition: DetourTileCache.h:32
dtStatus init(const dtTileCacheParams *params, struct dtTileCacheAlloc *talloc, struct dtTileCacheCompressor *tcomp, struct dtTileCacheMeshProcess *tmproc)
Definition: DetourTileCache.cpp:117
Navmesh owns the tile memory and should free it.
Definition: DetourTileCache.h:14
unsigned int dtObstacleRef
Definition: DetourTileCache.h:7
dtCompressedTileRef pending[DT_MAX_TOUCHED_TILES]
Definition: DetourTileCache.h:42
dtCompressedTileFlags
Flags for addTile.
Definition: DetourTileCache.h:12
dtTileCacheObstacle * next
Definition: DetourTileCache.h:47
dtCompressedTileRef encodeTileId(unsigned int salt, unsigned int it) const
Encodes a tile id.
Definition: DetourTileCache.h:125
dtCompressedTileRef touched[DT_MAX_TOUCHED_TILES]
Definition: DetourTileCache.h:41
int width
Definition: DetourTileCache.h:54
Definition: DetourTileCache.h:31
unsigned int decodeTileIdTile(dtCompressedTileRef ref) const
Decodes a tile id.
Definition: DetourTileCache.h:138
int getTileCount() const
Definition: DetourTileCache.h:82
ObstacleState
Definition: DetourTileCache.h:29
void calcTightTileBounds(const struct dtTileCacheLayerHeader *header, float *bmin, float *bmax) const
Definition: DetourTileCache.cpp:684
Definition: DetourTileCache.h:33
virtual void process(struct dtNavMeshCreateParams *params, navAreaMask *polyAreas)=0
unsigned int decodeObstacleIdSalt(dtObstacleRef ref) const
Decodes an obstacle salt.
Definition: DetourTileCache.h:151
float height
Definition: DetourTileCache.h:40
dtTileCache * dtAllocTileCache()
Definition: DetourTileCache.cpp:12
float walkableHeight
Definition: DetourTileCache.h:55
float maxSimplificationError
Definition: DetourTileCache.h:58
dtCompressedTile * next
Definition: DetourTileCache.h:26
static const int DT_MAX_TOUCHED_TILES
Definition: DetourTileCache.h:37
const dtTileCacheObstacle * getObstacle(const int i) const
Definition: DetourTileCache.h:86
dtStatus buildNavMeshTilesAt(const int tx, const int ty, class dtNavMesh *navmesh)
Definition: DetourTileCache.cpp:559
unsigned char npending
Definition: DetourTileCache.h:46
unsigned char state
Definition: DetourTileCache.h:44
unsigned int flags
Definition: DetourTileCache.h:25
~dtTileCache()
Definition: DetourTileCache.cpp:82
struct dtTileCacheLayerHeader * header
Definition: DetourTileCache.h:20
unsigned int decodeTileIdSalt(dtCompressedTileRef ref) const
Decodes a tile salt.
Definition: DetourTileCache.h:131
int height
Definition: DetourTileCache.h:54
dtStatus update(const float, class dtNavMesh *navmesh)
Definition: DetourTileCache.cpp:443
float walkableRadius
Definition: DetourTileCache.h:56
dtCompressedTileRef getTileRef(const dtCompressedTile *tile) const
Definition: DetourTileCache.cpp:213
Definition: DetourTileCache.h:34
unsigned int dtCompressedTileRef
Definition: DetourTileCache.h:9
unsigned char * compressed
Definition: DetourTileCache.h:21
float walkableClimb
Definition: DetourTileCache.h:57
dtStatus removeObstacle(const dtObstacleRef ref)
Definition: DetourTileCache.cpp:387
Definition: DetourTileCache.h:38
unsigned char ntouched
Definition: DetourTileCache.h:45
int maxTiles
Definition: DetourTileCache.h:59
virtual ~dtTileCacheMeshProcess()
Definition: DetourTileCache.h:65
const dtCompressedTile * getTileByRef(dtCompressedTileRef ref) const
Definition: DetourTileCache.cpp:102
dtStatus buildNavMeshTile(const dtCompressedTileRef ref, class dtNavMesh *navmesh)
Definition: DetourTileCache.cpp:575
dtTileCache()
Definition: DetourTileCache.cpp:63
void getObstacleBounds(const struct dtTileCacheObstacle *ob, float *bmin, float *bmax) const
Definition: DetourTileCache.cpp:695
int dataSize
Definition: DetourTileCache.h:24
Definition: DetourTileCacheBuilder.h:98