summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2007-12-15 19:46:34 +0000
committersmatz <smatz@openttd.org>2007-12-15 19:46:34 +0000
commit13c11e9af6f7ddf256970c9be8a095eb1e781b07 (patch)
tree2cc24d97b791df3b27b6772124ad016e56860fba
parentc972d309bef752f19bcbdd7117912a96c1879c85 (diff)
downloadopenttd-13c11e9af6f7ddf256970c9be8a095eb1e781b07.tar.xz
(svn r11638) -Codechange: use faster check in SignalVehicleCheck for tunnel/bridge
-rw-r--r--src/rail_cmd.cpp42
1 files changed, 7 insertions, 35 deletions
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index ac0464ea7..8596bc8be 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -1917,42 +1917,14 @@ static void *SignalVehicleCheckProc(Vehicle *v, void *data)
/* Special check for SetSignalsAfterProc, to see if there is a vehicle on this tile */
static bool SignalVehicleCheck(TileIndex tile, uint track)
{
- SignalVehicleCheckStruct dest;
-
- dest.tile = tile;
- dest.track = track;
-
- /* Locate vehicles in tunnels or on bridges */
- if (IsTunnelTile(tile) || IsBridgeTile(tile)) {
- TileIndex end;
- DiagDirection direction;
-
- if (IsTunnelTile(tile)) {
- end = GetOtherTunnelEnd(tile);
- direction = GetTunnelDirection(tile);
- } else {
- end = GetOtherBridgeEnd(tile);
- direction = GetBridgeRampDirection(tile);
- }
-
- dest.track = 1 << (direction & 1); // get the trackbit the vehicle would have if it has not entered the tunnel yet (ie is still visible)
-
- /* check for a vehicle with that trackdir on the start tile of the tunnel */
- if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL) return true;
-
- /* check for a vehicle with that trackdir on the end tile of the tunnel */
- if (VehicleFromPos(end, &dest, SignalVehicleCheckProc) != NULL) return true;
-
- /* now check all tiles from start to end for a warping vehicle */
- dest.track = 0x40; //Vehicle inside a tunnel or on a bridge
- if (VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL) return true;
- if (VehicleFromPos(end, &dest, SignalVehicleCheckProc) != NULL) return true;
-
- /* no vehicle found */
- return false;
+ if (IsTileType(tile, MP_TUNNELBRIDGE)) {
+ /* Locate vehicles in tunnels or on bridges */
+ TileIndex endtile = IsTunnel(tile) ? GetOtherTunnelEnd(tile) : GetOtherBridgeEnd(tile);
+ return GetVehicleTunnelBridge(tile, endtile) != NULL;
+ } else {
+ SignalVehicleCheckStruct dest = {tile, track};
+ return VehicleFromPos(tile, &dest, &SignalVehicleCheckProc) != NULL;
}
-
- return VehicleFromPos(tile, &dest, SignalVehicleCheckProc) != NULL;
}
static void SetSignalsAfterProc(TrackPathFinder *tpf)