summaryrefslogtreecommitdiff
path: root/src/yapf/yapf_road.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-02-14 16:37:16 +0000
committerrubidium <rubidium@openttd.org>2007-02-14 16:37:16 +0000
commita2999dadc91fd95fae93c3063d9db7c99245c7ad (patch)
tree1a15ba2c92fafbb76de3d76a96583953c41b088b /src/yapf/yapf_road.cpp
parentca310e5a2684e8a3f905ba59219fc5c24c089f78 (diff)
downloadopenttd-a2999dadc91fd95fae93c3063d9db7c99245c7ad.tar.xz
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
Diffstat (limited to 'src/yapf/yapf_road.cpp')
-rw-r--r--src/yapf/yapf_road.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/yapf/yapf_road.cpp b/src/yapf/yapf_road.cpp
index 02b306b31..43d98716d 100644
--- a/src/yapf/yapf_road.cpp
+++ b/src/yapf/yapf_road.cpp
@@ -51,6 +51,10 @@ protected:
if (IsLevelCrossing(tile))
cost += Yapf().PfGetSettings().road_crossing_penalty;
break;
+ case MP_STATION:
+ if (IsDriveThroughStopTile(tile))
+ cost += Yapf().PfGetSettings().road_stop_penalty;
+ break;
default:
break;
@@ -76,6 +80,10 @@ public:
// base tile cost depending on distance between edges
segment_cost += Yapf().OneTileCost(tile, trackdir);
+ const Vehicle* v = Yapf().GetVehicle();
+ // we have reached the vehicle's destination - segment should end here to avoid target skipping
+ if (v->current_order.type == OT_GOTO_STATION && tile == v->dest_tile) break;
+
// stop if we have just entered the depot
if (IsTileDepotType(tile, TRANSPORT_ROAD) && trackdir == DiagdirToDiagTrackdir(ReverseDiagDir(GetRoadDepotDirection(tile)))) {
// next time we will reverse and leave the depot
@@ -103,7 +111,6 @@ public:
// add min/max speed penalties
int min_speed = 0;
int max_speed = F.GetSpeedLimit(&min_speed);
- const Vehicle* v = Yapf().GetVehicle();
if (max_speed < v->max_speed) segment_cost += 1 * (v->max_speed - max_speed);
if (min_speed > v->max_speed) segment_cost += 10 * (min_speed - v->max_speed);