#include <yapf_base.hpp>
Public Types | |
typedef Types::Tpf | Tpf |
the pathfinder class (derived from THIS class) | |
typedef Types::TrackFollower | TrackFollower |
typedef Types::NodeList | NodeList |
our node list | |
typedef Types::VehicleType | VehicleType |
the type of vehicle | |
typedef NodeList::Titem | Node |
this will be our node type | |
typedef Node::Key | Key |
key to hash tables | |
Public Member Functions | |
FORCEINLINE | CYapfBaseT () |
default constructor | |
~CYapfBaseT () | |
default destructor | |
FORCEINLINE const YAPFSettings & | PfGetSettings () const |
return current settings (can be custom - company based - but later) | |
bool | FindPath (const VehicleType *v) |
Main pathfinder routine:
| |
FORCEINLINE Node * | GetBestNode () |
If path was found return the best node that has reached the destination. | |
FORCEINLINE Node & | CreateNewNode () |
Calls NodeList::CreateNewNode() - allocates new node that can be filled and used as argument for AddStartupNode() or AddNewNode(). | |
FORCEINLINE void | AddStartupNode (Node &n) |
Add new node (created by CreateNewNode and filled with data) into open list. | |
FORCEINLINE void | AddMultipleNodes (Node *parent, const TrackFollower &tf) |
add multiple nodes - direct children of the given node | |
void | AddNewNode (Node &n, const TrackFollower &tf) |
AddNewNode() - called by Tderived::PfFollowNode() for each child node. | |
const VehicleType * | GetVehicle () const |
void | DumpBase (DumpTarget &dmp) const |
Data Fields | |
NodeList | m_nodes |
node list multi-container | |
CPerformanceTimer | m_perf_cost |
stats - total CPU time of this run | |
CPerformanceTimer | m_perf_slope_cost |
stats - slope calculation CPU time | |
CPerformanceTimer | m_perf_ts_cost |
stats - GetTrackStatus() CPU time | |
CPerformanceTimer | m_perf_other_cost |
stats - other CPU time | |
int | m_num_steps |
this is there for debugging purposes (hope it doesn't hurt) | |
Protected Member Functions | |
FORCEINLINE Tpf & | Yapf () |
to access inherited path finder | |
Protected Attributes | |
Node * | m_pBestDestNode |
pointer to the destination node found at last round | |
Node * | m_pBestIntermediateNode |
here should be node closest to the destination if path not found | |
const YAPFSettings * | m_settings |
current settings (_settings_game.yapf) | |
int | m_max_search_nodes |
maximum number of nodes we are allowed to visit before we give up | |
const VehicleType * | m_veh |
vehicle that we are trying to drive | |
int | m_stats_cost_calcs |
stats - how many node's costs were calculated | |
int | m_stats_cache_hits |
stats - how many node's costs were reused from cache |
Derive your own pathfinder from it. You must provide the following template argument: Types - used as collection of local types used in pathfinder
Requirements for the Types struct: ---------------------------------- The following types must be defined in the 'Types' argument:
For node list you can use template class CNodeList_HashTableT, for which you need to declare only your node type. Look at test_yapf.h for an example.
Requrements to your pathfinder class derived from CYapfBaseT: ------------------------------------------------------------- Your pathfinder derived class needs to implement following methods: FORCEINLINE void PfSetStartupNodes() FORCEINLINE void PfFollowNode(Node& org) FORCEINLINE bool PfCalcCost(Node& n) FORCEINLINE bool PfCalcEstimate(Node& n) FORCEINLINE bool PfDetectDestination(Node& n)
For more details about those methods, look at the end of CYapfBaseT declaration. There are some examples. For another example look at test_yapf.h (part or unittest project).
Definition at line 50 of file yapf_base.hpp.
bool CYapfBaseT< Types >::FindPath | ( | const VehicleType * | v | ) | [inline] |
Main pathfinder routine:
Definition at line 118 of file yapf_base.hpp.
References CYapfBaseT< Types >::m_max_search_nodes, CYapfBaseT< Types >::m_nodes, CYapfBaseT< Types >::m_num_steps, CYapfBaseT< Types >::m_pBestDestNode, CYapfBaseT< Types >::m_pBestIntermediateNode, CYapfBaseT< Types >::m_perf_cost, CYapfBaseT< Types >::m_perf_other_cost, CYapfBaseT< Types >::m_perf_slope_cost, CYapfBaseT< Types >::m_perf_ts_cost, CYapfBaseT< Types >::m_stats_cache_hits, CYapfBaseT< Types >::m_stats_cost_calcs, CYapfBaseT< Types >::m_veh, and CYapfBaseT< Types >::Yapf().
FORCEINLINE Node* CYapfBaseT< Types >::GetBestNode | ( | ) | [inline] |
If path was found return the best node that has reached the destination.
Otherwise return the best visited node (which was nearest to the destination).
Definition at line 180 of file yapf_base.hpp.
References CYapfBaseT< Types >::m_pBestDestNode, and CYapfBaseT< Types >::m_pBestIntermediateNode.
void CYapfBaseT< Types >::AddNewNode | ( | Node & | n, | |
const TrackFollower & | tf | |||
) | [inline] |
AddNewNode() - called by Tderived::PfFollowNode() for each child node.
Nodes are evaluated here and added into open list
Definition at line 222 of file yapf_base.hpp.
References CYapfBaseT< Types >::m_max_search_nodes, CYapfBaseT< Types >::m_nodes, CYapfBaseT< Types >::m_pBestDestNode, CYapfBaseT< Types >::m_pBestIntermediateNode, CYapfBaseT< Types >::m_stats_cache_hits, CYapfBaseT< Types >::m_stats_cost_calcs, and CYapfBaseT< Types >::Yapf().