OpenTTD Source 20241224-master-gf74b0cf984
|
Base functions related to the map and distances on them. More...
#include "stdafx.h"
#include "debug.h"
#include "core/alloc_func.hpp"
#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. | |
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. | |
bool | CircularTileSearch (TileIndex *tile, uint radius, uint w, uint h, TestTileOnSearchProc proc, void *user_data) |
Generalized circular search allowing for rectangles and a hole. | |
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.
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.
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 |
Definition at line 285 of file map.cpp.
References _tileoffs_by_diagdir, _tileoffs_by_dir, DIAGDIR_BEGIN, DIAGDIR_END, DIR_W, INVALID_TILE, Map::SizeX(), Map::SizeY(), TileX(), TileXY(), TileY(), TileIndexDiffC::x, and TileIndexDiffC::y.
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.
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 |
Definition at line 247 of file map.cpp.
References CircularTileSearch(), DIR_N, and TileAddByDir().
Referenced by ChopLumberMillTrees(), CircularTileSearch(), CmdBuildCanal(), CreateRivers(), FindNearestGoodCoastalTownSpot(), FindStationsNearby(), FlowRiver(), GenerateStationName(), GetDistanceFromNearbyHouse(), GrowTownWithBridge(), LoadTownData(), MakeRiverAndModifyDesertZoneAround(), TownActionBuildStatue(), and TryBuildTransmitter().
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 206 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 223 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 146 of file map.cpp.
References Delta(), TileX(), and TileY().
Referenced by AfterLoadGame(), AirportGetNearestTown(), CalcClosestTownFromTile(), CalcRaildirsDrawstyle(), CheckSubsidyDistance(), ClosestTownFromTile(), DeleteStaleLinks(), FindDeletedWaypointCloseTo(), FindSubsidyPassengerRoute(), FlowRiver(), FlowsDown(), WaterRegion::ForceUpdate(), 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 178 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 194 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.
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.
t0 | the start tile |
t1 | the end tile |
Definition at line 163 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 329 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 FindFurthestFromWater(), 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 97 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 CircularTileSearch(), TileIndexDiffCByDiagDir(), and TileOffsByDiagDir().
|
extern |
'Lookup table' for tile offsets given a Direction
Referenced by CircularTileSearch(), TileIndexDiffCByDir(), and TileOffsByDir().