OpenTTD Source 20260531-master-g0e951f3528
direction_func.h File Reference

Different functions related to conversions between directions. More...

#include "direction_type.h"

Go to the source code of this file.

Functions

bool IsValidDiagDirection (DiagDirection d)
 Checks if an integer value is a valid DiagDirection.
bool IsValidDirection (Direction d)
 Checks if an integer value is a valid Direction.
bool IsValidAxis (Axis d)
 Checks if an integer value is a valid Axis.
Direction ReverseDir (Direction d)
 Return the reverse of a direction.
DirDiff DirDifference (Direction d0, Direction d1)
 Calculate the difference between two directions.
DirDiff ChangeDirDiff (DirDiff d, DirDiff delta)
 Applies two differences together.
DirDiff LimitDirDiff (DirDiff d)
 Limit a direction difference to up to 45 degrees.
Direction ChangeDir (Direction d, DirDiff delta)
 Change a direction by a given difference.
DiagDirection ReverseDiagDir (DiagDirection d)
 Returns the reverse direction of the given DiagDirection.
DiagDirDiff DiagDirDifference (DiagDirection d0, DiagDirection d1)
 Calculate the difference between two DiagDirection values.
DiagDirection ChangeDiagDir (DiagDirection d, DiagDirDiff delta)
 Applies a difference on a DiagDirection.
DiagDirection DirToDiagDir (Direction dir)
 Convert a Direction to a DiagDirection.
Direction DiagDirToDir (DiagDirection dir)
 Convert a DiagDirection to a Direction.
Axis OtherAxis (Axis a)
 Select the other axis as provided.
Axis DiagDirToAxis (DiagDirection d)
 Convert a DiagDirection to the axis.
DiagDirection AxisToDiagDir (Axis a)
 Converts an Axis to a DiagDirection.
DiagDirections AxisToDiagDirs (Axis a)
 Converts an Axis to DiagDirections.
Direction AxisToDirection (Axis a)
 Converts an Axis to a Direction.
DiagDirection XYNSToDiagDir (Axis xy, uint ns)
 Convert an axis and a flag for north/south into a DiagDirection.
bool IsDiagonalDirection (Direction dir)
 Checks if a given Direction is diagonal.

Detailed Description

Different functions related to conversions between directions.

Definition in file direction_func.h.

Function Documentation

◆ AxisToDiagDir()

DiagDirection AxisToDiagDir ( Axis a)
inline

Converts an Axis to a DiagDirection.

This function returns the DiagDirection which belongs to the axis. As 2 directions are mapped to an axis this function returns the one which points to south, either south-west (on X axis) or south-east (on Y axis)

Parameters
aThe axis
Returns
The direction pointed to south

Definition at line 242 of file direction_func.h.

References IsValidAxis(), and to_underlying().

Referenced by AutoslopeCheckForAxis(), CmdBuildBridge(), CmdBuildLongRoad(), CmdBuildRailStation(), CmdBuildRoadWaypoint(), DeleteLastWagon(), DrawBridgePillars(), GetNorthernBridgeEnd(), GetSouthernBridgeEnd(), GetTileTrackStatus_Road(), and TrainApproachingCrossing().

◆ AxisToDiagDirs()

DiagDirections AxisToDiagDirs ( Axis a)
inline

Converts an Axis to DiagDirections.

This function returns both DiagDirections which belong to the axis.

Parameters
aThe axis
Returns
The DiagDirections.

Definition at line 257 of file direction_func.h.

References IsValidAxis(), NE, NW, SE, SW, and X.

Referenced by CalculateRoadStopCost(), CheckFlatLandRailStation(), DrawTile_Road(), MarkDirtyAdjacentLevelCrossingTiles(), UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval(), and UpdateLevelCrossing().

◆ AxisToDirection()

Direction AxisToDirection ( Axis a)
inline

Converts an Axis to a Direction.

This function returns the Direction which belongs to the axis. As 2 directions are mapped to an axis this function returns the one which points to south, either south-west (on X axis) or south-east (on Y axis)

Parameters
aThe axis
Returns
The direction pointed to south

Definition at line 276 of file direction_func.h.

References IsValidAxis(), and to_underlying().

Referenced by AfterLoadGame().

◆ ChangeDiagDir()

DiagDirection ChangeDiagDir ( DiagDirection d,
DiagDirDiff delta )
inline

Applies a difference on a DiagDirection.

This function applies a difference on a DiagDirection and returns the new DiagDirection.

Parameters
dThe DiagDirection
deltaThe difference to apply on
Returns
The new direction which was calculated

