Changeset - r23418:7f588ca21399
[Not reviewed]
master
0 1 0
Peter Nelson - 6 years ago 2019-02-15 16:50:04
peter1138@openttd.org
Change: Automatically use Trackdir node key as needed if ship curve penalties differ.
1 file changed with 12 insertions and 2 deletions:
0 comments (0 inline, 0 general)
src/pathfinder/yapf/yapf_ship.cpp
Show inline comments
 
@@ -241,6 +241,16 @@ struct CYapfShip1 : CYapfT<CYapfShip_Typ
 
/* YAPF type 2 - uses TileIndex/DiagDirection as Node key */
 
struct CYapfShip2 : CYapfT<CYapfShip_TypesT<CYapfShip2, CFollowTrackWater    , CShipNodeListExitDir > > {};
 

	
 
static inline bool RequireTrackdirKey()
 
{
 
	/* If the two curve penalties are not equal, then it is not possible to use the
 
	 * ExitDir keyed node list, as it there will be key overlap. Using Trackdir keyed
 
	 * nodes means potentially more paths are tested, which would be wasteful if it's
 
	 * not necessary.
 
	 */
 
	return _settings_game.pf.yapf.ship_curve45_penalty != _settings_game.pf.yapf.ship_curve90_penalty;
 
}
 

	
 
/** Ship controller helper - path finder invoker */
 
Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache)
 
{
 
@@ -249,7 +259,7 @@ Track YapfShipChooseTrack(const Ship *v,
 
	PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir
 

	
 
	/* check if non-default YAPF type needed */
 
	if (_settings_game.pf.yapf.disable_node_optimization) {
 
	if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) {
 
		pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir
 
	}
 

	
 
@@ -267,7 +277,7 @@ bool YapfShipCheckReverse(const Ship *v)
 
	PfnCheckReverseShip pfnCheckReverseShip = CYapfShip2::CheckShipReverse; // default: ExitDir
 

	
 
	/* check if non-default YAPF type needed */
 
	if (_settings_game.pf.yapf.disable_node_optimization) {
 
	if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) {
 
		pfnCheckReverseShip = &CYapfShip1::CheckShipReverse; // Trackdir
 
	}
 

	
0 comments (0 inline, 0 general)