OpenTTD Source: src/map.cpp File Reference

OpenTTD Source 13.2.1

Functions | Variables
map.cpp File Reference
`#include "stdafx.h"`
`#include "debug.h"`
`#include "core/alloc_func.hpp"`
`#include "water_map.h"`
`#include "string_func.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Functions
void | AllocateMap (uint size_x, uint size_y)
| (Re)allocates a map with the given dimension More...
TileIndex | TileAddWrap (TileIndex tile, int addx, int addy)
| This function checks if we add addx/addy to tile, if we do wrap around the edges. More...
uint | DistanceManhattan (TileIndex t0, TileIndex t1)
| Gets the Manhattan distance between the two given tiles. More...
uint | DistanceSquare (TileIndex t0, TileIndex t1)
| Gets the 'Square' distance between the two given tiles. More...
uint | DistanceMax (TileIndex t0, TileIndex t1)
| Gets the biggest distance component (x or y) between the two given tiles. More...
uint | DistanceMaxPlusManhattan (TileIndex t0, TileIndex t1)
| Gets the biggest distance component (x or y) between the two given tiles plus the Manhattan distance, i.e. More...
uint | DistanceFromEdge (TileIndex tile)
| Param the minimum distance to an edge. More...
uint | DistanceFromEdgeDir (TileIndex tile, DiagDirection dir)
| Gets the distance to the edge of the map in given direction. More...
bool | CircularTileSearch (TileIndex *tile, uint size, TestTileOnSearchProc proc, void *user_data)
| Function performing a search around a center tile and going outward, thus in circle. More...
bool | CircularTileSearch (TileIndex *tile, uint radius, uint w, uint h, TestTileOnSearchProc proc, void *user_data)
| Generalized circular search allowing for rectangles and a hole. More...
uint | GetClosestWaterDistance (TileIndex tile, bool water)
| Finds the distance for the closest tile with water/land given a tile. More...

## Variables
uint | _map_log_x
| 2^_map_log_x == _map_size_x
uint | _map_log_y
| 2^_map_log_y == _map_size_y
uint | _map_size_x
| Size of the map along the X.
uint | _map_size_y
| Size of the map along the Y.
uint | _map_size
| The number of tiles on the map.
uint | _map_tile_mask
| _map_size - 1 (to mask the mapsize)
Tile * | _m = nullptr
| Tiles of the map. More...
TileExtended * | _me = nullptr
| Extended Tiles of the map. More...
const TileIndexDiffC | _tileoffs_by_diagdir []
| 'Lookup table' for tile offsets given a DiagDirection More...
const TileIndexDiffC | _tileoffs_by_dir []
| 'Lookup table' for tile offsets given a Direction More...

## Detailed Description

Base functions related to the map and distances on them.

Definition in file map.cpp.

## Function Documentation

## ◆ AllocateMap()

void AllocateMap | ( | uint | size_x,
|  | uint | size_y
| ) |  |

(Re)allocates a map with the given dimension

Parameters

  size_x | the width of the map along the NE/SW edge
  size_y | the 'height' of the map along the SE/NW edge

Definition at line 39 of file map.cpp.

References _m, _map_log_x, _map_log_y, _map_size, _map_size_x, _map_size_y, _map_tile_mask, _me, Debug, error(), FindFirstBit(), free(), IsInsideMM(), MAX_MAP_SIZE, and MIN_MAP_SIZE.

## ◆ CircularTileSearch() [1/2]

bool CircularTileSearch | ( | TileIndex * | tile,
|  | uint | radius,
|  | uint | w,
|  | uint | h,
|  | TestTileOnSearchProc | proc,
|  | void * | user_data
| ) |  |

Generalized circular search allowing for rectangles and a hole.

Function performing a search around a center rectangle and going outward. The center rectangle is left out from the search. To do a rectangular search without a hole, set either h or w to zero. Every tile will be tested by means of the callback function proc, which will determine if yes or no the given tile meets criteria of search.

Parameters

  tile | to start the search from. Upon completion, it will return the tile matching the search. This tile should be directly north of the hole (if any).
  radius | How many tiles to search outwards. Note: This is a radius and thus different from the size parameter of the other CircularTileSearch function, which is a diameter.
  w | the width of the inner rectangle
  h | the height of the inner rectangle
  proc | callback testing function pointer.
  user_data | to be passed to the callback function. Depends on the implementation

Returns
  result of the search

Precondition
  proc != nullptr
  radius > 0

Definition at line 296 of file map.cpp.

## ◆ CircularTileSearch() [2/2]

bool CircularTileSearch | ( | TileIndex * | tile,
|  | uint | size,
|  | TestTileOnSearchProc | proc,
|  | void * | user_data
| ) |  |

Function performing a search around a center tile and going outward, thus in circle.

Although it really is a square search... Every tile will be tested by means of the callback function proc, which will determine if yes or no the given tile meets criteria of search.

Parameters

  tile | to start the search from. Upon completion, it will return the tile matching the search
  size | number of tiles per side of the desired search area
  proc | callback testing function pointer.
  user_data | to be passed to the callback function. Depends on the implementation

Returns
  result of the search

Precondition
  proc != nullptr
  size > 0

Definition at line 258 of file map.cpp.

References CircularTileSearch(), DIR_N, and TileAddByDir().

Referenced by ChopLumberMillTrees(), CircularTileSearch(), CreateRivers(), FindNearestGoodCoastalTownSpot(), GetDistanceFromNearbyHouse(), GrowTownWithBridge(), TownActionBuildStatue(), and TryBuildTransmitter().

## ◆ DistanceFromEdge()

uint DistanceFromEdge | ( | TileIndex | tile | ) |

Param the minimum distance to an edge.

shortest distance from any edge of the map

Parameters

  tile | the tile to get the distance from

Returns
  the distance from the edge in tiles

Definition at line 217 of file map.cpp.

References MapSizeX(), MapSizeY(), TileX(), and TileY().

Referenced by GrowTownWithExtraHouse(), IsRoadAllowedHere(), and TownCanBePlacedHere().

## ◆ DistanceFromEdgeDir()

uint DistanceFromEdgeDir | ( | TileIndex | tile,
|  | DiagDirection | dir
| ) |  |

Gets the distance to the edge of the map in given direction.

distance from the map edge in given direction

Parameters

  tile | the tile to get the distance from
  dir | the direction of interest

Returns
  the distance from the edge in tiles

Definition at line 234 of file map.cpp.

References _settings_game, GameSettings::construction, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, ConstructionSettings::freeform_edges, MapMaxX(), MapMaxY(), TileX(), and TileY().

Referenced by CheckScaledDistanceFromEdge(), and GetOtherAqueductEnd().

## ◆ DistanceManhattan()

uint DistanceManhattan | ( | TileIndex | t0,
|  | TileIndex | t1
| ) |  |

Gets the Manhattan distance between the two given tiles.

also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads)

The Manhattan distance is the sum of the delta of both the X and Y component. Also known as L1-Norm

Parameters

  t0 | the start tile
  t1 | the end tile

Returns
  the distance

Definition at line 157 of file map.cpp.

References Delta(), TileX(), and TileY().

Referenced by AirportGetNearestTown(), CheckSubsidyDistance(), DeleteStaleLinks(), FindDeletedWaypointCloseTo(), FlowRiver(), FlowsDown(), GetDistanceFromNearbyHouse(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), VpSetPresizeRange(), and YapfTrainCheckReverse().

## ◆ DistanceMax()

uint DistanceMax | ( | TileIndex | t0,
|  | TileIndex | t1
| ) |  |

Gets the biggest distance component (x or y) between the two given tiles.

also known as L-Infinity-Norm

Also known as L-Infinity-Norm.

Parameters

  t0 | the start tile
  t1 | the end tile

Returns
  the distance

Definition at line 189 of file map.cpp.

References Delta(), TileX(), and TileY().

Referenced by Station::AddIndustryToDeliver(), CheckIfFarEnoughFromConflictingIndustry(), and CheckIfIndustryIsAllowed().

## ◆ DistanceMaxPlusManhattan()

uint DistanceMaxPlusManhattan | ( | TileIndex | t0,
|  | TileIndex | t1
| ) |  |

Gets the biggest distance component (x or y) between the two given tiles plus the Manhattan distance, i.e.

Max + Manhattan.

two times the biggest distance component and once the smallest component.

Parameters

  t0 | the start tile
  t1 | the end tile

Returns
  the distance

Definition at line 205 of file map.cpp.

References Delta(), TileX(), and TileY().

## ◆ DistanceSquare()

uint DistanceSquare | ( | TileIndex | t0,
|  | TileIndex | t1
| ) |  |

Gets the 'Square' distance between the two given tiles.

euclidian- or L2-Norm squared

The 'Square' distance is the square of the shortest (straight line) distance between the two tiles. Also known as euclidian- or L2-Norm squared.

Parameters

  t0 | the start tile
  t1 | the end tile

Returns
  the distance

Definition at line 174 of file map.cpp.

References TileX(), and TileY().

Referenced by CmdBuildBridge(), CmdBuildTunnel(), GetTownRadiusGroup(), IndustriesScopeResolver::GetVariable(), and ObjectScopeResolver::GetVariable().

## ◆ GetClosestWaterDistance()

uint GetClosestWaterDistance | ( | TileIndex | tile,
|  | bool | water
| ) |  |

Finds the distance for the closest tile with water/land given a tile.

Parameters

  tile | the tile to find the distance too
  water | whether to find water or land

Returns
  distance to nearest water (max 0x7F) / land (max 0x1FF; 0x200 if there is no land)

Definition at line 340 of file map.cpp.

References HasTileWaterGround().

Referenced by FindFurthestFromWater(), and IndustriesScopeResolver::GetVariable().

## ◆ TileAddWrap()

TileIndex TileAddWrap | ( | TileIndex | tile,
|  | int | addx,
|  | int | addy
| ) |  |

This function checks if we add addx/addy to tile, if we do wrap around the edges.

For example, tile = (10,2) and addx = +3 and addy = -4. This function will now return INVALID_TILE, because the y is wrapped. This is needed in for example, farmland. When the tile is not wrapped, the result will be tile + TileDiffXY(addx, addy)

Parameters

  tile | the 'starting' point of the adding
  addx | the amount of tiles in the X direction to add
  addy | the amount of tiles in the Y direction to add

Returns
  translated tile, or INVALID_TILE when it would've wrapped.

Definition at line 114 of file map.cpp.

Referenced by CheckIfIndustryTilesAreFree(), CheckIfIndustryTileSlopes(), CmdRemoveRoadStop(), and CountMapSquareAround().

## Variable Documentation

## ◆ _m

Tile* _m = nullptr

Tiles of the map.

Pointer to the tile-array.

Definition at line 30 of file map.cpp.

Referenced by AddClearCounter(), AddClearDensity(), AddTreeCount(), AddTreeCounter(), AddTreeGrowth(), AllocateMap(), ClearSingleBridgeMiddle(), ClearSnow(), GetBridgeAxis(), GetCleanHouseType(), GetCleanIndustryGfx(), GetClearCounter(), GetClearDensity(), GetCrossingRoadAxis(), GetCustomStationSpecIndex(), GetDepotIndex(), GetDisallowedRoadDirections(), GetFieldType(), GetHouseAge(), GetHouseConstructionTick(), GetHouseRandomBits(), GetHouseTriggers(), GetIndustryAnimationLoop(), GetIndustryConstructionCounter(), GetIndustryIndex(), GetIndustryIndexOfField(), GetIndustryRandomBits(), GetLockDirection(), GetLockPart(), GetObjectIndex(), GetObjectRandomBits(), GetPresentSignals(), GetRailDepotDirection(), GetRailReservationTrackBits(), GetRailTileType(), GetRawClearGround(), GetRoadDepotDirection(), GetRoadTileType(), GetShipDepotAxis(), GetShipDepotPart(), GetSignalStates(), GetStationGfx(), GetStationIndex(), GetStationTileRandomBits(), GetTileOwner(), GetTileType(), GetTownIndex(), GetTrackBits(), GetTreeCount(), GetTreeCounter(), GetTreeDensity(), GetTreeGround(), GetTreeGrowth(), GetTreeType(), GetTropicZone(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), GetWaterClass(), GetWaterTileRandomBits(), GetWaterTileType(), HasCrossingReservation(), HasDepotReservation(), HasTunnelBridgeReservation(), IncHouseConstructionTick(), IncrementHouseAge(), IsBridge(), IsBridgeAbove(), IsCrossingBarred(), IsCustomStationSpecIndex(), IsDockingTile(), IsHouseCompleted(), IsIndustryCompleted(), IsSnowTile(), IsTunnel(), MakeBridgeRamp(), MakeClear(), MakeField(), MakeHouseTile(), MakeIndustry(), MakeLockTile(), MakeObject(), MakeRailTunnel(), MakeRoadCrossing(), MakeRoadDepot(), MakeRoadNormal(), MakeRoadTunnel(), MakeShipDepot(), MakeShore(), MakeSnow(), MakeStation(), MakeTree(), MakeVoid(), MakeWater(), MoveWaypointsToBaseStations(), ResetHouseAge(), ResetIndustryConstructionStage(), SetBridgeMiddle(), SetClearCounter(), SetClearDensity(), SetClearGroundDensity(), SetCrossingBarred(), SetCrossingReservation(), SetCustomStationSpecIndex(), SetDepotReservation(), SetDisallowedRoadDirections(), SetDockingTile(), SetFieldType(), SetHasSignals(), SetHouseCompleted(), SetHouseRandomBits(), SetHouseTriggers(), SetHouseType(), SetIndustryAnimationLoop(), SetIndustryCompleted(), SetIndustryConstructionCounter(), SetIndustryConstructionStage(), SetIndustryGfx(), SetIndustryIndexOfField(), SetIndustryRandomBits(), SetPresentSignals(), SetSignalStates(), SetStationGfx(), SetStationTileRandomBits(), SetTileHeight(), SetTileOwner(), SetTileType(), SetTownIndex(), SetTrackBits(), SetTrackReservation(), SetTreeCounter(), SetTreeGroundDensity(), SetTreeGrowth(), SetTropicZone(), SetTunnelBridgeReservation(), SetWaterClass(), TileHeight(), and CrashLog::WriteSavegame().

## ◆ _me

TileExtended* _me = nullptr

Extended Tiles of the map.

Pointer to the extended tile-array.

Definition at line 31 of file map.cpp.

Referenced by AllocateMap(), DecHouseProcessingTime(), GetAnimationFrame(), GetBridgeType(), GetCleanIndustryGfx(), GetHouseProcessingTime(), GetIndustryTriggers(), GetLiftDestination(), GetLiftPosition(), GetRailType(), GetRoadside(), GetStationType(), HaltLift(), HasStationReservation(), HasTunnelBridgeSnowOrDesert(), IncreaseRoadWorksCounter(), IsOnSnow(), LiftHasDestination(), MakeBridgeRamp(), MakeClear(), MakeField(), MakeIndustry(), MakeLockTile(), MakeObject(), MakeRailTunnel(), MakeRoadCrossing(), MakeRoadDepot(), MakeRoadNormal(), MakeRoadTunnel(), MakeShipDepot(), MakeShore(), MakeStation(), MakeTree(), MakeVoid(), MakeWater(), MoveBuoysToWaypoints(), SetAnimationFrame(), SetHouseProcessingTime(), SetIndustryGfx(), SetIndustryTriggers(), SetLiftDestination(), SetLiftPosition(), SetRailStationReservation(), SetRailType(), SetRoadside(), SetTunnelBridgeSnowOrDesert(), TerminateRoadWorks(), and ToggleSnow().

## ◆ _tileoffs_by_diagdir

const TileIndexDiffC _tileoffs_by_diagdir[]

Initial value:
= {
{-1, 0},
{ 0, 1},
{ 1, 0},
{ 0, -1}
}

'Lookup table' for tile offsets given a DiagDirection

Referenced by TileIndexDiffCByDiagDir(), and TileOffsByDiagDir().

## ◆ _tileoffs_by_dir

const TileIndexDiffC _tileoffs_by_dir[]

Initial value:
= {
{-1, -1},
{-1, 0},
{-1, 1},
{ 0, 1},
{ 1, 1},
{ 1, 0},
{ 1, -1},
{ 0, -1}
}

'Lookup table' for tile offsets given a Direction

Referenced by TileIndexDiffCByDir(), and TileOffsByDir().