Definition at line 159 of file direction_func.h.

References IsValidDiagDirection(), and to_underlying().

Referenced by AircraftGetEntryPoint(), GrowTownInTile(), IsNeighbourRoadTile(), RiverMakeWider(), and VehicleExitDir().

◆ ChangeDir()

Direction ChangeDir ( Direction d,
DirDiff delta )
inline

Change a direction by a given difference.

This functions returns a new direction of the given direction which is rotated by the given difference.

Parameters
dThe direction to get a new direction from
deltaThe offset/drift applied to the direction
Returns
The new direction

Definition at line 114 of file direction_func.h.

References IsValidDirection(), and to_underlying().

Referenced by AircraftController(), ChangeTrainDirRandomly(), DisasterTick_Submarine(), Airport::GetHangarExitDirection(), HandleCrashedAircraft(), RotateAirportMovingData(), Vehicle::ShowVisualEffect(), and SpawnAdvancedVisualEffect().

◆ ChangeDirDiff()

DirDiff ChangeDirDiff ( DirDiff d,
DirDiff delta )
inline

Applies two differences together.

This function adds two differences together and returns the resulting difference. So adding two DirDiff::Reverse together results in the DirDiff::Same difference.

Parameters
dThe first difference
deltaThe second difference to add on
Returns
The resulting difference

Definition at line 88 of file direction_func.h.

References to_underlying().

◆ DiagDirDifference()

DiagDirDiff DiagDirDifference ( DiagDirection d0,
DiagDirection d1 )
inline

Calculate the difference between two DiagDirection values.

Parameters
d0The first direction as the base
d1The second direction as the offset from the base
Returns
The difference how the second direction drifts of the first one.

Definition at line 141 of file direction_func.h.

References IsValidDiagDirection(), and to_underlying().

Referenced by AircraftGetEntryPoint(), and YapfShipRegions::PfCalcCost().

◆ DiagDirToAxis()

◆ DiagDirToDir()

Direction DiagDirToDir ( DiagDirection dir)
inline

Convert a DiagDirection to a Direction.

This function can be used to convert the 4-way DiagDirection to the 8-way Direction. As 4-way are less than 8-way not all possible directions can be calculated.

Parameters
dirThe direction to convert
Returns
The resulting Direction

Definition at line 192 of file direction_func.h.

References IsValidDiagDirection(), and to_underlying().

Referenced by AfterLoadGame(), CheckShipStayInDepot(), CmdBuildRailVehicle(), CmdBuildRailWagon(), CmdBuildRoadVehicle(), CmdBuildShip(), TrainCanLeaveTile(), and VehicleEnterTile_Rail().

◆ DirDifference()

DirDiff DirDifference ( Direction d0,
Direction d1 )
inline

Calculate the difference between two directions.

Parameters
d0The first direction as the base
d1The second direction as the offset from the base
Returns
The difference how the second direction drifts of the first one.

Definition at line 68 of file direction_func.h.

References IsValidDirection(), and to_underlying().

Referenced by AircraftController(), Train::GetCurveSpeedLimit(), Airport::GetHangarExitDirection(), and TrainController().

◆ DirToDiagDir()

◆ IsDiagonalDirection()

bool IsDiagonalDirection ( Direction dir)
inline

Checks if a given Direction is diagonal.

Parameters
dirThe given direction.
Returns
True if the direction is diagonal.

Definition at line 300 of file direction_func.h.

References IsValidDirection(), and to_underlying().

Referenced by CheckReverseTrain(), Vehicle::GetAdvanceDistance(), RoadVehicle::GetCurrentMaxSpeed(), Vehicle::GetOldAdvanceSpeed(), TrainApproachingLineEnd(), RoadVehicle::UpdateDeltaXY(), Train::UpdateDeltaXY(), and VehicleExitDir().

◆ IsValidAxis()

bool IsValidAxis ( Axis d)
inline

Checks if an integer value is a valid Axis.

Parameters
dThe value to check
Returns
True if the value belongs to an Axis, else false

Definition at line 43 of file direction_func.h.

References End.

Referenced by AxisToDiagDir(), AxisToDiagDirs(), AxisToDirection(), AxisToRoadBits(), AxisToTrack(), CmdBuildLongRoad(), CmdBuildRailStation(), CmdBuildRailWaypoint(), CmdBuildRoadWaypoint(), CmdBuildShipDepot(), CmdRemoveLongRoad(), OtherAxis(), PlaceRail_Waypoint(), PlaceRoad_Waypoint(), TileOffsByAxis(), and XYNSToDiagDir().

◆ IsValidDiagDirection()

