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

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
sThe 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 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
sThe 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().

◆ GetHalftileFoundationCorner()

Corner GetHalftileFoundationCorner ( Foundation  f)
inline

Returns the halftile corner of a halftile-foundation.

Precondition
f != FOUNDATION_STEEP_BOTH
Parameters
fThe 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().

◆ 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
sThe Slope.
Returns
The corner of the leveled halftile.

Definition at line 148 of file slope_func.h.

References IsHalftileSlope().

Referenced by DrawAutorailSelection(), DrawTileSelectionRect(), 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
sThe Slope.
Returns
Highest corner.

Definition at line 126 of file slope_func.h.

References RemoveHalftileSlope(), SLOPE_STEEP_W, and SLOPE_W.

Referenced by ApplyFoundationToSlope(), CheckRoadSlope(), GetRailFoundation(), and GetRoadFoundation().

◆ GetInclinedSlopeDirection()

DiagDirection GetInclinedSlopeDirection ( Slope  s)
inline

Returns the direction of an inclined slope.

Parameters
sA 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 CmdBuildLock(), GetOtherAqueductEnd(), RiverMakeWider(), and ShipTestUpDownOnLock().

◆ GetRailFoundationCorner()

Corner GetRailFoundationCorner ( Foundation  f)
inline

Returns the track corner of a special rail foundation.

Parameters
fThe Foundation.
Returns
The Corner with track.

Definition at line 356 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsSpecialRailFoundation().

Referenced by ApplyFoundationToSlope().

◆ GetSlopeMaxPixelZ()

static constexpr int GetSlopeMaxPixelZ ( Slope  s)
inlinestaticconstexpr

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

Parameters
sThe Slope.
Returns
Relative height of highest corner.

Definition at line 173 of file slope_func.h.

References GetSlopeMaxZ(), and TILE_HEIGHT.

◆ GetSlopeMaxZ()

static constexpr int GetSlopeMaxZ ( Slope  s)
inlinestaticconstexpr

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

Parameters
sThe 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
cornerThe 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 GetRailFoundation().

◆ HalftileSlope()

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

Adds a halftile slope to a slope.

Parameters
sSlope without a halftile slope.
cornerThe 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
sThe 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
axisThe 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
dirA 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(), GrowTownWithTunnel(), and RedundantBridgeExistsNearby().

◆ IsFoundation()

bool IsFoundation ( Foundation  f)
inline

Tests for FOUNDATION_NONE.

Parameters
fMaybe 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
sThe 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(), DrawTileSelectionRect(), DrawTrackDetails(), GetHalftileSlopeCorner(), GetSlopePixelZOnEdge(), GetSlopeZInCorner(), and IsSlopeWithThreeCornersRaised().

◆ IsInclinedFoundation()

bool IsInclinedFoundation ( Foundation  f)
inline

Tests if the foundation is an inclined foundation.

Parameters
fThe 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.

◆ IsInclinedSlope()

bool IsInclinedSlope ( Slope  s)
inline

Tests if a specific slope is an inclined slope.

Parameters
sThe 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 FlowsDown(), and RiverMakeWider().

◆ IsLeveledFoundation()

bool IsLeveledFoundation ( Foundation  f)
inline

Tests if the foundation is a leveled foundation.

Parameters
fThe Foundation.
Returns
true iff f is a leveled foundation.

Definition at line 298 of file slope_func.h.

References FOUNDATION_LEVELED.

Referenced by ApplyFoundationToSlope().

◆ IsNonContinuousFoundation()

bool IsNonContinuousFoundation ( Foundation  f)
inline

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

halftile-foundation or FOUNDATION_STEEP_BOTH.

Parameters
fThe 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().

◆ IsSlopeWithOneCornerRaised()

bool IsSlopeWithOneCornerRaised ( Slope  s)
inline

Tests if a specific slope has exactly one corner raised.

Parameters
sThe 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(), DoFloodTile(), GetFloodingBehaviour(), GetRoadFoundation(), GrowTownWithTunnel(), HasSlopeHighestCorner(), IsSlopeWithThreeCornersRaised(), and RiverMakeWider().

◆ IsSlopeWithThreeCornersRaised()

bool IsSlopeWithThreeCornersRaised ( Slope  s)
inline

Tests if a specific slope has exactly three corners raised.

Parameters
sThe 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 RiverMakeWider().

◆ IsSpecialRailFoundation()

bool IsSpecialRailFoundation ( Foundation  f)
inline

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

Parameters
fThe 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(), and GetRailFoundationCorner().

◆ IsSteepSlope()

static constexpr bool IsSteepSlope ( Slope  s)
inlinestaticconstexpr

◆ IsValidCorner()

static constexpr bool IsValidCorner ( Corner  corner)
inlinestaticconstexpr

Rangecheck for Corner enumeration.

Parameters
cornerA Corner.
Returns
true iff corner is in a valid range.

Definition at line 24 of file slope_func.h.

References IsInsideMM().

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

◆ OppositeCorner()

Corner OppositeCorner ( Corner  corner)
inline

Returns the opposite corner.

Parameters
cornerA Corner.
Returns
The opposite corner to "corner".

Definition at line 184 of file slope_func.h.

Referenced by ApplyFoundationToSlope(), DrawAutorailSelection(), and SteepSlope().

◆ RemoveHalftileSlope()

static constexpr Slope RemoveHalftileSlope ( Slope  s)
inlinestaticconstexpr

Removes a halftile slope from a slope.

Non-halftile slopes remain unmodified.

Parameters
sA Slope.
Returns
The slope s without its halftile slope.

Definition at line 60 of file slope_func.h.

References SLOPE_HALFTILE_MASK.

Referenced by DrawAutorailSelection(), GetHighestSlopeCorner(), GetSlopePixelZOnEdge(), and HasSlopeHighestCorner().

◆ SlopeToSpriteOffset()

uint SlopeToSpriteOffset ( Slope  s)
inline

Returns the Sprite offset for a given Slope.

Parameters
sThe 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.

◆ SlopeWithOneCornerRaised()

Slope SlopeWithOneCornerRaised ( Corner  corner)
inline

Returns the slope with a specific corner raised.

Parameters
cornerThe Corner.
Returns
The Slope with corner "corner" raised.

Definition at line 99 of file slope_func.h.

References IsValidCorner().

Referenced by CheckRoadSlope(), GetRoadFoundation(), GetSlopePixelZOnEdge(), GetSlopeZInCorner(), and SlopeWithThreeCornersRaised().

◆ SlopeWithThreeCornersRaised()

Slope SlopeWithThreeCornersRaised ( Corner  corner)
inline

Returns the slope with all except one corner raised.

Parameters
cornerThe 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(), and SteepSlope().

◆ SpecialRailFoundation()

Foundation SpecialRailFoundation ( Corner  corner)
inline

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

Parameters
cornerThe Corner with the track.
Returns
The wanted Foundation.

Definition at line 403 of file slope_func.h.

References FOUNDATION_RAIL_W, and IsValidCorner().

◆ SteepSlope()

Slope SteepSlope ( Corner  corner)
inline

Returns a specific steep slope.

Parameters
cornerA 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().