OpenTTD Source  20241108-master-g80f628063a
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. More...
 
bool IsValidDirection (Direction d)
 Checks if an integer value is a valid Direction. More...
 
bool IsValidAxis (Axis d)
 Checks if an integer value is a valid Axis. More...
 
Direction ReverseDir (Direction d)
 Return the reverse of a direction. More...
 
DirDiff DirDifference (Direction d0, Direction d1)
 Calculate the difference between two directions. More...
 
DirDiff ChangeDirDiff (DirDiff d, DirDiff delta)
 Applies two differences together. More...
 
Direction ChangeDir (Direction d, DirDiff delta)
 Change a direction by a given difference. More...
 
DiagDirection ReverseDiagDir (DiagDirection d)
 Returns the reverse direction of the given DiagDirection. More...
 
DiagDirDiff DiagDirDifference (DiagDirection d0, DiagDirection d1)
 Calculate the difference between two DiagDirection values. More...
 
DiagDirection ChangeDiagDir (DiagDirection d, DiagDirDiff delta)
 Applies a difference on a DiagDirection. More...
 
DiagDirection DirToDiagDir (Direction dir)
 Convert a Direction to a DiagDirection. More...
 
Direction DiagDirToDir (DiagDirection dir)
 Convert a DiagDirection to a Direction. More...
 
Axis OtherAxis (Axis a)
 Select the other axis as provided. More...
 
Axis DiagDirToAxis (DiagDirection d)
 Convert a DiagDirection to the axis. More...
 
DiagDirection AxisToDiagDir (Axis a)
 Converts an Axis to a DiagDirection. More...
 
Direction AxisToDirection (Axis a)
 Converts an Axis to a Direction. More...
 
DiagDirection XYNSToDiagDir (Axis xy, uint ns)
 Convert an axis and a flag for north/south into a DiagDirection. More...
 
bool IsDiagonalDirection (Direction dir)
 Checks if a given Direction is diagonal. More...
 

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 232 of file direction_func.h.

References IsValidAxis().

Referenced by AutoslopeCheckForAxis(), CalculateRoadStopCost(), CmdBuildLongRoad(), GetNorthernBridgeEnd(), GetSouthernBridgeEnd(), MarkDirtyAdjacentLevelCrossingTiles(), TrainApproachingCrossing(), 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 249 of file direction_func.h.

References IsValidAxis().

◆ 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 149 of file direction_func.h.

References IsValidDiagDirection().

Referenced by AircraftGetEntryPoint(), IsNeighborRoadTile(), 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 104 of file direction_func.h.

References IsValidDirection().

Referenced by ChangeTrainDirRandomly(), DisasterTick_Submarine(), Airport::GetHangarExitDirection(), HandleCrashedAircraft(), and RotateAirportMovingData().

◆ 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.

◆ 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 131 of file direction_func.h.

References IsValidDiagDirection().

Referenced by AircraftGetEntryPoint().

◆ DiagDirToAxis()

Axis DiagDirToAxis ( DiagDirection  d)
inline

Convert a DiagDirection to the axis.

This function returns the axis which belongs to the given DiagDirection. The axis X belongs to the DiagDirection north-east and south-west.

Parameters
dThe DiagDirection
Returns
The axis which belongs to the direction

Definition at line 214 of file direction_func.h.

References IsValidDiagDirection().

Referenced by CanRoadContinueIntoNextTile(), GetAnyRoadBits(), GetBridgeHeight(), IsRoadAllowedHere(), MaskWireBits(), SetRailStationPlatformReservation(), SetupFarmFieldFence(), CYapfCostBase::stSlopeCost(), TrainApproachingCrossingTile(), and GroundVehicle< T, Type >::UpdateZPosition().

◆ 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 182 of file direction_func.h.

References IsValidDiagDirection().

Referenced by CmdBuildRailWagon(), CmdBuildRoadVehicle(), and TrainCanLeaveTile().

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

Referenced by Airport::GetHangarExitDirection().

◆ DirToDiagDir()

DiagDirection DirToDiagDir ( Direction  dir)
inline

Convert a Direction to a DiagDirection.

This function can be used to convert the 8-way Direction to the 4-way DiagDirection. If the direction cannot be mapped its "rounded clockwise". So DIR_N becomes DIAGDIR_NE.

Parameters
dirThe direction to convert
Returns
The resulting DiagDirection, maybe "rounded clockwise".

Definition at line 166 of file direction_func.h.

References IsValidDirection().

Referenced by AircraftGetEntryPoint(), DisasterTick_Submarine(), RoadStop::Enter(), FindVehiclesInRoadStop(), GetTrainStopLocation(), RoadVehicle::GetVehicleTrackdir(), Ship::GetVehicleTrackdir(), Train::GetVehicleTrackdir(), RoadStop::Leave(), ShipTestUpDownOnLock(), GroundVehicle< T, Type >::UpdateZPosition(), and VehicleExitDir().

◆ 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 273 of file direction_func.h.

References IsValidDirection().

Referenced by RoadVehicle::UpdateDeltaXY().

◆ 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 AXIS_END.

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

◆ IsValidDiagDirection()

bool IsValidDiagDirection ( DiagDirection  d)
inline

◆ 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 DIR_END.

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

◆ 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 197 of file direction_func.h.

References IsValidAxis().

Referenced by GetCrossingRailAxis(), and SetupFarmFieldFence().

◆ ReverseDiagDir()

DiagDirection ReverseDiagDir ( DiagDirection  d)
inline

◆ ReverseDir()

Direction ReverseDir ( Direction  d)
inline

Return the reverse of a direction.

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

Definition at line 54 of file direction_func.h.

References IsValidDirection().

Referenced by TileLoop_Water(), and UpdateStatusAfterSwap().

◆ 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 261 of file direction_func.h.

References IsValidAxis().

Referenced by GetShipDepotDirection().