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.6.1
