# CYapfBaseT< Types > Class Template Reference

CYapfBaseT - A-star type path finder base class. More...

`#include <yapf_base.hpp>`

Inheritance diagram for CYapfBaseT< Types >:

## 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:

- set startup node(s)
- main loop that stops if:
  - the destination was found
  - or the open list is empty (no route to destination).

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

## Detailed Description

### template<class Types>
class CYapfBaseT< Types >

CYapfBaseT - A-star type path finder base class.

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:

- Types::Tpf - your pathfinder derived from CYapfBaseT
- Types::NodeList - open/closed node list (look at CNodeList_HashTableT) NodeList needs to have defined local type Titem - defines the pathfinder node type. Node needs to define local type Key - the node key in the collection ()

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.

## Member Function Documentation

template<class Types >

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().

template<class Types >

bool CYapfBaseT< Types >::FindPath | ( | const VehicleType * | v | ) | `[inline]`

Main pathfinder routine:

- set startup node(s)
- main loop that stops if:
  - the destination was found
  - or the open list is empty (no route to destination).

- or the maximum amount of loops reached - m_max_search_nodes (default = 10000)
  Returns:
    true if the path was found

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().

template<class Types >

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.

The documentation for this class was generated from the following file:

- src/pathfinder/yapf/yapf_base.hpp