![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 00003 #ifndef KY_DtRestrictedWanderTraversal_H 00004 #define KY_DtRestrictedWanderTraversal_H 00005 00006 #include <bhaveSim/restrictedWanderTraversalConfig.h> 00007 00008 #include <kypathdata/generic/basetypes.h> 00009 #include <kyruntime/graph/astartraversal.h> 00010 #include <kyruntime/graph/pointinfo_vertexsafeptr.h> 00011 00012 #include <vrfobjcore/vrfObject.h> 00013 00014 namespace Kaim 00015 { 00016 class WanderAgent; 00017 class World; 00018 } 00019 00020 namespace BHAVE 00021 { 00026 class DtRestrictedWanderTraversal: public Kaim::AstarTraversal 00027 { 00028 public: 00029 KY_DECLARE_TRAVERSAL(DtRestrictedWanderTraversal) 00030 00031 00032 public: 00034 DtRestrictedWanderTraversal(); 00035 00037 ~DtRestrictedWanderTraversal(); 00038 00040 KyResult Initialize(Kaim::TraversalManager& traversalManager, const DtRestrictedWanderTraversalConfig& config); 00041 00042 virtual void Start(); 00043 00046 KyBool ComputeDestination(); 00047 00049 const Kaim::PointWrapper& GetDestination() const { return m_destination; } 00050 00051 /* Not used. */ 00052 virtual KyBool EvaluateEdge(const Kaim::GraphEdgePtr& edge, KyFloat32& cost); 00053 00057 static KyUInt32 GetCallCounter(); 00058 00062 KyBool SetWanderDistance(KyFloat32 distance); 00063 00065 KyFloat32 GetWanderDistance() const; 00066 00068 void SetPropagationAngle(KyFloat32 angle); 00069 00071 KyFloat32 GetPropagationAngle() const; 00072 00073 DtVrfObject* wanderArea() const { return myWanderArea; } 00074 void setWanderArea(DtVrfObject* val) { myWanderArea = val; } 00075 00076 protected: 00080 virtual KyBool ProcessEdge(const Kaim::GraphEdgePtr& edge); 00081 00090 virtual KyBool ProcessVertex(const Kaim::GraphVertexPtr& vertex); 00091 00092 /* Increase the call counter */ 00093 virtual void UpdateCallCounter(); 00094 00095 KyFloat32 ComputeScore(const Kaim::Vec3f& position, KyFloat32 sqDistance) const; 00096 KyBool IsInCone(const Kaim::Vec3f& position) const; 00097 KyBool IsClearPosition(const Kaim::Vec3f& position) const; 00098 KyBool isInsideArea(const Kaim::Vec3f& position, DtVrfObject* areaObject) const; 00099 00101 virtual bool isShapePolyClockwise( Kaim::Vec3f* polyLineVec, unsigned size ) const; 00102 00104 virtual void reverseShapePolyline( Kaim::Vec3f* polyLineVec, unsigned size ) const; 00105 00106 public: 00107 Kaim::PointWrapper m_destination; 00108 Kaim::PointInfo_VertexSafePtr m_destinationSafePtr; 00109 KyFloat32 m_destinationScore; 00110 KyFloat32 m_distance; 00115 KyFloat32 m_propagationCosAngle; 00116 00117 protected: 00118 DtVrfObject* myWanderArea; 00119 }; 00120 00121 00126 class PropagationBias_RestrictedWander : public Kaim::PropagationBias 00127 { 00128 public: 00129 KY_DECLARE_PROPAGATIONBIAS(PropagationBias_RestrictedWander) 00130 00131 public: 00136 virtual KyBool GetCost(Kaim::Bot* entity, const Kaim::GraphVertexPtr& position, KyFloat32& cost); 00137 00138 const DtRestrictedWanderTraversal* m_traversal; 00139 }; 00140 00141 } 00142 00143 #endif //! KY_DtRestrictedWanderTraversal_H