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

## Detailed Description

Functions related to slopes.

Definition in file slope_func.h.

## Function Documentation

static Slope ComplementSlope | ( | Slope | s | ) | `[inline, static]`

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 71 of file slope_func.h.

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

Referenced by CmdBuildTunnel(), DrawTrackBits(), AITile::GetComplementSlope(), IsRoadAllowedHere(), IsSlopeWithThreeCornersRaised(), and SlopeWithThreeCornersRaised().

static Foundation FlatteningFoundation | ( | Slope | s | ) | `[inline, static]`

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 353 of file slope_func.h.

References FOUNDATION_LEVELED, FOUNDATION_NONE, and SLOPE_FLAT.

Referenced by GetFoundation_Town().

static Corner GetHalftileFoundationCorner | ( | Foundation | f | ) | `[inline, static]`

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 317 of file slope_func.h.

References FOUNDATION_HALFTILE_N, FOUNDATION_HALFTILE_W, and IsInsideMM().

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

static Corner GetHalftileSlopeCorner | ( | Slope | s | ) | `[inline, static]`

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 143 of file slope_func.h.

References IsHalftileSlope().

Referenced by DrawAutorailSelection(), DrawTileSelection(), DrawTileSelectionRect(), GetPartialZ(), and GetSlopeZOnEdge().

static Corner GetHighestSlopeCorner | ( | Slope | s | ) | `[inline, static]`

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 121 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(), DrawFoundation(), DrawTrackBits(), FloodHalftile(), and GetRailFoundation().

static DiagDirection GetInclinedSlopeDirection | ( | Slope | s | ) | `[inline, static]`

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 223 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 CmdBuildDock(), CmdBuildLock(), and CmdBuildTunnel().

static Corner GetRailFoundationCorner | ( | Foundation | f | ) | `[inline, static]`

Returns the track corner of a special rail foundation.

Parameters:

  | f | The Foundation.

Returns:
  The Corner with track.

Definition at line 340 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsSpecialRailFoundation().

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

static uint GetSlopeMaxZ | ( | Slope | s | ) | `[inline, static]`

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 155 of file slope_func.h.

References IsSteepSlope(), SLOPE_FLAT, and TILE_HEIGHT.

Referenced by AutoslopeCheckForEntranceEdge(), and GetPartialZ().

static Foundation HalftileFoundation | ( | Corner | corner | ) | `[inline, static]`

Returns the halftile foundation for single horizontal/vertical track.

Parameters:

  | corner | The Corner with the track.

Returns:
  The wanted Foundation.

Definition at line 375 of file slope_func.h.

References FOUNDATION_HALFTILE_W, and IsValidCorner().

Referenced by DrawTrackBits(), and GetRailFoundation().

static Slope HalftileSlope | ( | Slope | s,
|  | Corner | corner |
| ) |  |  | `[inline, static]`

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 258 of file slope_func.h.

References IsValidCorner(), and SLOPE_HALFTILE.

Referenced by ApplyFoundationToSlope().

static bool HasSlopeHighestCorner | ( | Slope | s | ) | `[inline, static]`

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 108 of file slope_func.h.

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

static Foundation InclinedFoundation | ( | Axis | axis | ) | `[inline, static]`

Returns the along a specific axis inclined foundation.

Parameters:

  | axis | The Axis.

Returns:
  The needed Foundation.

Definition at line 364 of file slope_func.h.

References AXIS_X, FOUNDATION_INCLINED_X, and FOUNDATION_INCLINED_Y.

static Slope InclinedSlope | ( | DiagDirection | dir | ) | `[inline, static]`

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 240 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(), and GrowTownWithBridge().

static bool IsFoundation | ( | Foundation | f | ) | `[inline, static]`

Tests for FOUNDATION_NONE.

Parameters:

  | f | Maybe a Foundation.

Returns:
  true iff f is a foundation.

Definition at line 271 of file slope_func.h.

References FOUNDATION_NONE.

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

static bool IsHalftileSlope | ( | Slope | s | ) | `[inline, static]`

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 42 of file slope_func.h.

References SLOPE_HALFTILE.

Referenced by ComplementSlope(), DrawAutorailSelection(), DrawCatenaryRailway(), DrawTileSelection(), DrawTileSelectionRect(), GetHalftileSlopeCorner(), GetPartialZ(), GetSlopeZInCorner(), GetSlopeZOnEdge(), AITile::IsHalftileSlope(), and IsSlopeWithThreeCornersRaised().

static bool IsInclinedFoundation | ( | Foundation | f | ) | `[inline, static]`

Tests if the foundation is an inclined foundation.

Parameters:

  | f | The Foundation.

Returns:
  true iff f is an inclined foundation.

Definition at line 293 of file slope_func.h.

References FOUNDATION_INCLINED_X, and FOUNDATION_INCLINED_Y.

Referenced by DrawFoundation().

static bool IsInclinedSlope | ( | Slope | s | ) | `[inline, static]`

Tests if a specific slope is an inclined slope.

Parameters:

  | s | The Slope

Returns:
  true iff the slope is inclined.

Definition at line 212 of file slope_func.h.

