OpenTTD Source 20250426-master-gbb1d561369
|
Base functions related to the map and distances on them. More...
#include "stdafx.h"
#include "debug.h"
#include "water_map.h"
#include "error_func.h"
#include "string_func.h"
#include "pathfinder/water_regions.h"
#include "safeguards.h"
Go to the source code of this file.
Functions | |
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. | |
uint | DistanceManhattan (TileIndex t0, TileIndex t1) |
Gets the Manhattan distance between the two given tiles. | |
uint | DistanceSquare (TileIndex t0, TileIndex t1) |
Gets the 'Square' distance between the two given tiles. | |
uint | DistanceMax (TileIndex t0, TileIndex t1) |
Gets the biggest distance component (x or y) between the two given tiles. | |
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. | |
uint | DistanceFromEdge (TileIndex tile) |
Param the minimum distance to an edge. | |
uint | DistanceFromEdgeDir (TileIndex tile, DiagDirection dir) |
Gets the distance to the edge of the map in given direction. | |
uint | GetClosestWaterDistance (TileIndex tile, bool water) |
Finds the distance for the closest tile with water/land given a tile. | |
Variables | |
const TileIndexDiffC | _tileoffs_by_axis [] |
'Lookup table' for tile offsets given an Axis | |
const TileIndexDiffC | _tileoffs_by_diagdir [] |
'Lookup table' for tile offsets given a DiagDirection | |
const TileIndexDiffC | _tileoffs_by_dir [] |
'Lookup table' for tile offsets given a Direction | |
Base functions related to the map and distances on them.
Definition in file map.cpp.
uint DistanceFromEdge | ( | TileIndex | tile | ) |
Param the minimum distance to an edge.
shortest distance from any edge of the map
tile | the tile to get the distance from |
Definition at line 202 of file map.cpp.
References Map::SizeX(), Map::SizeY(), TileX(), and TileY().
Referenced by GenerateStationName(), GrayscaleToMapHeights(), GrowTownWithExtraHouse(), IsRoadAllowedHere(), and TownCanBePlacedHere().
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
tile | the tile to get the distance from |
dir | the direction of interest |
Definition at line 219 of file map.cpp.
References _settings_game, GameSettings::construction, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, ConstructionSettings::freeform_edges, Map::MaxX(), Map::MaxY(), TileX(), and TileY().
Referenced by CheckScaledDistanceFromEdge(), and GetOtherAqueductEnd().
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
t0 | the start tile |
t1 | the end tile |
Definition at line 142 of file map.cpp.
References Delta(), TileX(), and TileY().
Referenced by AfterLoadGame(), AirportGetNearestTown(), CalcClosestTownFromTile(), CalcRaildirsDrawstyle(), RiverBuilder::CalculateH(), CheckSubsidyDistance(), ClosestTownFromTile(), DeleteStaleLinks(), FindDeletedWaypointCloseTo(), FindSubsidyPassengerRoute(), FlowRiver(), FlowsDown(), WaterRegion::ForceUpdate(), RiverBuilder::FoundEndNode(), GetClosestObject(), GetCountAndDistanceOfClosestInstance(), CargoPacket::GetDistance(), GetDistanceFromNearbyHouse(), GetOrderDistance(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), HighlightTownLocalAuthorityTiles(), IsCloseToTown(), LinkRefresher::RefreshStats(), VpSelectTilesWithMethod(), VpSetPresizeRange(), and YapfTrainCheckReverse().
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.
t0 | the start tile |
t1 | the end tile |
Definition at line 174 of file map.cpp.
References Delta(), TileX(), and TileY().
Referenced by Station::AddIndustryToDeliver(), CheckIfFarEnoughFromConflictingIndustry(), CheckIfIndustryIsAllowed(), FindStationsNearby(), and GenerateStationName().
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.
t0 | the start tile |
t1 | the end tile |
Definition at line 190 of file map.cpp.
References Delta(), TileX(), and TileY().
Referenced by DemandCalculator::CalcDemand(), and MultiCommodityFlow::Dijkstra().
Gets the 'Square' distance between the two given tiles.
Euclidean- or L2-Norm squared.
The 'Square' distance is the square of the shortest (straight line) distance between the two tiles. Also known as Euclidean- or L2-Norm squared.
t0 | the start tile |
t1 | the end tile |
Definition at line 159 of file map.cpp.
References TileX(), and TileY().
Referenced by CmdBuildBridge(), CmdBuildRoad(), CmdBuildTunnel(), FindNearestHangar(), GetOrderDistance(), GetTownRadiusGroup(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), and PlaceTreeGroupAroundTile().
uint GetClosestWaterDistance | ( | TileIndex | tile, |
bool | water | ||
) |
Finds the distance for the closest tile with water/land given a tile.
tile | the tile to find the distance too |
water | whether to find water or land |
Definition at line 236 of file map.cpp.
References _settings_game, GameSettings::construction, DIAGDIR_BEGIN, DIAGDIR_END, ConstructionSettings::freeform_edges, HasTileWaterGround(), IsInsideMM(), IsTileType(), Map::Iterate(), Map::MaxX(), Map::MaxY(), MP_VOID, MP_WATER, TileX(), TileXY(), and TileY().
Referenced by FindNearestGoodCoastalTownSpot(), and IndustriesScopeResolver::GetVariable().
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)
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 |
Definition at line 93 of file map.cpp.
References _settings_game, GameSettings::construction, ConstructionSettings::freeform_edges, INVALID_TILE, Map::MaxX(), Map::MaxY(), TileX(), TileXY(), and TileY().
Referenced by CheckIfIndustryTilesAreFree(), CheckIfIndustryTileSlopes(), CmdBuildRoadStop(), CmdRemoveRoadStop(), CountMapSquareAround(), DisasterTick_Big_Ufo_Destroyer(), FindSpring(), PlaceTreeAtSameHeight(), PlaceTreeGroupAroundTile(), and PlaceTreeGroups().
|
extern |
'Lookup table' for tile offsets given an Axis
Referenced by TileOffsByAxis().
|
extern |
'Lookup table' for tile offsets given a DiagDirection
Referenced by TileIndexDiffCByDiagDir(), and TileOffsByDiagDir().
|
extern |
'Lookup table' for tile offsets given a Direction
Referenced by TileIndexDiffCByDir(), and TileOffsByDir().