VR-Forces 4.0.4 Class Documentation
include/bhaveSim/pieCollisionQuery.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)