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

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)