diff options
author | KUDr <KUDr@openttd.org> | 2006-11-21 16:24:13 +0000 |
---|---|---|
committer | KUDr <KUDr@openttd.org> | 2006-11-21 16:24:13 +0000 |
commit | 92a1daf4f53586730d08662a7ccafba9f06d3b00 (patch) | |
tree | 6dce0b7217f3ae226384c2704465e6e170c04f2d | |
parent | b8cf1f7504539732036a2d6ed486d1a10aa62e82 (diff) | |
download | openttd-92a1daf4f53586730d08662a7ccafba9f06d3b00.tar.xz |
(svn r7227) -Fix: [YAPF] Bridge YAPF Penalty Incorrect. The penalty for upward slope was incorrectly applied on bridge exit. (Danny)
-rw-r--r-- | yapf/yapf_costbase.hpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/yapf/yapf_costbase.hpp b/yapf/yapf_costbase.hpp index 27fbe5e67..b58df0c4d 100644 --- a/yapf/yapf_costbase.hpp +++ b/yapf/yapf_costbase.hpp @@ -8,10 +8,21 @@ struct CYapfCostBase { FORCEINLINE static bool stSlopeCost(TileIndex tile, Trackdir td) { - if (IsDiagonalTrackdir(td) && !IsTunnelTile(tile)) { - uint tile_slope = GetTileSlope(tile, NULL) & 0x0F; - if ((c_upwards_slopes[tile_slope] & TrackdirToTrackdirBits(td)) != 0) { + if (IsDiagonalTrackdir(td)) { + if (IsBridgeTile(tile) && IsBridgeRamp(tile)) { + // it is bridge ramp, check if we are entering the bridge + if (GetBridgeRampDirection(tile) != TrackdirToExitdir(td)) return false; // no, we are living it, no penalty + // we are entering the bridge + // if the tile slope is downwards, then bridge ramp has not upward slope + uint tile_slope = GetTileSlope(tile, NULL) & 0x0F; + if ((c_upwards_slopes[tile_slope] & TrackdirToTrackdirBits(ReverseTrackdir(td))) != 0) return false; // tile under ramp goes down, no penalty + // tile under ramp isn't going down, so ramp must go up return true; + } else { + // not bridge ramp + if (IsTunnelTile(tile)) return false; // tunnel entry/exit doesn't slope + uint tile_slope = GetTileSlope(tile, NULL) & 0x0F; + if ((c_upwards_slopes[tile_slope] & TrackdirToTrackdirBits(td)) != 0) return true; // slopes uphill => apply penalty } } return false; |