References SLOPE_NE, SLOPE_NW, SLOPE_SE, and SLOPE_SW.

Referenced by CmdBuildCanal().

static bool IsLeveledFoundation | ( | Foundation | f | ) | `[inline, static]`

Tests if the foundation is a leveled foundation.

Parameters:

  | f | The Foundation.

Returns:
  true iff f is a leveled foundation.

Definition at line 282 of file slope_func.h.

References FOUNDATION_LEVELED.

Referenced by ApplyFoundationToSlope(), and DrawFoundation().

static bool IsNonContinuousFoundation | ( | Foundation | f | ) | `[inline, static]`

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 304 of file slope_func.h.

References FOUNDATION_HALFTILE_N, FOUNDATION_STEEP_BOTH, and IsInsideMM().

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

static bool IsSlopeWithOneCornerRaised | ( | Slope | s | ) | `[inline, static]`

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 83 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(), HasSlopeHighestCorner(), IsSlopeWithThreeCornersRaised(), and TestAutoslopeOnRailTile().

static bool IsSlopeWithThreeCornersRaised | ( | Slope | s | ) | `[inline, static]`

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 179 of file slope_func.h.

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

Referenced by FloodHalftile(), and GetRailFoundation().

static bool IsSpecialRailFoundation | ( | Foundation | f | ) | `[inline, static]`

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 329 of file slope_func.h.

References FOUNDATION_RAIL_N, FOUNDATION_RAIL_W, and IsInsideMM().

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

static bool IsSteepSlope | ( | Slope | s | ) | `[inline, static]`

Checks if a slope is steep.

Parameters:

  | s | The given Slope.

Returns:
  True if the slope is steep, else false.

Definition at line 31 of file slope_func.h.

References SLOPE_STEEP.

Referenced by ApplyFoundationToSlope(), AutoslopeCheckForEntranceEdge(), CanBuildHouseHere(), CheckFlatLandBelow(), CheckRailSlope(), CheckRoadSlope(), CmdBuildRoad(), CmdBuildRoadDepot(), CmdBuildTrainDepot(), CmdBuildTrainWaypoint(), ComplementSlope(), DrawCatenaryRailway(), DrawFoundation(), DrawTileSelection(), DrawTileSelectionRect(), DrawTrackBits(), FloodHalftile(), GetRailFoundation(), GetRoadFoundation(), GetSlopeMaxZ(), HasSlopeHighestCorner(), IsSlopeWithThreeCornersRaised(), AITile::IsSteepSlope(), LookupWithBuildOnSlopes(), and RemoveRoad().

static bool IsValidCorner | ( | Corner | corner | ) | `[inline, static]`

Rangecheck for Corner enumeration.

Parameters:

  | corner | A Corner.

Returns:
  true iff corner is in a valid range.

Definition at line 19 of file slope_func.h.

References IsInsideMM().

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

static Corner OppositeCorner | ( | Corner | corner | ) | `[inline, static]`

Returns the opposite corner.

Parameters:

  | corner | A Corner.

Returns:
  The opposite corner to "corner".

Definition at line 168 of file slope_func.h.

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

static Slope RemoveHalftileSlope | ( | Slope | s | ) | `[inline, static]`

Removes a halftile slope from a slope.

Non-halftile slopes remain unmodified.

Parameters:

  | s | A Slope.

Returns:
  The slope s without it's halftile slope.

Definition at line 55 of file slope_func.h.

References SLOPE_HALFTILE_MASK.

Referenced by DrawAutorailSelection(), DrawTileSelection(), DrawTrackFence_NS_1(), DrawTrackFence_NS_2(), DrawTrackFence_WE_1(), DrawTrackFence_WE_2(), GetHighestSlopeCorner(), GetPartialZ(), GetSlopeZOnEdge(), HasSlopeHighestCorner(), IsUphillTrackdir(), and TestAutoslopeOnRailTile().

static Slope SlopeWithOneCornerRaised | ( | Corner | corner | ) | `[inline, static]`

Returns the slope with a specific corner raised.

Parameters:

  | corner | The Corner.

Returns:
  The Slope with corner "corner" raised.

Definition at line 94 of file slope_func.h.

References IsValidCorner().

Referenced by ApplyFoundationToSlope(), DrawFoundation(), DrawTileSelectionRect(), GetRailFoundation(), GetSlopeZInCorner(), GetSlopeZOnEdge(), and SlopeWithThreeCornersRaised().

static Slope SlopeWithThreeCornersRaised | ( | Corner | corner | ) | `[inline, static]`

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 190 of file slope_func.h.

References ComplementSlope(), and SlopeWithOneCornerRaised().

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

static Foundation SpecialRailFoundation | ( | Corner | corner | ) | `[inline, static]`

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

Parameters:

  | corner | The Corner with the track.

Returns:
  The wanted Foundation.

Definition at line 387 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsValidCorner().

Referenced by GetRailFoundation().

static Slope SteepSlope | ( | Corner | corner | ) | `[inline, static]`

Returns a specific steep slope.

Parameters:

  | corner | A Corner.

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

Definition at line 201 of file slope_func.h.

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

Referenced by GetSlopeZInCorner().