diff options
author | rubidium <rubidium@openttd.org> | 2007-02-14 16:37:16 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-02-14 16:37:16 +0000 |
commit | 0e8f006dc18e8faff93382fe8044d046c36e86f4 (patch) | |
tree | 1a15ba2c92fafbb76de3d76a96583953c41b088b /src/yapf/yapf_road.cpp | |
parent | 39b73119cabcaa793856b441461fd77e37c491ef (diff) | |
download | openttd-0e8f006dc18e8faff93382fe8044d046c36e86f4.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.cpp | 9 |
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); |