![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 00007 #pragma once 00008 00009 00010 #include "kypathdata/navmesh/navmeshtypes.h" 00011 #include "kypathdata/navmesh/navtriangleid.h" 00012 #include "kypathdata/generic/memory.h" 00013 #include "kypathdata/navmesh/propagationquerymemory.h" 00014 #include "kypathdata/navmesh/navmeshqueryserver.h" 00015 #include "kypathdata/math/vec3f.h" 00016 00017 namespace BHAVE 00018 { 00021 enum DtPieCollisionQueryResult 00022 { 00023 PIECOLLISION_QUERY_NOT_PROCESSED, 00024 PIECOLLISION_FIT, 00025 PIECOLLISION_CENTER_OUTSIDE, 00026 PIECOLLISION_CENTER_TERRAIN_TYPE_FORBIDDEN, 00027 PIECOLLISION_DOES_NOT_FIT, 00028 PIECOLLISION_TRAVERSAL_ERROR_LACK_OF_RESULT_MEMORY, 00029 PIECOLLISION_TRAVERSAL_ERROR_LACK_OF_WORKING_MEMORY, 00030 PIECOLLISION_TRAVERSAL_ERROR_LACK_OF_PROPAGATION_MEMORY, 00031 PIECOLLISION_UNKNOWN_ERROR, 00032 PIECOLLISION_FORCE32 = 0xFFFFFFFF 00033 }; 00034 00040 class DtPieCollisionQuery 00041 { 00042 KY_DEFINE_NEW_DELETE_OPERATORS 00043 00044 public: 00046 DtPieCollisionQuery() : m_centerCoordPos(Kaim::InvalidCoord64, Kaim::InvalidCoord64), m_radius(0.f), m_terrainTypeMask(Kaim::NavTerrainTypeMask_All), m_searchRange(1.f), m_returnCode(PIECOLLISION_QUERY_NOT_PROCESSED) {} 00047 00051 DtPieCollisionQuery(const Kaim::Vec3f& center, KyFloat32 radius, KyFloat32 startingRadian, KyFloat32 endingRadian) : 00052 m_centerPos3f(center), m_centerCoordPos(Kaim::InvalidCoord64, Kaim::InvalidCoord64), m_radius(radius), 00053 m_terrainTypeMask(Kaim::NavTerrainTypeMask_All), m_searchRange(1.f), 00054 myStartingRadian(startingRadian), myEndingRadian(endingRadian), m_returnCode(PIECOLLISION_QUERY_NOT_PROCESSED) {} 00055 00060 DtPieCollisionQuery(const Kaim::Vec3f& center, KyFloat32 radius, KyFloat32 startingRadian, KyFloat32 endingRadian, Kaim::NavTriangleId centerTriangleId) : 00061 m_centerPos3f(center), m_centerCoordPos(Kaim::InvalidCoord64, Kaim::InvalidCoord64), m_centerTriangleId(centerTriangleId), m_radius(radius), 00062 myStartingRadian(startingRadian), myEndingRadian(endingRadian), m_terrainTypeMask(Kaim::NavTerrainTypeMask_All), m_searchRange(1.f), m_returnCode(PIECOLLISION_QUERY_NOT_PROCESSED) {} 00063 00065 KY_FORCE_INLINE DtPieCollisionQueryResult GetResult() const { return m_returnCode; } 00066 00068 KY_FORCE_INLINE void Clear() 00069 { 00070 m_radius = 0.f; 00071 m_centerPos3f.Set(0.f, 0.f, 0.f); 00072 m_centerCoordPos.Set(Kaim::InvalidCoord64, Kaim::InvalidCoord64); 00073 00074 m_centerTriangleId.Invalidate(); 00075 m_terrainTypeMask = Kaim::NavTerrainTypeMask_All; 00076 m_searchRange = 1.f; 00077 00078 CleanOutput(); 00079 } 00080 00082 KY_FORCE_INLINE void CleanOutput() { m_returnCode = PIECOLLISION_QUERY_NOT_PROCESSED; } 00083 00085 KY_FORCE_INLINE Kaim::Vec3f& GetCenter() { return m_centerPos3f; } 00086 00088 KY_FORCE_INLINE const Kaim::Vec3f& GetCenter() const { return m_centerPos3f; } 00089 00091 KY_FORCE_INLINE Kaim::NavTriangleId& GetCenterTriangleId() { return m_centerTriangleId; } 00092 00094 KY_FORCE_INLINE const Kaim::NavTriangleId& GetCenterTriangleId() const { return m_centerTriangleId; } 00095 00097 KY_FORCE_INLINE KyFloat32 GetRadius() const { return m_radius; } 00098 00100 KY_FORCE_INLINE Kaim::NavTerrainTypeMask GetTerrainTypeMask() const { return m_terrainTypeMask; } 00101 00103 KY_FORCE_INLINE void SetTerrainTypeMask(Kaim::NavTerrainTypeMask terrainTypeMask) { m_terrainTypeMask = terrainTypeMask; } 00104 00106 KY_FORCE_INLINE KyFloat32 GetSearchRange() const { return m_searchRange; } 00107 00109 KY_FORCE_INLINE void SetSearchRange(KyFloat32 searchRange) { m_searchRange = searchRange; } 00110 00112 void PerformQuery(Kaim::NavMeshQueryServer& queryServer); 00113 00115 void PerformQueryWithInputCoordPos(Kaim::NavMeshQueryServer& queryServer); 00116 00117 public: 00119 Kaim::Vec3f m_centerPos3f; 00120 00122 Kaim::CoordPos64 m_centerCoordPos; 00123 00126 Kaim::NavTriangleId m_centerTriangleId; 00127 00129 KyFloat32 m_radius; 00130 00132 Kaim::NavTerrainTypeMask m_terrainTypeMask; 00133 00136 KyFloat32 m_searchRange; 00137 00140 Kaim::PropagationQueryMemory m_memory; 00141 00143 DtPieCollisionQueryResult m_returnCode; 00144 00146 KyFloat32 myStartingRadian; 00147 00149 KyFloat32 myEndingRadian; 00150 }; 00151 00152 00153 } 00154 00155 00156