21 #ifndef __CEL_NAVMESH__ 22 #define __CEL_NAVMESH__ 25 #include <csgeom/obb.h> 26 #include <csgeom/plane3.h> 27 #include <csgeom/tri.h> 28 #include <csgeom/vector3.h> 30 #include <cstool/csapplicationframework.h> 31 #include <csutil/list.h> 32 #include <csutil/ref.h> 33 #include <csutil/scf_implementation.h> 34 #include <csutil/threadmanager.h> 35 #include <iengine/mesh.h> 36 #include <iengine/movable.h> 37 #include <iengine/portal.h> 38 #include <iengine/portalcontainer.h> 39 #include <iengine/sector.h> 40 #include <igeom/trimesh.h> 41 #include <imesh/objmodel.h> 42 #include <imesh/terrain2.h> 43 #include <iutil/comp.h> 44 #include <iutil/document.h> 45 #include <iutil/objreg.h> 46 #include <iutil/vfs.h> 47 #include <tools/celnavmesh.h> 67 float verts[MAX_CONVEXVOL_PTS * 3];
77 SAMPLE_POLYAREA_GROUND,
78 SAMPLE_POLYAREA_WATER,
81 SAMPLE_POLYAREA_GRASS,
86 SAMPLE_POLYFLAGS_WALK = 0x01,
87 SAMPLE_POLYFLAGS_SWIM = 0x02,
88 SAMPLE_POLYFLAGS_DOOR = 0x04,
89 SAMPLE_POLYFLAGS_JUMP = 0x08,
90 SAMPLE_POLYFLAGS_ALL = 0xffff
104 csSimpleRenderMesh* currentMesh;
105 csZBufMode currentZBufMode;
106 csArray<csSimpleRenderMesh*>* meshes;
107 csArray<csVector3> vertices;
108 csArray<csVector4> colors;
113 virtual ~DebugDrawCS ();
114 csArray<csSimpleRenderMesh*>* GetMeshes ();
117 virtual void depthMask (
bool state);
118 virtual void texture(
bool state);
120 virtual void vertex (
const float* pos,
unsigned int color);
121 virtual void vertex (
const float x,
const float y,
const float z,
unsigned int color);
122 virtual void vertex (
const float* pos,
unsigned int color,
const float* uv);
123 virtual void vertex (
const float x,
const float y,
const float z,
unsigned int color,
const float u,
const float v);
132 class celNavMeshParams :
public scfImplementation1<celNavMeshParams, iCelNavMeshParams>
137 float agentMaxSlopeAngle;
141 float maxSimplificationError;
142 float detailSampleDist;
143 float detailSampleMaxError;
144 float distanceThreshold;
151 csVector3 polygonSearchBox;
155 celNavMeshParams (
const iCelNavMeshParams* parameters);
156 virtual ~celNavMeshParams ();
158 iCelNavMeshParams* Clone ()
const;
159 virtual void SetSuggestedValues (
float agentHeight,
float agentRadius,
float agentMaxSlopeAngle);
161 virtual float GetAgentHeight ()
const;
162 virtual void SetAgentHeight (
const float height);
163 virtual float GetAgentRadius ()
const;
164 virtual void SetAgentRadius (
const float radius);
165 virtual float GetAgentMaxSlopeAngle ()
const;
166 virtual void SetAgentMaxSlopeAngle (
const float angle);
167 virtual float GetAgentMaxClimb ()
const;
168 virtual void SetAgentMaxClimb (
const float maxClimb);
169 virtual float GetCellSize ()
const;
170 virtual void SetCellSize (
const float size);
171 virtual float GetCellHeight ()
const;
172 virtual void SetCellHeight (
const float height);
173 virtual float GetMaxSimplificationError ()
const;
174 virtual void SetMaxSimplificationError (
const float error);
175 virtual float GetDetailSampleDist ()
const;
176 virtual void SetDetailSampleDist (
const float dist);
177 virtual float GetDetailSampleMaxError ()
const;
178 virtual void SetDetailSampleMaxError (
const float error);
179 virtual int GetMaxEdgeLength ()
const;
180 virtual void SetMaxEdgeLength (
const int length);
181 virtual int GetMinRegionArea ()
const;
182 virtual void SetMinRegionArea (
const int area);
183 virtual int GetMergeRegionArea ()
const;
184 virtual void SetMergeRegionArea (
const int area);
185 virtual int GetMaxVertsPerPoly ()
const;
186 virtual void SetMaxVertsPerPoly (
const int maxVerts);
187 virtual int GetTileSize ()
const;
188 virtual void SetTileSize (
const int size);
189 virtual int GetBorderSize ()
const;
190 virtual void SetBorderSize (
const int size);
191 virtual csVector3 GetPolygonSearchBox ()
const;
192 virtual void SetPolygonSearchBox (
const csVector3 box);
208 int increasePosition;
209 static const int INCREASE_PATH_BY;
210 csRef<iSector> sector;
211 csArray<csSimpleRenderMesh*>* debugMeshes;
214 celNavMeshPath (
float* path,
int pathSize,
int maxPathSize, iSector* sector);
215 virtual ~celNavMeshPath ();
218 virtual iSector* GetSector ()
const;
219 virtual void Current (csVector3& vector)
const;
220 virtual void Next (csVector3& vector);
221 virtual void Previous (csVector3& vector);
222 virtual void GetFirst (csVector3& vector)
const;
223 virtual void GetLast (csVector3& vector)
const;
224 virtual bool HasNext ()
const;
225 virtual bool HasPrevious ()
const;
226 virtual void Invert ();
227 virtual void Restart ();
228 virtual void AddNode (csVector3 node);
229 virtual void InsertNode (
int pos, csVector3 node);
230 virtual float Length ()
const;
231 virtual int GetNodeCount ()
const;
232 virtual csArray<csSimpleRenderMesh*>* GetDebugMeshes ();
243 struct NavMeshSetHeader
251 struct NavMeshTileHeader
257 csRef<iSector> sector;
258 iObjectRegistry* objectRegistry;
259 csRef<iCelNavMeshPath> path;
263 csRef<iCelNavMeshParams> parameters;
264 csArray<csSimpleRenderMesh*>* debugMeshes;
265 csArray<csSimpleRenderMesh*>* agentDebugMeshes;
266 float boundingMin[3];
267 float boundingMax[3];
268 unsigned char navMeshDrawFlags;
269 static const int MAX_NODES;
270 static const int NAVMESHSET_MAGIC;
271 static const int NAVMESHSET_VERSION;
273 bool LoadCelNavMeshParams (iDocumentNode* mainNode);
274 bool LoadDtNavMeshParams (iDocumentNode* paramsNode,
dtNavMeshParams& params);
275 bool LoadNavMeshLegacy (iFile* file);
277 celNavMesh (iObjectRegistry* objectRegistry);
278 virtual ~celNavMesh ();
280 bool Initialize (
const iCelNavMeshParams* parameters, iSector* sector,
const float* boundingMin,
281 const float* boundingMax);
282 bool AddTile (
unsigned char* data,
int dataSize);
283 bool RemoveTile (
int x,
int y);
284 bool LoadNavMesh (iFile* file);
287 virtual iCelNavMeshPath* ShortestPath (
const csVector3& from,
const csVector3& goal,
int maxPathSize = 32);
288 virtual bool Update (
const csBox3& boundingBox);
289 virtual bool Update (
const csOBB& boundingBox);
290 virtual iSector* GetSector ()
const;
291 virtual void SetSector (iSector* sector);
292 virtual iCelNavMeshParams* GetParameters ()
const;
293 virtual csBox3 GetBoundingBox()
const;
294 virtual csArray<csPoly3D> QueryPolygons(
const csBox3& box)
const;
295 virtual bool SaveToFile (iFile* file)
const;
296 virtual csArray<csSimpleRenderMesh*>* GetDebugMeshes ();
297 virtual csArray<csSimpleRenderMesh*>* GetAgentDebugMeshes (
const csVector3& pos);
298 virtual csArray<csSimpleRenderMesh*>* GetAgentDebugMeshes (
const csVector3& pos,
int red,
int green,
299 int blue,
int alpha);
300 virtual void ResetAgentDebugMeshes ();
313 iObjectRegistry* objectRegistry;
314 csRef<iSector> currentSector;
315 csRef<iStringSet> strings;
321 unsigned char* triangleAreas;
330 static const int MAX_OFFMESH_CONNECTIONS = 256;
331 float offMeshConVerts[MAX_OFFMESH_CONNECTIONS * 3 * 2];
332 float offMeshConRads[MAX_OFFMESH_CONNECTIONS];
333 unsigned char offMeshConDirs[MAX_OFFMESH_CONNECTIONS];
334 unsigned char offMeshConAreas[MAX_OFFMESH_CONNECTIONS];
335 unsigned short offMeshConFlags[MAX_OFFMESH_CONNECTIONS];
336 int numberOfOffMeshCon;
339 static const int MAX_VOLUMES = 256;
343 csRef<iCelNavMeshParams> parameters;
344 csRef<celNavMesh> navMesh;
347 int numberOfVertices;
348 float* triangleVertices;
349 int numberOfTriangles;
350 int* triangleIndices;
351 float boundingMin[3];
352 float boundingMax[3];
354 void CleanUpSectorData ();
355 void CleanUpTileData ();
356 bool GetSectorData ();
357 unsigned char* BuildTile(
const int tx,
const int ty,
const float* bmin,
const float* bmax,
358 const rcConfig& tileConfig,
int& dataSize);
359 iObjectRegistry* GetObjectRegistry()
const {
return objectRegistry; }
363 bool CheckClipping(
const csPlane3& clipPlane,
const csBox3& bbox,
bool& result);
366 void SplitPolygon(
int indexOffset,
int numVerts, csVector3* poly, csArray<csVector3>& vertices, csArray<csTriangle>& triangles,
367 const csReversibleTransform& t, csPlane3& clipPlane,
bool clipPolygon);
372 celNavMeshBuilder (
iBase* parent);
373 virtual ~celNavMeshBuilder ();
375 bool UpdateNavMesh (celNavMesh* navMesh,
const csBox3& boundingBox);
378 virtual bool SetSector (iSector* sector);
379 THREADED_CALLABLE_DECL(celNavMeshBuilder,BuildNavMesh,csThreadReturn,THREADEDL,
false,
false);
380 virtual iCelNavMesh* LoadNavMesh (iFile* file);
381 virtual const iCelNavMeshParams* GetNavMeshParams ()
const;
382 virtual void SetNavMeshParams (
const iCelNavMeshParams* parameters);
383 virtual iSector* GetSector ()
const;
388 CS_PLUGIN_NAMESPACE_END(celNavMesh)
390 #endif // __CEL_NAVMESH__ A dynamic heightfield representing obstructed space.
unsigned int dtTileRef
A handle to a tile within a navigation mesh.
Provides an interface for optional logging and performance tracking of the Recast build process...
Specifies a configuration to use when performing Recast builds.
CS_PLUGIN_NAMESPACE_BEGIN(celNavMesh)
Defines polygon filtering and traversal costs for navigation mesh query operations.
A navigation mesh based on tiles of convex polygons.
A compact, static heightfield representing unobstructed space.
Represents a group of related contours.
Represents a polygon mesh suitable for use in building a navigation mesh.
void void Initialize(iObjectRegistry *object_reg)
float verts[MAX_CONVEXVOL_PTS *3]
Abstract debug draw interface.
Configuration parameters used to define multi-tile navigation meshes. The values are used to allocate...
Provides the ability to perform pathfinding related queries against a navigation mesh.
Contains triangle meshes that represent detailed height data associated with the polygons in its asso...