diff options
author | celestar <celestar@openttd.org> | 2006-06-02 13:05:41 +0000 |
---|---|---|
committer | celestar <celestar@openttd.org> | 2006-06-02 13:05:41 +0000 |
commit | 25a63ec7af6fadb2d33ef84f79597c14b10e7f39 (patch) | |
tree | d5df4e2831609eca45d7ea4558e09a600089ead2 /npf.c | |
parent | d680fcec772d422b88ea4802add2e6195c6327a2 (diff) | |
download | openttd-25a63ec7af6fadb2d33ef84f79597c14b10e7f39.tar.xz |
(svn r5070) Merged the bridge branch
-Feature: Bridges can now be placed above:
Any railway track combination (excluding depots and waypoints)
Any road combination (excluding depots)
Clear tiles (duh), including fields
Tunnel entrances
Bridge heads
Thanks to Tron for idea and implementation, KUDr for the yapf synchronization and many others for hours of testing
There are still a number of visual problems remaining, especially when electric railways are on or under the bridge.
DO NOT REPORT THOSE BUGS FOR THE TIME BEING please.
Diffstat (limited to 'npf.c')
-rw-r--r-- | npf.c | 27 |
1 files changed, 14 insertions, 13 deletions
@@ -479,17 +479,7 @@ static bool VehicleMayEnterTile(Owner owner, TileIndex tile, DiagDirection enter case MP_TUNNELBRIDGE: if ((IsTunnel(tile) && GetTunnelTransportType(tile) == TRANSPORT_RAIL) || - (IsBridge(tile) && ( - ( - IsBridgeRamp(tile) && - GetBridgeTransportType(tile) == TRANSPORT_RAIL - ) || ( - IsBridgeMiddle(tile) && - IsTransportUnderBridge(tile) && - GetTransportTypeUnderBridge(tile) == TRANSPORT_RAIL && - GetBridgeAxis(tile) != DiagDirToAxis(enterdir) - ) - ))) { + (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL)) { return IsTileOwner(tile, owner); } break; @@ -516,6 +506,7 @@ static void NPFFollowTrack(AyStar* aystar, OpenListNode* current) int i; TrackdirBits trackdirbits, ts; TransportType type = aystar->user_data[NPF_TYPE]; + bool override_dst_check = false; /* Initialize to 0, so we can jump out (return) somewhere an have no neighbours */ aystar->num_neighbours = 0; DEBUG(npf, 4)("Expanding: (%d, %d, %d) [%d]", TileX(src_tile), TileY(src_tile), src_trackdir, src_tile); @@ -526,6 +517,10 @@ static void NPFFollowTrack(AyStar* aystar, OpenListNode* current) * otherwise we wouldn't have got here. It is also facing us, * so we should skip it's body */ dst_tile = GetOtherTunnelEnd(src_tile); + override_dst_check = true; + } else if (IsBridgeTile(src_tile) && GetBridgeRampDirection(src_tile) == src_exitdir) { + dst_tile = GetOtherBridgeEnd(src_tile); + override_dst_check = true; } else if (type != TRANSPORT_WATER && (IsRoadStopTile(src_tile) || IsTileDepotType(src_tile, type))) { /* This is a road station or a train or road depot. We can enter and exit * those from one side only. Trackdirs don't support that (yet), so we'll @@ -573,8 +568,14 @@ static void NPFFollowTrack(AyStar* aystar, OpenListNode* current) /* I can't enter a tunnel entry/exit tile from a tile above the tunnel. Note * that I can enter the tunnel from a tile below the tunnel entrance. This * solves the problem of vehicles wanting to drive off a tunnel entrance */ - if (IsTunnelTile(dst_tile) && GetTileZ(dst_tile) < GetTileZ(src_tile)) { - return; + if (!override_dst_check) { + if (IsTileType(dst_tile, MP_TUNNELBRIDGE)) { + if (IsTunnel(dst_tile)) { + if (GetTunnelDirection(dst_tile) != src_exitdir) return; + } else { + if (GetBridgeRampDirection(dst_tile) != src_exitdir) return; + } + } } /* check correct rail type (mono, maglev, etc) */ |