◆ IsValidDirection()

bool IsValidDirection ( Direction d)
inline

Checks if an integer value is a valid Direction.

Parameters
dThe value to check
Returns
True if the value belongs to a Direction, else false

Definition at line 32 of file direction_func.h.

References End.

Referenced by ChangeDir(), DirDifference(), DirToDiagDir(), IsDiagonalDirection(), ReverseDir(), TileIndexDiffCByDir(), TileOffsByDir(), and TrackDirectionToTrackdir().

◆ LimitDirDiff()

DirDiff LimitDirDiff ( DirDiff d)
inline

Limit a direction difference to up to 45 degrees.

Parameters
ddirection difference to limit.
Returns
limited difference.

Definition at line 99 of file direction_func.h.

References Left45, Reverse, and Right45.

Referenced by AircraftController().

◆ OtherAxis()

Axis OtherAxis ( Axis a)
inline

Select the other axis as provided.

This is basically the not-operator for the axis.

Parameters
aThe given axis
Returns
The other axis

Definition at line 207 of file direction_func.h.

References IsValidAxis(), and to_underlying().

Referenced by AfterLoadGame(), CheckFlatLandRoadStop(), CmdBuildRailStation(), CmdBuildRailWaypoint(), CmdBuildRoad(), CmdBuildRoadWaypoint(), DrawBridgeMiddle(), DrawBridgePillars(), GetCrossingRailAxis(), IsPossibleCrossing(), and SetupFarmFieldFence().

◆ ReverseDiagDir()

DiagDirection ReverseDiagDir ( DiagDirection d)
inline

Returns the reverse direction of the given DiagDirection.

Parameters
dThe DiagDirection to get the reverse from
Returns
The reverse direction

Definition at line 128 of file direction_func.h.

References IsValidDiagDirection(), and to_underlying().

Referenced by AfterLoadGame(), AutoslopeCheckForAxis(), CanConnectToRoad(), CFollowTrackT< TRANSPORT_WATER, Ship, true >::CanEnterNewTile(), CanFollowRoad(), CanRoadContinueIntoNextTile(), CcBuildBridge(), CcBuildRoadTunnel(), CcRoadStop(), CYapfFollowShipT< Types >::CheckShipReverse(), CheckTownBuild2House(), CheckTownBuild2x2House(), ClearPathReservation(), CmdBuildBridge(), CmdBuildDock(), CmdBuildLock(), CmdBuildLongRoad(), CmdBuildTunnel(), ConnectRoadToStructure(), DeleteLastWagon(), DoClearBridge(), DoClearTunnel(), DrawBridgePillars(), DrawRailCatenaryRailway(), ExploreSegment(), FixOwnerOfRailTrack(), CFollowTrackT< TRANSPORT_WATER, Ship, true >::FollowTileExit(), CFollowTrackT< TRANSPORT_WATER, Ship, true >::ForcedReverse(), GetAnyRoadBits(), GetBridgeEnd(), GetNorthernBridgeEnd(), GetOtherAqueductEnd(), GetOtherTunnelEnd(), GetTileTrackStatus_Road(), GetTileTrackStatus_TunnelBridge(), GetTownRoadGridElement(), GrowTownAtRoad(), GrowTownInTile(), GrowTownWithBridge(), GrowTownWithTunnel(), IsNeighbourRoadTile(), IsWateredTile(), MaskWireBits(), BuildDocksToolbarWindow::OnPlaceObject(), BuildDocksToolbarWindow::OnPlacePresize(), CYapfCostRailT< Types >::PfCalcCost(), CYapfCostRoadT< Types >::PfCalcCost(), RiverMakeWider(), SetupFarmFieldFence(), TestTownOwnsBridge(), TrainApproachingCrossing(), TrainCanLeaveTile(), TrainCheckIfLineEnds(), TrainController(), CFollowTrackT< TRANSPORT_WATER, Ship, true >::TryReverse(), UpdateSignalsInBuffer(), VehicleEnterTile_Rail(), VehicleEnterTile_TunnelBridge(), and VisitAdjacentWaterRegionPatchNeighbours().

◆ ReverseDir()

◆ XYNSToDiagDir()

DiagDirection XYNSToDiagDir ( Axis xy,
uint ns )
inline

Convert an axis and a flag for north/south into a DiagDirection.

Parameters
xyaxis to convert
nsnorth -> 0, south -> 1
Returns
the desired DiagDirection

Definition at line 288 of file direction_func.h.

References IsValidAxis(), and to_underlying().

Referenced by AfterLoadGame(), and GetShipDepotDirection().