CEL

Public API Reference

tools/celnavmesh.h
00001 /*
00002     Crystal Space Entity Layer
00003     Copyright (C) 2010 by Leonardo Rodrigo Domingues
00004   
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009   
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014   
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
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   // obtain a list of polygons overlapping a box
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__

Generated for CEL: Crystal Entity Layer 2.0 by doxygen 1.7.6.1