summaryrefslogtreecommitdiff
path: root/yapf
diff options
context:
space:
mode:
Diffstat (limited to 'yapf')
-rw-r--r--yapf/yapf_costrail.hpp5
-rw-r--r--yapf/yapf_destrail.hpp24
2 files changed, 21 insertions, 8 deletions
diff --git a/yapf/yapf_costrail.hpp b/yapf/yapf_costrail.hpp
index f02a42208..6085197ab 100644
--- a/yapf/yapf_costrail.hpp
+++ b/yapf/yapf_costrail.hpp
@@ -165,7 +165,7 @@ public:
RailType rail_type = GetTileRailType(tile, trackdir);
- bool target_seen = false;
+ bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
while (true) {
segment_cost += Yapf().OneTileCost(tile, trackdir);
@@ -177,7 +177,6 @@ public:
}
// finish if we have reached the destination
- target_seen = Yapf().PfDetectDestination(n);
if (target_seen) {
break;
}
@@ -237,6 +236,8 @@ public:
trackdir = new_td;
tile_type = GetTileType(tile);
+ target_seen = Yapf().PfDetectDestination(tile, trackdir);
+
// reversing in depot penalty
if (tile == prev_tile) {
segment_cost += Yapf().PfGetSettings().rail_depot_reverse_penalty;
diff --git a/yapf/yapf_destrail.hpp b/yapf/yapf_destrail.hpp
index c7b3a63a0..2720772f8 100644
--- a/yapf/yapf_destrail.hpp
+++ b/yapf/yapf_destrail.hpp
@@ -35,7 +35,13 @@ public:
/// Called by YAPF to detect if node ends in the desired destination
FORCEINLINE bool PfDetectDestination(Node& n)
{
- bool bDest = IsTileDepotType(n.GetLastTile(), TRANSPORT_RAIL);
+ return PfDetectDestination(n.GetLastTile(), n.GetLastTrackdir());
+ }
+
+ /// Called by YAPF to detect if node ends in the desired destination
+ FORCEINLINE bool PfDetectDestination(TileIndex tile, Trackdir td)
+ {
+ bool bDest = IsTileDepotType(tile, TRANSPORT_RAIL);
return bDest;
}
@@ -93,14 +99,20 @@ public:
/// Called by YAPF to detect if node ends in the desired destination
FORCEINLINE bool PfDetectDestination(Node& n)
{
+ return PfDetectDestination(n.GetLastTile(), n.GetLastTrackdir());
+ }
+
+ /// Called by YAPF to detect if node ends in the desired destination
+ FORCEINLINE bool PfDetectDestination(TileIndex tile, Trackdir td)
+ {
bool bDest;
if (m_dest_station_id != INVALID_STATION) {
- bDest = IsRailwayStationTile(n.GetLastTile())
- && (GetStationIndex(n.GetLastTile()) == m_dest_station_id)
- && (GetRailStationTrack(n.GetLastTile()) == TrackdirToTrack(n.GetLastTrackdir()));
+ bDest = IsRailwayStationTile(tile)
+ && (GetStationIndex(tile) == m_dest_station_id)
+ && (GetRailStationTrack(tile) == TrackdirToTrack(td));
} else {
- bDest = (n.GetLastTile() == m_destTile)
- && ((m_destTrackdirs & TrackdirToTrackdirBits(n.GetLastTrackdir())) != TRACKDIR_BIT_NONE);
+ bDest = (tile == m_destTile)
+ && ((m_destTrackdirs & TrackdirToTrackdirBits(td)) != TRACKDIR_BIT_NONE);
}
return bDest;
}