summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-01-23 18:24:04 +0000
committersmatz <smatz@openttd.org>2008-01-23 18:24:04 +0000
commit75784655b706aca2b2afdc8b73dbed7d46b4a72f (patch)
treea82f75779747547d533a803c1b9b7cc20e34a47e
parent18df5480bac0333848655d189f14b83ddee17308 (diff)
downloadopenttd-75784655b706aca2b2afdc8b73dbed7d46b4a72f.tar.xz
(svn r11965) -Codechange: simplified tunnel/bridge code in TPFMode1
-rw-r--r--src/pathfind.cpp55
1 files changed, 18 insertions, 37 deletions
diff --git a/src/pathfind.cpp b/src/pathfind.cpp
index 6b9e7ebb6..91f059be6 100644
--- a/src/pathfind.cpp
+++ b/src/pathfind.cpp
@@ -220,50 +220,31 @@ FindLengthOfTunnelResult FindLengthOfTunnel(TileIndex tile, DiagDirection dir)
static const uint16 _tpfmode1_and[4] = { 0x1009, 0x16, 0x520, 0x2A00 };
-static uint SkipToEndOfTunnel(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
-{
- FindLengthOfTunnelResult flotr;
- TPFSetTileBit(tpf, tile, 14);
- flotr = FindLengthOfTunnel(tile, direction);
- tpf->rd.cur_length += flotr.length;
- TPFSetTileBit(tpf, flotr.tile, 14);
- return flotr.tile;
-}
-
static void TPFMode1(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
{
- TileIndex tile_org = tile;
+ const TileIndex tile_org = tile;
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
- if (IsTunnel(tile)) {
- if (GetTunnelBridgeTransportType(tile) != tpf->tracktype) {
- return;
- }
- /* Only skip through the tunnel if heading inwards. We can
- * be headed outwards if our starting position was in a
- * tunnel and we're pathfinding backwards */
- if (GetTunnelBridgeDirection(tile) == direction) {
- tile = SkipToEndOfTunnel(tpf, tile, direction);
- } else if (GetTunnelBridgeDirection(tile) != ReverseDiagDir(direction)) {
- /* We don't support moving through the sides of a tunnel
- * entrance :-) */
- return;
- }
- } else { // IsBridge(tile)
- TileIndex tile_end;
- if (GetTunnelBridgeDirection(tile) != direction ||
- GetTunnelBridgeTransportType(tile) != tpf->tracktype) {
- return;
- }
- //fprintf(stderr, "%s: Planning over bridge\n", __func__);
- // TODO doesn't work - WHAT doesn't work?
- TPFSetTileBit(tpf, tile, 14);
- tile_end = GetOtherBridgeEnd(tile);
- tpf->rd.cur_length += DistanceManhattan(tile, tile_end);
- tile = tile_end;
+ /* wrong track type */
+ if (GetTunnelBridgeTransportType(tile) != tpf->tracktype) return;
+
+ DiagDirection dir = GetTunnelBridgeDirection(tile);
+ /* entering tunnel / bridge? */
+ if (dir == direction) {
+ TileIndex endtile = GetOtherTunnelBridgeEnd(tile);
+
+ tpf->rd.cur_length += DistanceManhattan(tile, endtile);
+
TPFSetTileBit(tpf, tile, 14);
+ TPFSetTileBit(tpf, endtile, 14);
+
+ tile = endtile;
+ } else {
+ /* leaving tunnel / bridge? */
+ if (ReverseDiagDir(dir) != direction) return;
}
}
+
tile += TileOffsByDiagDir(direction);
/* Check in case of rail if the owner is the same */