OpenTTD Source: src/pathfinder/yapf/yapf_costbase.hpp Source File

OpenTTD Source 15.3

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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
10#ifndef YAPF_COSTBASE_HPP
11#define YAPF_COSTBASE_HPP
12
13#include "../../bridge_map.h"
14#include "../../tile_type.h"
15#include "../../track_func.h"
16#include "../../track_type.h"
17#include "../../tunnelbridge_map.h"
18
20 struct CYapfCostBase {
27 static inline bool stSlopeCost(TileIndex tile, Trackdir td)
28 {
29 if (IsDiagonalTrackdir(td)) {
30 if (IsBridgeTile(tile)) {
31 /* it is bridge ramp, check if we are entering the bridge */
32 if (GetTunnelBridgeDirection(tile) != TrackdirToExitdir(td)) return false; // no, we are leaving it, no penalty
33 /* we are entering the bridge */
34 Slope tile_slope = GetTileSlope(tile);
35 Axis axis = DiagDirToAxis(GetTunnelBridgeDirection(tile));
36 return !HasBridgeFlatRamp(tile_slope, axis);
37 } else {
38 /* not bridge ramp */
39 if (IsTunnelTile(tile)) return false; // tunnel entry/exit doesn't slope
40 Slope tile_slope = GetTileSlope(tile);
41 return IsUphillTrackdir(tile_slope, td); // slopes uphill => apply penalty
42 }
43 }
44 return false;
45 }
46};
47
48#endif /* YAPF_COSTBASE_HPP */
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:131
IsBridgeTile
bool IsBridgeTile(Tile t)
checks if there is a bridge on this tile
Definition bridge_map.h:35
DiagDirToAxis
Axis DiagDirToAxis(DiagDirection d)
Convert a DiagDirection to the axis.
Definition direction_func.h:214
Axis
Axis
Allow incrementing of DiagDirDiff variables.
Definition direction_type.h:123
Slope
Slope
Enumeration for the slope-type.
Definition slope_type.h:48
CYapfCostBase
Base implementation for cost accounting.
Definition yapf_costbase.hpp:20
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:27
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > >
GetTileSlope
Slope GetTileSlope(TileIndex tile)
Return the slope of a given tile inside the map.
Definition tile_map.h:279
IsUphillTrackdir
bool IsUphillTrackdir(Slope slope, Trackdir dir)
Checks whether a trackdir on a specific slope is going uphill.
Definition track_func.h:700
IsDiagonalTrackdir
bool IsDiagonalTrackdir(Trackdir trackdir)
Checks if a given Trackdir is diagonal.
Definition track_func.h:631
TrackdirToExitdir
DiagDirection TrackdirToExitdir(Trackdir trackdir)
Maps a trackdir to the (4-way) direction the tile is exited when following that trackdir.
Definition track_func.h:439
Trackdir
Trackdir
Enumeration for tracks and directions.
Definition track_type.h:66
IsTunnelTile
bool IsTunnelTile(Tile t)
Is this a tunnel (entrance)?
Definition tunnel_map.h:34
GetTunnelBridgeDirection
DiagDirection GetTunnelBridgeDirection(Tile t)
Get the direction pointing to the other end.
Definition tunnelbridge_map.h:26