00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CEL_NAVMESHAPI__
00021 #define __CEL_NAVMESHAPI__
00022
00023 #include <csutil/scf.h>
00024 #include <csutil/list.h>
00025 #include <csgeom/poly3d.h>
00026
00027 class csBox3;
00028 class csOBB;
00029 class csVector3;
00030 struct csSimpleRenderMesh;
00031 struct iFile;
00032 struct iSector;
00033
00034
00035
00039 struct iCelNavMeshParams : public virtual iBase
00040 {
00046 virtual iCelNavMeshParams* Clone () const = 0;
00047
00049 virtual void SetSuggestedValues (float agentHeight, float agentRadius, float agentMaxSlopeAngle) = 0;
00050
00052 virtual float GetAgentHeight () const = 0;
00054 virtual void SetAgentHeight (const float height) = 0;
00055
00057 virtual float GetAgentRadius () const = 0;
00059 virtual void SetAgentRadius (const float radius) = 0;
00060
00062 virtual float GetAgentMaxSlopeAngle () const = 0;
00064 virtual void SetAgentMaxSlopeAngle (const float angle) = 0;
00065
00067 virtual float GetAgentMaxClimb () const = 0;
00069 virtual void SetAgentMaxClimb (const float maxClimb) = 0;
00070
00072 virtual float GetCellSize () const = 0;
00074 virtual void SetCellSize (const float size) = 0;
00075
00077 virtual float GetCellHeight () const = 0;
00079 virtual void SetCellHeight (const float height) = 0;
00080
00082 virtual float GetMaxSimplificationError () const = 0;
00084 virtual void SetMaxSimplificationError (const float error) = 0;
00085
00087 virtual float GetDetailSampleDist () const = 0;
00089 virtual void SetDetailSampleDist (const float dist) = 0;
00090
00092 virtual float GetDetailSampleMaxError () const = 0;
00094 virtual void SetDetailSampleMaxError (const float error) = 0;
00095
00097 virtual int GetMaxEdgeLength () const = 0;
00099 virtual void SetMaxEdgeLength (const int length) = 0;
00100
00102 virtual int GetMinRegionSize () const = 0;
00104 virtual void SetMinRegionSize (const int size) = 0;
00105
00107 virtual int GetMergeRegionSize () const = 0;
00109 virtual void SetMergeRegionSize (const int size) = 0;
00110
00112 virtual int GetMaxVertsPerPoly () const = 0;
00114 virtual void SetMaxVertsPerPoly (const int maxVerts) = 0;
00115
00117 virtual int GetTileSize () const = 0;
00119 virtual void SetTileSize (const int size) = 0;
00120
00122 virtual int GetBorderSize () const = 0;
00124 virtual void SetBorderSize (const int size) = 0;
00125
00127 virtual csVector3 GetPolygonSearchBox () const = 0;
00129 virtual void SetPolygonSearchBox (const csVector3 box) = 0;
00130 };
00131
00132
00133
00137 struct iCelNavMeshPath : public virtual iBase
00138 {
00139 SCF_INTERFACE (iCelNavMeshPath, 1, 0, 0);
00140
00142 virtual iSector* GetSector () const = 0;
00143
00145 virtual void Current (csVector3& vector) const = 0;
00146
00148 virtual void Next (csVector3& vector) = 0;
00149
00151 virtual void Previous (csVector3& vector) = 0;
00152
00154 virtual void GetFirst (csVector3& vector) const = 0;
00155
00157 virtual void GetLast (csVector3& vector) const = 0;
00158
00160 virtual bool HasNext () const = 0;
00161
00163 virtual bool HasPrevious () const = 0;
00164
00166 virtual void Invert () = 0;
00167
00169 virtual void Restart () = 0;
00170
00172 virtual void AddNode (csVector3 node) = 0;
00173
00175 virtual void InsertNode (int pos, csVector3 node) = 0;
00176
00178 virtual float Length() const = 0;
00179
00181 virtual int GetNodeCount () const = 0;
00182
00187 virtual csList<csSimpleRenderMesh>* GetDebugMeshes () const = 0;
00188 };
00189
00190
00191
00195 struct iCelNavMesh : public virtual iBase
00196 {
00197 SCF_INTERFACE (iCelNavMesh, 1, 0, 0);
00198
00206 virtual iCelNavMeshPath* ShortestPath (const csVector3& from, const csVector3& goal,
00207 int maxPathSize = 32) = 0;
00208
00214 virtual bool Update (const csBox3& boundingBox) = 0;
00215
00221 virtual bool Update (const csOBB& boundingBox) = 0;
00222
00224 virtual iSector* GetSector () const = 0;
00225
00227 virtual void SetSector (iSector* sector) = 0;
00228
00230 virtual iCelNavMeshParams* GetParameters () const = 0;
00231
00233 virtual csBox3 GetBoundingBox() const = 0;
00234
00235
00236 virtual csArray<csPoly3D> QueryPolygons(const csBox3& box) const = 0;
00237
00239 virtual bool SaveToFile (iFile* file) const = 0;
00240
00245 virtual csList<csSimpleRenderMesh>* GetDebugMeshes () const = 0;
00246
00251 virtual csList<csSimpleRenderMesh>* GetAgentDebugMeshes (const csVector3& pos) const = 0;
00252
00257 virtual csList<csSimpleRenderMesh>* GetAgentDebugMeshes (const csVector3& pos, int red, int green,
00258 int blue, int alpha) const = 0;
00259 };
00260
00261
00262
00266 struct iCelNavMeshBuilder : public virtual iBase
00267 {
00268 SCF_INTERFACE (iCelNavMeshBuilder, 1, 0, 0);
00269
00277 virtual bool SetSector (iSector* sector) = 0;
00278
00285 THREADED_INTERFACE(BuildNavMesh);
00286
00292 virtual iCelNavMesh* LoadNavMesh (iFile* file) = 0;
00293
00298 virtual const iCelNavMeshParams* GetNavMeshParams () const = 0;
00299
00304 virtual void SetNavMeshParams (const iCelNavMeshParams* parameters) = 0;
00305
00306 virtual iSector* GetSector () const = 0;
00307
00308 };
00309
00310 #endif // __CEL_NAVMESHAPI__