OpenTTD Source  1.11.0-beta2
yapf_costbase.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef YAPF_COSTBASE_HPP
11 #define YAPF_COSTBASE_HPP
12 
14 struct CYapfCostBase {
21  inline static bool stSlopeCost(TileIndex tile, Trackdir td)
22  {
23  if (IsDiagonalTrackdir(td)) {
24  if (IsBridgeTile(tile)) {
25  /* it is bridge ramp, check if we are entering the bridge */
26  if (GetTunnelBridgeDirection(tile) != TrackdirToExitdir(td)) return false; // no, we are leaving it, no penalty
27  /* we are entering the bridge */
28  Slope tile_slope = GetTileSlope(tile);
30  return !HasBridgeFlatRamp(tile_slope, axis);
31  } else {
32  /* not bridge ramp */
33  if (IsTunnelTile(tile)) return false; // tunnel entry/exit doesn't slope
34  Slope tile_slope = GetTileSlope(tile);
35  return IsUphillTrackdir(tile_slope, td); // slopes uphill => apply penalty
36  }
37  }
38  return false;
39  }
40 };
41 
42 #endif /* YAPF_COSTBASE_HPP */
IsTunnelTile
static bool IsTunnelTile(TileIndex t)
Is this a tunnel (entrance)?
Definition: tunnel_map.h:34
TileIndex
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:78
DiagDirToAxis
static Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
Definition: direction_func.h:214
CYapfCostBase
Base implementation for cost accounting.
Definition: yapf_costbase.hpp:14
CYapfCostBase::stSlopeCost
static bool stSlopeCost(TileIndex tile, Trackdir td)
Does the given track direction on the given tile yield an uphill penalty?
Definition: yapf_costbase.hpp:21
IsBridgeTile
static bool IsBridgeTile(TileIndex t)
checks if there is a bridge on this tile
Definition: bridge_map.h:35
TrackdirToExitdir
static DiagDirection TrackdirToExitdir(Trackdir trackdir)
Maps a trackdir to the (4-way) direction the tile is exited when following that trackdir.
Definition: track_func.h:447
GetTileSlope
Slope GetTileSlope(TileIndex tile, int *h)
Return the slope of a given tile inside the map.
Definition: tile_map.cpp:59
Slope
Slope
Enumeration for the slope-type.
Definition: slope_type.h:48
GetTunnelBridgeDirection
static DiagDirection GetTunnelBridgeDirection(TileIndex t)
Get the direction pointing to the other end.
Definition: tunnelbridge_map.h:26
HasBridgeFlatRamp
bool HasBridgeFlatRamp(Slope tileh, Axis axis)
Determines if the track on a bridge ramp is flat or goes up/down.
Definition: tunnelbridge_cmd.cpp:142
IsUphillTrackdir
static bool IsUphillTrackdir(Slope slope, Trackdir dir)
Checks whether a trackdir on a specific slope is going uphill.
Definition: track_func.h:708
Axis
Axis
Allow incrementing of DiagDirDiff variables.
Definition: direction_type.h:123
Trackdir
Trackdir
Enumeration for tracks and directions.
Definition: track_type.h:70
IsDiagonalTrackdir
static bool IsDiagonalTrackdir(Trackdir trackdir)
Checks if a given Trackdir is diagonal.
Definition: track_func.h:639