ivaria/colliders.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2011-2012 Christian Van Brussel, Institute of Information 00003 and Communication Technologies, Electronics and Applied Mathematics 00004 at Universite catholique de Louvain, Belgium 00005 http://www.uclouvain.be/en-icteam.html 00006 Copyright (C) 2012 by Dominik Seifert 00007 Copyright (C) 2011 by Liu Lu 00008 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Library General Public 00011 License as published by the Free Software Foundation; either 00012 version 2 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public 00020 License along with this library; if not, write to the Free 00021 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00022 */ 00023 00024 #ifndef __CS_IVARIA_COLLIDERS_H__ 00025 #define __CS_IVARIA_COLLIDERS_H__ 00026 00031 #include "csutil/scf.h" 00032 #include "csutil/csstring.h" 00033 #include "csgeom/vector2.h" 00034 #include "csgeom/vector3.h" 00035 #include "csgeom/matrix3.h" 00036 #include "csgeom/transfrm.h" 00037 #include "csgeom/plane3.h" 00038 #include "iutil/object.h" 00039 00040 struct iCamera; 00041 struct iMeshWrapper; 00042 struct iMovable; 00043 struct iPortal; 00044 struct iSector; 00045 struct iTerrainCell; 00046 struct iTerrainSystem; 00047 struct iTriangleMesh; 00048 struct iView; 00049 00050 namespace CS { 00051 namespace Physics { 00052 00053 struct iPhysicalBody; 00054 00055 } 00056 } 00057 00058 namespace CS { 00059 namespace Collisions { 00060 00064 enum ColliderType 00065 { 00066 COLLIDER_INVALID = 0, 00067 COLLIDER_BOX, 00068 COLLIDER_SPHERE, 00069 COLLIDER_CYLINDER, 00070 COLLIDER_CAPSULE, 00071 COLLIDER_CONE, 00072 COLLIDER_PLANE, 00073 COLLIDER_CONVEX_MESH, 00074 COLLIDER_CONCAVE_MESH, 00075 COLLIDER_CONCAVE_MESH_SCALED, 00076 COLLIDER_TERRAIN_CELL, 00077 COLLIDER_COMPOUND 00078 }; 00079 00084 struct iCollider : public virtual iBase 00085 { 00086 SCF_INTERFACE (CS::Collisions::iCollider, 1, 0, 0); 00087 00089 virtual ColliderType GetColliderType () const = 0; 00090 00092 virtual void SetLocalScale (const csVector3& scale) = 0; 00093 00095 virtual csVector3 GetLocalScale () const = 0; 00096 00098 virtual float GetVolume () const = 0; 00099 00105 virtual bool IsDynamic () const = 0; 00106 00108 virtual void AddChild (iCollider* collider, 00109 const csOrthoTransform& transform = csOrthoTransform ()) = 0; 00110 00112 virtual void RemoveChild (iCollider* collider) = 0; 00113 00115 virtual void RemoveChild (size_t index) = 0; 00116 00118 virtual size_t GetChildrenCount () const = 0; 00119 00121 virtual iCollider* GetChild (size_t index) = 0; 00122 00124 virtual void SetChildTransform (size_t index, const csOrthoTransform& transform) = 0; 00125 00127 virtual const csOrthoTransform& GetChildTransform (size_t index) const = 0; 00128 }; 00129 00142 struct iColliderBox : public virtual iCollider 00143 { 00144 SCF_INTERFACE (CS::Collisions::iColliderBox, 1, 0, 0); 00145 00147 virtual const csVector3& GetBoxGeometry () const = 0; 00148 }; 00149 00162 struct iColliderSphere : public virtual iCollider 00163 { 00164 SCF_INTERFACE (CS::Collisions::iColliderSphere, 1, 0, 0); 00165 00167 virtual float GetSphereGeometry () const = 0; 00168 }; 00169 00182 struct iColliderCylinder : public virtual iCollider 00183 { 00184 SCF_INTERFACE (CS::Collisions::iColliderCylinder, 1, 0, 0); 00185 00187 virtual void GetCylinderGeometry (float& length, float& radius) const = 0; 00188 }; 00189 00202 struct iColliderCapsule : public virtual iCollider 00203 { 00204 SCF_INTERFACE (CS::Collisions::iColliderCapsule, 1, 0, 0); 00205 00207 virtual void GetCapsuleGeometry (float& length, float& radius) const = 0; 00208 }; 00209 00222 struct iColliderCone : public virtual iCollider 00223 { 00224 SCF_INTERFACE (CS::Collisions::iColliderCone, 1, 0, 0); 00225 00227 virtual void GetConeGeometry (float& length, float& radius) const = 0; 00228 }; 00229 00242 struct iColliderPlane : public virtual iCollider 00243 { 00244 SCF_INTERFACE (CS::Collisions::iColliderPlane, 1, 0, 0); 00245 00247 virtual const csPlane3& GetPlaneGeometry () const = 0; 00248 }; 00249 00262 struct iColliderConvexMesh : public virtual iCollider 00263 { 00264 SCF_INTERFACE (CS::Collisions::iColliderConvexMesh, 1, 0, 0); 00265 00267 virtual iTriangleMesh* GetMesh () const = 0; 00268 }; 00269 00282 struct iColliderConcaveMesh : public virtual iCollider 00283 { 00284 SCF_INTERFACE (CS::Collisions::iColliderConcaveMesh, 1, 0, 0); 00285 00287 virtual iTriangleMesh* GetMesh () const = 0; 00288 }; 00289 00302 struct iColliderConcaveMeshScaled : public virtual iCollider 00303 { 00304 SCF_INTERFACE (CS::Collisions::iColliderConcaveMeshScaled, 1, 0, 0); 00305 00307 virtual iColliderConcaveMesh* GetCollider () const = 0; 00308 00310 virtual const csVector3& GetScale () const = 0; 00311 }; 00312 00316 struct iColliderTerrain : public virtual iCollider 00317 { 00318 SCF_INTERFACE (CS::Collisions::iColliderTerrain, 1, 0, 0); 00319 00321 virtual iTerrainCell* GetCell () const = 0; 00322 }; 00323 00324 } 00325 } 00326 00327 #endif
Generated for Crystal Space 2.1 by doxygen 1.6.1
