OpenTTD Source: src/slope_func.h File Reference

OpenTTD Source 15.0-RC2

Functions
slope_func.h File Reference

Functions related to slopes. More...

`#include "core/math_func.hpp"`
`#include "slope_type.h"`
`#include "direction_type.h"`
`#include "tile_type.h"`

Go to the source code of this file.

## Functions
static constexpr bool | IsValidCorner (Corner corner)
| Rangecheck for Corner enumeration.
static constexpr bool | IsSteepSlope (Slope s)
| Checks if a slope is steep.
static constexpr bool | IsHalftileSlope (Slope s)
| Checks for non-continuous slope on halftile foundations.
static constexpr Slope | RemoveHalftileSlope (Slope s)
| Removes a halftile slope from a slope.
Slope | ComplementSlope (Slope s)
| Return the complement of a slope.
bool | IsSlopeWithOneCornerRaised (Slope s)
| Tests if a specific slope has exactly one corner raised.
Slope | SlopeWithOneCornerRaised (Corner corner)
| Returns the slope with a specific corner raised.
bool | HasSlopeHighestCorner (Slope s)
| Tests if a slope has a highest corner (i.e.
Corner | GetHighestSlopeCorner (Slope s)
| Returns the highest corner of a slope (one corner raised or a steep slope).
static constexpr Corner | GetHalftileSlopeCorner (Slope s)
| Returns the leveled halftile of a halftile slope.
static constexpr int | GetSlopeMaxZ (Slope s)
| Returns the height of the highest corner of a slope relative to TileZ (= minimal height)
static constexpr int | GetSlopeMaxPixelZ (Slope s)
| Returns the height of the highest corner of a slope relative to TileZ (= minimal height)
Corner | OppositeCorner (Corner corner)
| Returns the opposite corner.
bool | IsSlopeWithThreeCornersRaised (Slope s)
| Tests if a specific slope has exactly three corners raised.
Slope | SlopeWithThreeCornersRaised (Corner corner)
| Returns the slope with all except one corner raised.
Slope | SteepSlope (Corner corner)
| Returns a specific steep slope.
bool | IsInclinedSlope (Slope s)
| Tests if a specific slope is an inclined slope.
DiagDirection | GetInclinedSlopeDirection (Slope s)
| Returns the direction of an inclined slope.
Slope | InclinedSlope (DiagDirection dir)
| Returns the slope that is inclined in a specific direction.
static constexpr Slope | HalftileSlope (Slope s, Corner corner)
| Adds a halftile slope to a slope.
bool | IsFoundation (Foundation f)
| Tests for FOUNDATION_NONE.
bool | IsLeveledFoundation (Foundation f)
| Tests if the foundation is a leveled foundation.
bool | IsInclinedFoundation (Foundation f)
| Tests if the foundation is an inclined foundation.
bool | IsNonContinuousFoundation (Foundation f)
| Tests if a foundation is a non-continuous foundation, i.e.
Corner | GetHalftileFoundationCorner (Foundation f)
| Returns the halftile corner of a halftile-foundation.
bool | IsSpecialRailFoundation (Foundation f)
| Tests if a foundation is a special rail foundation for single horizontal/vertical track.
Corner | GetRailFoundationCorner (Foundation f)
| Returns the track corner of a special rail foundation.
Foundation | FlatteningFoundation (Slope s)
| Returns the foundation needed to flatten a slope.
Foundation | InclinedFoundation (Axis axis)
| Returns the along a specific axis inclined foundation.
Foundation | HalftileFoundation (Corner corner)
| Returns the halftile foundation for single horizontal/vertical track.
Foundation | SpecialRailFoundation (Corner corner)
| Returns the special rail foundation for single horizontal/vertical track.
uint | SlopeToSpriteOffset (Slope s)
| Returns the Sprite offset for a given Slope.

## Detailed Description

Functions related to slopes.

Definition in file slope_func.h.

## Function Documentation

## ◆ ComplementSlope()

Slope ComplementSlope | ( | Slope | s | ) |
| inline

Return the complement of a slope.

This method returns the complement of a slope. The complement of a slope is a slope with raised corner which aren't raised in the given slope.

Precondition
  The slope must neither be steep nor a halftile slope.

Parameters

  s | The Slope to get the complement.

Returns
  a complement Slope of the given slope.

Definition at line 76 of file slope_func.h.

References IsHalftileSlope(), IsSteepSlope(), and SLOPE_ELEVATED.

Referenced by CmdBuildTunnel(), DrawTrackBits(), DrawTrackDetails(), FlowRiver(), IsRoadAllowedHere(), IsSlopeWithThreeCornersRaised(), RiverMakeWider(), and SlopeWithThreeCornersRaised().

## ◆ FlatteningFoundation()

Foundation FlatteningFoundation | ( | Slope | s | ) |
| inline

Returns the foundation needed to flatten a slope.

The returned foundation is either FOUNDATION_NONE if the tile was already flat, or FOUNDATION_LEVELED.

Parameters

  s | The current Slope.

Returns
  The needed Foundation.

Definition at line 369 of file slope_func.h.

References FOUNDATION_LEVELED, FOUNDATION_NONE, and SLOPE_FLAT.

Referenced by GetBridgeFoundation(), and GetFoundation_Town().

## ◆ GetHalftileFoundationCorner()

Corner GetHalftileFoundationCorner | ( | Foundation | f | ) |
| inline

Returns the halftile corner of a halftile-foundation.

Precondition
  f != FOUNDATION_STEEP_BOTH

Parameters

  f | The Foundation.

Returns
  The Corner with track.

Definition at line 333 of file slope_func.h.

References FOUNDATION_HALFTILE_N, FOUNDATION_HALFTILE_W, and IsInsideMM().

Referenced by ApplyFoundationToSlope(), DrawFoundation(), and DrawTrackBits().

## ◆ GetHalftileSlopeCorner()

static constexpr Corner GetHalftileSlopeCorner | ( | Slope | s | ) |
| inlinestaticconstexpr

Returns the leveled halftile of a halftile slope.

Precondition
  The slope must be a halftile slope.

Parameters

  s | The Slope.

Returns
  The corner of the leveled halftile.

Definition at line 148 of file slope_func.h.

References IsHalftileSlope().

Referenced by DrawAutorailSelection(), DrawRailCatenaryRailway(), DrawTileSelection(), DrawTileSelectionRect(), DrawTrackDetails(), GetPartialPixelZ(), and GetSlopePixelZOnEdge().

## ◆ GetHighestSlopeCorner()

Corner GetHighestSlopeCorner | ( | Slope | s | ) |
| inline

Returns the highest corner of a slope (one corner raised or a steep slope).

Precondition
  The slope must be a slope with one corner raised or a steep slope. A halftile slope is ignored.

Parameters

  s | The Slope.

Returns
  Highest corner.

Definition at line 126 of file slope_func.h.

References RemoveHalftileSlope(), SLOPE_E, SLOPE_N, SLOPE_S, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, and SLOPE_W.

Referenced by ApplyFoundationToSlope(), CheckRoadSlope(), DrawFoundation(), DrawTrackBits(), DrawTrackDetails(), FloodHalftile(), GetRailFoundation(), GetRoadFoundation(), and RemoveRoad().

## ◆ GetInclinedSlopeDirection()

DiagDirection GetInclinedSlopeDirection | ( | Slope | s | ) |
| inline

Returns the direction of an inclined slope.

Parameters

  s | A Slope

Returns
  The direction the slope goes up in. Or INVALID_DIAGDIR if the slope is not an inclined slope.

Definition at line 239 of file slope_func.h.

References DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, INVALID_DIAGDIR, SLOPE_NE, SLOPE_NW, SLOPE_SE, and SLOPE_SW.

Referenced by AfterLoadGame(), CmdBuildDock(), CmdBuildLock(), CmdBuildTunnel(), GetOtherAqueductEnd(), BuildDocksToolbarWindow::OnPlaceObject(), BuildDocksToolbarWindow::OnPlacePresize(), RiverMakeWider(), and ShipTestUpDownOnLock().

## ◆ GetRailFoundationCorner()

Corner GetRailFoundationCorner | ( | Foundation | f | ) |
| inline

Returns the track corner of a special rail foundation.

Parameters

  f | The Foundation.

Returns
  The Corner with track.

Definition at line 356 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsSpecialRailFoundation().

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

## ◆ GetSlopeMaxPixelZ()

static constexpr int GetSlopeMaxPixelZ | ( | Slope | s | ) |
| inlinestaticconstexpr

Returns the height of the highest corner of a slope relative to TileZ (= minimal height)

Parameters

  s | The Slope.

Returns
  Relative height of highest corner.

Definition at line 173 of file slope_func.h.

References GetSlopeMaxZ(), and TILE_HEIGHT.

Referenced by GetPartialPixelZ().

## ◆ GetSlopeMaxZ()

static constexpr int GetSlopeMaxZ | ( | Slope | s | ) |
| inlinestaticconstexpr

Returns the height of the highest corner of a slope relative to TileZ (= minimal height)

Parameters

  s | The Slope.

Returns
  Relative height of highest corner.

Definition at line 160 of file slope_func.h.

References IsSteepSlope(), and SLOPE_FLAT.

Referenced by AutoslopeCheckForEntranceEdge(), CheckBuildableTile(), and GetSlopeMaxPixelZ().

## ◆ HalftileFoundation()

Foundation HalftileFoundation | ( | Corner | corner | ) |
| inline

Returns the halftile foundation for single horizontal/vertical track.

Parameters

  corner | The Corner with the track.

Returns
  The wanted Foundation.

Definition at line 391 of file slope_func.h.

References FOUNDATION_HALFTILE_W, and IsValidCorner().

Referenced by DrawTrackBits(), and GetRailFoundation().

## ◆ HalftileSlope()

static constexpr Slope HalftileSlope | ( | Slope | s,
|  | Corner | corner
| ) |  |
| inlinestaticconstexpr

Adds a halftile slope to a slope.

Parameters

  s | Slope without a halftile slope.
  corner | The Corner of the halftile.

Returns
  The Slope s with the halftile slope added.

Definition at line 274 of file slope_func.h.

References IsValidCorner(), and SLOPE_HALFTILE.

Referenced by ApplyFoundationToSlope().

## ◆ HasSlopeHighestCorner()

bool HasSlopeHighestCorner | ( | Slope | s | ) |
| inline

Tests if a slope has a highest corner (i.e.

one corner raised or a steep slope).

Note: A halftile slope is ignored.

Parameters

  s | The Slope.

Returns
  true iff the slope has a highest corner.

Definition at line 113 of file slope_func.h.

References IsSlopeWithOneCornerRaised(), IsSteepSlope(), and RemoveHalftileSlope().

Referenced by GetBridgeFoundation().

## ◆ InclinedFoundation()

Foundation InclinedFoundation | ( | Axis | axis | ) |
| inline

Returns the along a specific axis inclined foundation.

Parameters

  axis | The Axis.

Returns
  The needed Foundation.

Definition at line 380 of file slope_func.h.

References AXIS_X, FOUNDATION_INCLINED_X, and FOUNDATION_INCLINED_Y.

Referenced by GetBridgeFoundation().

## ◆ InclinedSlope()

Slope InclinedSlope | ( | DiagDirection | dir | ) |
| inline

Returns the slope that is inclined in a specific direction.

Parameters

  dir | A DiagDirection

Returns
  The Slope that goes up in direction dir.

Definition at line 256 of file slope_func.h.

References DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, SLOPE_NE, SLOPE_NW, SLOPE_SE, and SLOPE_SW.

Referenced by AdjustTileh(), CanBuildDepotByTileh(), GrowTownWithBridge(), and GrowTownWithTunnel().

## ◆ IsFoundation()

bool IsFoundation | ( | Foundation | f | ) |
| inline

Tests for FOUNDATION_NONE.

Parameters

  f | Maybe a Foundation.

Returns
  true iff f is a foundation.

Definition at line 287 of file slope_func.h.

References FOUNDATION_NONE.

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

## ◆ IsHalftileSlope()

static constexpr bool IsHalftileSlope | ( | Slope | s | ) |
| inlinestaticconstexpr

Checks for non-continuous slope on halftile foundations.

Parameters

  s | The given Slope.

Returns
  True if the slope is non-continuous, else false.

Definition at line 47 of file slope_func.h.

References SLOPE_HALFTILE.

Referenced by ComplementSlope(), DrawAutorailSelection(), DrawRailCatenaryRailway(), DrawTileSelection(), DrawTileSelectionRect(), DrawTrackDetails(), GetHalftileSlopeCorner(), GetPartialPixelZ(), GetSlopePixelZOnEdge(), GetSlopeZInCorner(), and IsSlopeWithThreeCornersRaised().

## ◆ IsInclinedFoundation()

bool IsInclinedFoundation | ( | Foundation | f | ) |
| inline

Tests if the foundation is an inclined foundation.

Parameters

  f | The Foundation.

Returns
  true iff f is an inclined foundation.

Definition at line 309 of file slope_func.h.

References FOUNDATION_INCLINED_X, and FOUNDATION_INCLINED_Y.

Referenced by DrawFoundation().

## ◆ IsInclinedSlope()

bool IsInclinedSlope | ( | Slope | s | ) |
| inline

Tests if a specific slope is an inclined slope.

Parameters

  s | The Slope

Returns
  true iff the slope is inclined.

Definition at line 228 of file slope_func.h.

References SLOPE_NE, SLOPE_NW, SLOPE_SE, and SLOPE_SW.

Referenced by CmdBuildCanal(), RiverFlowsDown(), and RiverMakeWider().

## ◆ IsLeveledFoundation()

bool IsLeveledFoundation | ( | Foundation | f | ) |
| inline

Tests if the foundation is a leveled foundation.

Parameters

  f | The Foundation.

Returns
  true iff f is a leveled foundation.

Definition at line 298 of file slope_func.h.

References FOUNDATION_LEVELED.

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

## ◆ IsNonContinuousFoundation()

bool IsNonContinuousFoundation | ( | Foundation | f | ) |
| inline

Tests if a foundation is a non-continuous foundation, i.e.

halftile-foundation or FOUNDATION_STEEP_BOTH.

Parameters

  f | The Foundation.

Returns
  true iff f is a non-continuous foundation

Definition at line 320 of file slope_func.h.

References FOUNDATION_HALFTILE_N, FOUNDATION_STEEP_BOTH, and IsInsideMM().

Referenced by ApplyFoundationToSlope(), DrawFoundation(), DrawTrackBits(), and FloodHalftile().

## ◆ IsSlopeWithOneCornerRaised()

bool IsSlopeWithOneCornerRaised | ( | Slope | s | ) |
| inline

Tests if a specific slope has exactly one corner raised.

Parameters

  s | The Slope

Returns
  true iff exactly one corner is raised

Definition at line 88 of file slope_func.h.

References SLOPE_E, SLOPE_N, SLOPE_S, and SLOPE_W.

Referenced by CanPlantTreesOnTile(), CheckRoadSlope(), CmdBuildSingleRail(), CmdPlantTree(), CmdRemoveSingleRail(), DoFloodTile(), FloodHalftile(), GetFloodingBehaviour(), GetRailFoundation(), GetRoadFoundation(), GrowTownWithTunnel(), HasSlopeHighestCorner(), IsSlopeWithThreeCornersRaised(), RiverMakeWider(), and TestAutoslopeOnRailTile().

## ◆ IsSlopeWithThreeCornersRaised()

bool IsSlopeWithThreeCornersRaised | ( | Slope | s | ) |
| inline

Tests if a specific slope has exactly three corners raised.

Parameters

  s | The Slope

Returns
  true iff exactly three corners are raised

Definition at line 195 of file slope_func.h.

References ComplementSlope(), IsHalftileSlope(), IsSlopeWithOneCornerRaised(), and IsSteepSlope().

Referenced by FloodHalftile(), GetRailFoundation(), and RiverMakeWider().

## ◆ IsSpecialRailFoundation()

bool IsSpecialRailFoundation | ( | Foundation | f | ) |
| inline

Tests if a foundation is a special rail foundation for single horizontal/vertical track.

Parameters

  f | The Foundation.

Returns
  true iff f is a special rail foundation for single horizontal/vertical track.

Definition at line 345 of file slope_func.h.

References FOUNDATION_RAIL_N, FOUNDATION_RAIL_W, and IsInsideMM().

Referenced by ApplyFoundationToSlope(), DrawFoundation(), and GetRailFoundationCorner().

## ◆ IsSteepSlope()

static constexpr bool IsSteepSlope | ( | Slope | s | ) |
| inlinestaticconstexpr

Checks if a slope is steep.

Parameters

  s | The given Slope.

Returns
  True if the slope is steep, else false.

Definition at line 36 of file slope_func.h.

References SLOPE_STEEP.

Referenced by ApplyFoundationToSlope(), CanBuildDepotByTileh(), CanBuildHouseHere(), CheckBuildableTile(), CheckRailSlope(), CheckRoadSlope(), CmdBuildRoad(), CmdPlaceHouse(), ComplementSlope(), DrawFoundation(), DrawRailCatenaryRailway(), DrawTileSelection(), DrawTileSelectionRect(), DrawTrackBits(), FloodHalftile(), GetRailFoundation(), GetRoadFoundation(), GetSlopeMaxZ(), GrowTownWithTunnel(), HasSlopeHighestCorner(), IsSlopeWithThreeCornersRaised(), IsValidTileForWaypoint(), RemoveRoad(), RiverMakeWider(), and TownActionBuildStatue().

## ◆ IsValidCorner()

static constexpr bool IsValidCorner | ( | Corner | corner | ) |
| inlinestaticconstexpr

Rangecheck for Corner enumeration.

Parameters

  corner | A Corner.

Returns
  true iff corner is in a valid range.

Definition at line 24 of file slope_func.h.

References IsInsideMM().

Referenced by CornerToTrackBits(), DrawTrackBits(), HalftileFoundation(), HalftileSlope(), SlopeWithOneCornerRaised(), and SpecialRailFoundation().

## ◆ OppositeCorner()

Corner OppositeCorner | ( | Corner | corner | ) |
| inline

Returns the opposite corner.

Parameters

  corner | A Corner.

Returns
  The opposite corner to "corner".

Definition at line 184 of file slope_func.h.

Referenced by ApplyFoundationToSlope(), DrawAutorailSelection(), DrawTileSelectionRect(), DrawTrackBits(), DrawTrackDetails(), FloodHalftile(), GetRailFoundation(), and SteepSlope().

## ◆ RemoveHalftileSlope()

static constexpr Slope RemoveHalftileSlope | ( | Slope | s | ) |
| inlinestaticconstexpr

Removes a halftile slope from a slope.

Non-halftile slopes remain unmodified.

Parameters

  s | A Slope.

Returns
  The slope s without its halftile slope.

Definition at line 60 of file slope_func.h.

Referenced by DrawAutorailSelection(), DrawTileSelection(), DrawTrackFence(), GetHighestSlopeCorner(), GetPartialPixelZ(), GetSlopePixelZOnEdge(), HasSlopeHighestCorner(), IsUphillTrackdir(), and TestAutoslopeOnRailTile().

## ◆ SlopeToSpriteOffset()

uint SlopeToSpriteOffset | ( | Slope | s | ) |
| inline

Returns the Sprite offset for a given Slope.

Parameters

  s | The Slope to get the offset for.

Returns
  The sprite offset for this Slope.

Definition at line 415 of file slope_func.h.

References _slope_to_sprite_offset.

Referenced by DrawTile_TunnelBridge(), DrawTileSelectionRect(), DrawTrackBits(), and GetRoadGroundSprite().

## ◆ SlopeWithOneCornerRaised()

Slope SlopeWithOneCornerRaised | ( | Corner | corner | ) |
| inline

Returns the slope with a specific corner raised.

Parameters

  corner | The Corner.

Returns
  The Slope with corner "corner" raised.

Definition at line 99 of file slope_func.h.

References IsValidCorner().

Referenced by ApplyFoundationToSlope(), CheckRoadSlope(), DrawFoundation(), DrawTileSelectionRect(), GetRailFoundation(), GetRoadFoundation(), GetSlopePixelZOnEdge(), GetSlopeZInCorner(), RemoveRoad(), and SlopeWithThreeCornersRaised().

## ◆ SlopeWithThreeCornersRaised()

Slope SlopeWithThreeCornersRaised | ( | Corner | corner | ) |
| inline

Returns the slope with all except one corner raised.

Parameters

  corner | The Corner.

Returns
  The Slope with all corners but "corner" raised.

Definition at line 206 of file slope_func.h.

References ComplementSlope(), and SlopeWithOneCornerRaised().

Referenced by ApplyFoundationToSlope(), DrawAutorailSelection(), DrawFoundation(), DrawTrackBits(), GetRailFoundation(), and SteepSlope().

## ◆ SpecialRailFoundation()

Foundation SpecialRailFoundation | ( | Corner | corner | ) |
| inline

Returns the special rail foundation for single horizontal/vertical track.

Parameters

  corner | The Corner with the track.

Returns
  The wanted Foundation.

Definition at line 403 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsValidCorner().

Referenced by GetRailFoundation().

## ◆ SteepSlope()

Slope SteepSlope | ( | Corner | corner | ) |
| inline

Returns a specific steep slope.

Parameters

  corner | A Corner.

Returns
  The steep Slope with "corner" as highest corner.

Definition at line 217 of file slope_func.h.

References OppositeCorner(), SLOPE_STEEP, and SlopeWithThreeCornersRaised().

Referenced by GetSlopeZInCorner().