OpenTTD Source: src/direction_func.h File Reference

OpenTTD Source 14.0-beta1

Functions
direction_func.h File Reference
`#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

  a | The axis

Returns
  The direction pointed to south

Definition at line 232 of file direction_func.h.

References IsValidAxis().

Referenced by 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

  a | The 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

  d | The DiagDirection
  delta | The 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

  d | The direction to get a new direction from
  delta | The 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

  d | The first difference
  delta | The 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

  d0 | The first direction as the base
  d1 | The 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

  d | The DiagDirection

Returns
  The axis which belongs to the direction

Definition at line 214 of file direction_func.h.

References IsValidDiagDirection().

Referenced by CanEnterTileOwnerCheck(), CheckFlatLandRoadStop(), GetAnyRoadBits(), GetBridgeHeight(), IsRoadAllowedHere(), MaskWireBits(), SetRailStationPlatformReservation(), SetupFarmFieldFence(), CYapfCostBase::stSlopeCost(), TrainApproachingCrossingTile(), and GroundVehicle< RoadVehicle, VEH_ROAD >::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

  dir | The 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

  d0 | The first direction as the base
  d1 | The 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

  dir | The 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(), Ship::GetVehicleTrackdir(), Train::GetVehicleTrackdir(), RoadVehicle::GetVehicleTrackdir(), RoadStop::Leave(), ShipTestUpDownOnLock(), GroundVehicle< RoadVehicle, VEH_ROAD >::UpdateZPosition(), and VehicleExitDir().

## ◆ IsDiagonalDirection()

bool IsDiagonalDirection | ( | Direction | dir | ) |
| inline

Checks if a given Direction is diagonal.

Parameters

  dir | The 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

  d | The 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(), and XYNSToDiagDir().

## ◆ IsValidDiagDirection()

bool IsValidDiagDirection | ( | DiagDirection | d | ) |
| inline

Checks if an integer value is a valid DiagDirection.

Parameters

  d | The value to check

Returns
  True if the value belongs to a DiagDirection, else false

Definition at line 21 of file direction_func.h.

References DIAGDIR_END.

Referenced by ChangeDiagDir(), ChooseShipTrack(), CmdBuildRoadDepot(), CmdBuildTrainDepot(), DiagDirDifference(), DiagdirReachesTrackdirs(), DiagDirToAxis(), DiagDirToDiagTrack(), DiagDirToDiagTrackBits(), DiagDirToDiagTrackdir(), DiagDirToDir(), DiagDirToRoadBits(), GetOtherAqueductEnd(), ReverseDiagDir(), ShipTestUpDownOnLock(), TileIndexDiffCByDiagDir(), TileOffsByDiagDir(), TrackEnterdirToTrackdir(), TrackExitdirToTrackdir(), and TrainController().

## ◆ IsValidDirection()

bool IsValidDirection | ( | Direction | d | ) |
| inline

Checks if an integer value is a valid Direction.

Parameters

  d | The 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

  a | The given axis

Returns
  The other axis

Definition at line 197 of file direction_func.h.

References IsValidAxis().

Referenced by GetCrossingRailAxis().

## ◆ ReverseDiagDir()

DiagDirection ReverseDiagDir | ( | DiagDirection | d | ) |
| inline

Returns the reverse direction of the given DiagDirection.

Parameters

  d | The DiagDirection to get the reverse from

Returns
  The reverse direction

Definition at line 118 of file direction_func.h.

References IsValidDiagDirection().

Referenced by CalculateRoadStopCost(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CanFollowRoad(), CanRoadContinueIntoNextTile(), CheckTownBuild2House(), CheckTownBuild2x2House(), ClearPathReservation(), CmdBuildLongRoad(), FixOwnerOfRailTrack(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::FollowTileExit(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::ForcedReverse(), GetAnyRoadBits(), GetBridgeEnd(), GetNorthernBridgeEnd(), GetOtherAqueductEnd(), GetOtherTunnelEnd(), GrowTownWithBridge(), GrowTownWithTunnel(), IsNeighborRoadTile(), MarkDirtyAdjacentLevelCrossingTiles(), MaskWireBits(), CYapfCostRoadT< Types >::PfCalcCost(), RoadStop::Entry::Rebuild(), RedundantBridgeExistsNearby(), RiverMakeWider(), TestTownOwnsBridge(), TrainApproachingCrossing(), TrainCanLeaveTile(), TrainController(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::TryReverse(), UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval(), UpdateLevelCrossing(), and UpdateSignalsInBuffer().

## ◆ ReverseDir()

Direction ReverseDir | ( | Direction | d | ) |
| inline

Return the reverse of a direction.

Parameters

  d | The 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

  xy | axis to convert
  ns | north -> 0, south -> 1

Returns
  the desired DiagDirection

Definition at line 261 of file direction_func.h.

References IsValidAxis().

Referenced by GetShipDepotDirection().