OpenTTD Source
20241108-master-g80f628063a
|
Functions related to maps. More...
#include "core/math_func.hpp"
#include "tile_type.h"
#include "map_type.h"
#include "direction_func.h"
Go to the source code of this file.
Data Structures | |
class | Tile |
Wrapper class to abstract away the way the tiles are stored. More... | |
struct | Tile::TileBase |
Data that is stored per tile. More... | |
struct | Tile::TileExtended |
Data that is stored per tile. More... | |
struct | Map |
Size related data of the map. More... | |
struct | Map::Iterator |
Iterator to iterate all Tiles. More... | |
struct | Map::IterateWrapper |
Macros | |
#define | RandomTile() RandomTileSeed(Random()) |
Get a valid random tile. More... | |
Typedefs | |
typedef bool | TestTileOnSearchProc(TileIndex tile, void *user_data) |
A callback function type for searching tiles. More... | |
Functions | |
static debug_inline TileIndex | TileXY (uint x, uint y) |
Returns the TileIndex of a coordinate. More... | |
TileIndexDiff | TileDiffXY (int x, int y) |
Calculates an offset for the given coordinate(-offset). More... | |
static debug_inline TileIndex | TileVirtXY (uint x, uint y) |
Get a tile from the virtual XY-coordinate. More... | |
static debug_inline uint | TileX (TileIndex tile) |
Get the X component of a tile. More... | |
static debug_inline uint | TileY (TileIndex tile) |
Get the Y component of a tile. More... | |
TileIndexDiff | ToTileIndexDiff (TileIndexDiffC tidc) |
Return the offset between two tiles from a TileIndexDiffC struct. More... | |
constexpr TileIndex | TileAdd (TileIndex tile, TileIndexDiff offset) |
Adds a given offset to a tile. More... | |
TileIndex | TileAddXY (TileIndex tile, int x, int y) |
Adds a given offset to a tile. 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... | |
TileIndexDiffC | TileIndexDiffCByDiagDir (DiagDirection dir) |
Returns the TileIndexDiffC offset from a DiagDirection. More... | |
TileIndexDiffC | TileIndexDiffCByDir (Direction dir) |
Returns the TileIndexDiffC offset from a Direction. More... | |
TileIndex | AddTileIndexDiffCWrap (TileIndex tile, TileIndexDiffC diff) |
Add a TileIndexDiffC to a TileIndex and returns the new one. More... | |
TileIndexDiffC | TileIndexToTileIndexDiffC (TileIndex tile_a, TileIndex tile_b) |
Returns the diff between two tiles. More... | |
uint | DistanceManhattan (TileIndex, TileIndex) |
also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads) More... | |
uint | DistanceSquare (TileIndex, TileIndex) |
euclidian- or L2-Norm squared More... | |
uint | DistanceMax (TileIndex, TileIndex) |
also known as L-Infinity-Norm More... | |
uint | DistanceMaxPlusManhattan (TileIndex, TileIndex) |
Max + Manhattan. More... | |
uint | DistanceFromEdge (TileIndex) |
shortest distance from any edge of the map More... | |
uint | DistanceFromEdgeDir (TileIndex, DiagDirection) |
distance from the map edge in given direction More... | |
TileIndexDiff | TileOffsByAxis (Axis axis) |
Convert an Axis to a TileIndexDiff. More... | |
TileIndexDiff | TileOffsByDiagDir (DiagDirection dir) |
Convert a DiagDirection to a TileIndexDiff. More... | |
TileIndexDiff | TileOffsByDir (Direction dir) |
Convert a Direction to a TileIndexDiff. More... | |
TileIndex | TileAddByDir (TileIndex tile, Direction dir) |
Adds a Direction to a tile. More... | |
TileIndex | TileAddByDiagDir (TileIndex tile, DiagDirection dir) |
Adds a DiagDir to a tile. More... | |
DiagDirection | DiagdirBetweenTiles (TileIndex tile_from, TileIndex tile_to) |
Determines the DiagDirection to get from one tile to another. 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... | |
TileIndex | RandomTileSeed (uint32_t r) |
Get a random tile out of a given seed. More... | |
uint | GetClosestWaterDistance (TileIndex tile, bool water) |
Finds the distance for the closest tile with water/land given a tile. More... | |
Functions related to maps.
Definition in file map_func.h.
#define RandomTile | ( | ) | RandomTileSeed(Random()) |
Get a valid random tile.
Definition at line 661 of file map_func.h.
typedef bool TestTileOnSearchProc(TileIndex tile, void *user_data) |
A callback function type for searching tiles.
tile | The tile to test |
user_data | additional data for the callback function to use |
Definition at line 640 of file map_func.h.
|
inline |
Add a TileIndexDiffC to a TileIndex and returns the new one.
Returns tile + the diff given in diff. If the result tile would end up outside of the map, INVALID_TILE is returned instead.
tile | The base tile to add the offset on |
diff | The offset to add on the tile |
Definition at line 512 of file map_func.h.
Referenced by CalculateCoverageLine(), and TileLoop_Water().
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 |
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 DIR_N, and TileAddByDir().
Referenced by ChopLumberMillTrees(), CreateRivers(), FindNearestGoodCoastalTownSpot(), GetDistanceFromNearbyHouse(), GrowTownWithBridge(), TownActionBuildStatue(), and TryBuildTransmitter().
|
inline |
Determines the DiagDirection to get from one tile to another.
The tiles do not necessarily have to be adjacent.
tile_from | Origin tile |
tile_to | Destination tile |
Definition at line 620 of file map_func.h.
References DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, INVALID_DIAGDIR, TileX(), and TileY().
Referenced by TrainController().
uint DistanceFromEdge | ( | TileIndex | tile | ) |
shortest distance from any edge of the map
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 GrowTownWithExtraHouse(), IsRoadAllowedHere(), and TownCanBePlacedHere().
uint DistanceFromEdgeDir | ( | TileIndex | tile, |
DiagDirection | dir | ||
) |
distance from the map edge 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().
also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads)
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 AirportGetNearestTown(), CheckSubsidyDistance(), DeleteStaleLinks(), FindDeletedWaypointCloseTo(), FindSubsidyPassengerRoute(), FlowRiver(), FlowsDown(), GetClosestObject(), CargoPacket::GetDistance(), GetDistanceFromNearbyHouse(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), VpSetPresizeRange(), and YapfTrainCheckReverse().
also known as L-Infinity-Norm
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(), and CheckIfIndustryIsAllowed().
euclidian- or L2-Norm squared
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(), CmdBuildTunnel(), GetTownRadiusGroup(), IndustriesScopeResolver::GetVariable(), and ObjectScopeResolver::GetVariable().
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 HasTileWaterGround().
Referenced by FindFurthestFromWater(), and IndustriesScopeResolver::GetVariable().
|
inline |
Get a random tile out of a given seed.
r | the random 'seed' |
Definition at line 650 of file map_func.h.
References Map::WrapToMap().
|
constexpr |
Adds a given offset to a tile.
tile | The tile to add an offset to. |
offset | The offset to add. |
Definition at line 454 of file map_func.h.
Referenced by CalcHeightdiff(), FindRailStationEnd(), GetOtherAqueductEnd(), GrowTown(), IsNeighborRoadTile(), CYapfReserveTrack< Types >::ReserveRailStationPlatform(), SetRailStationPlatformReservation(), TileAddByDiagDir(), TileAddByDir(), and CYapfReserveTrack< Types >::UnreserveSingleTrack().
|
inline |
Adds a DiagDir to a tile.
tile | The current tile |
dir | The direction in which we want to step |
Definition at line 608 of file map_func.h.
References TileAdd(), and TileOffsByDiagDir().
Referenced by CleanUpRoadBits(), ClearPathReservation(), DrawRoadTypeCatenary(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::FollowTileExit(), GrowTownWithBridge(), GrowTownWithExtraHouse(), GrowTownWithTunnel(), MarkDirtyAdjacentLevelCrossingTiles(), MaskWireBits(), RiverMakeWider(), SetWaterClassDependingOnSurroundings(), TryPathReserve(), and UpdateLevelCrossing().
Adds a Direction to a tile.
tile | The current tile |
dir | The direction in which we want to step |
Definition at line 596 of file map_func.h.
References TileAdd(), and TileOffsByDir().
Referenced by CalcHeightdiff(), and CircularTileSearch().
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.
Referenced by CheckIfIndustryTilesAreFree(), CmdRemoveRoadStop(), and CountMapSquareAround().
Adds a given offset to a tile.
tile | The tile to add an offset to. |
x | The x offset to add to the tile. |
y | The y offset to add to the tile. |
Definition at line 467 of file map_func.h.
Referenced by OrthogonalTileArea::GetCenterTile(), GetOtherAqueductEnd(), and CanalScopeResolver::GetVariable().
|
inline |
Calculates an offset for the given coordinate(-offset).
This function calculate an offset value which can be added to a TileIndex. The coordinates can be negative.
x | The offset in x direction |
y | The offset in y direction |
Definition at line 389 of file map_func.h.
Referenced by CheckIfCanLevelIndustryPlatform(), CmdTerraformLand(), GetReferenceTile(), Airport::GetRotatedTileFromOffset(), GUIPlaceProcDragXY(), OrthogonalTileIterator::operator++(), TerraformAddDirtyTileAround(), and ToTileIndexDiff().
|
inline |
Returns the TileIndexDiffC offset from a DiagDirection.
dir | The given direction |
Definition at line 480 of file map_func.h.
References _tileoffs_by_diagdir, DIAGDIR_END, and IsValidDiagDirection().
Referenced by CalculateCoverageLine().
|
inline |
Returns the TileIndexDiffC offset from a Direction.
dir | The given direction |
Definition at line 494 of file map_func.h.
References _tileoffs_by_dir, DIR_END, and IsValidDirection().
Referenced by TileLoop_Water().
|
inline |
Returns the diff between two tiles.
tile_a | from tile |
tile_b | to tile |
Definition at line 528 of file map_func.h.
References TileX(), TileY(), TileIndexDiffC::x, and TileIndexDiffC::y.
Referenced by GetTownRoadGridElement(), TownLayoutAllows2x2HouseHere(), and TownLayoutAllowsHouseHere().
|
inline |
Convert an Axis to a TileIndexDiff.
axis | The Axis |
Definition at line 552 of file map_func.h.
References _tileoffs_by_axis, IsValidAxis(), and ToTileIndexDiff().
Referenced by RoadStop::Entry::CheckIntegrity(), RoadStop::ClearDriveThrough(), CmdBuildShipDepot(), GetOtherShipDepotTile(), Station::GetPlatformLength(), RoadStop::MakeDriveThrough(), RoadStop::Entry::Rebuild(), and SetupFarmFieldFence().
|
inline |
Convert a DiagDirection to a TileIndexDiff.
dir | The DiagDirection |
Definition at line 567 of file map_func.h.
References _tileoffs_by_diagdir, DIAGDIR_END, IsValidDiagDirection(), and ToTileIndexDiff().
Referenced by CanConnectToRoad(), CanFollowRoad(), CanRoadContinueIntoNextTile(), CheckForDockingTile(), CheckFree2x2Area(), CheckTownBuild2House(), CheckTownBuild2x2House(), ClearDockingTilesCheckingNeighbours(), CmdBuildLongRoad(), ConnectRoadToStructure(), DisasterTick_Submarine(), DoBuildLock(), DoClearBridge(), ExtendTrainReservation(), FindDockLandPart(), FixOwnerOfRailTrack(), FollowReservation(), FollowTrainReservation(), GetBridgeEnd(), GetOtherAqueductEnd(), GetOtherTunnelEnd(), Station::GetPlatformLength(), GetTrainForReservation(), GrowTownWithBridge(), GrowTownWithTunnel(), CYapfCostRailT< Types >::IsAnyStationTileReserved(), IsNeighborRoadTile(), IsShipDestinationTile(), IsTunnelInWayDir(), MakeLock(), MarkBridgeDirty(), NeighbourIsNormal(), CYapfCostRoadT< Types >::OneTileCost(), RemoveDock(), RemoveLock(), CYapfReserveTrack< Types >::ReserveRailStationPlatform(), SetRailStationPlatformReservation(), SetupFarmFieldFence(), TestTownOwnsBridge(), TileAddByDiagDir(), TrainApproachingCrossing(), TrainApproachingCrossingTile(), CYapfReserveTrack< Types >::UnreserveSingleTrack(), UpdateAdjacentLevelCrossingTilesOnLevelCrossingRemoval(), and UpdateSignalsInBuffer().
|
inline |
Convert a Direction to a TileIndexDiff.
dir | The direction to convert from |
Definition at line 581 of file map_func.h.
References _tileoffs_by_dir, DIR_END, IsValidDirection(), and ToTileIndexDiff().
Referenced by ClearNeighbourNonFloodingStates(), MarkCanalsAndRiversAroundDirty(), and TileAddByDir().
|
static |
Get a tile from the virtual XY-coordinate.
x | The virtual x coordinate of the tile. |
y | The virtual y coordinate of the tile. |
Definition at line 404 of file map_func.h.
Referenced by AircraftLandAirplane(), CheckGroundVehiclesAtCorrectZ(), CheckTrainCollision(), CrashAirplane(), DrawStationCoverageAreaText(), FindStationsAroundSelection(), GetTileHeightBelowAircraft(), BuildRailToolbarWindow::OnHotkey(), BuildRoadToolbarWindow::OnHotkey(), UpdateStatusAfterSwap(), and YapfTrainCheckReverse().
|
static |
Get the X component of a tile.
tile | the tile to get the X component of |
Definition at line 415 of file map_func.h.
Referenced by OrthogonalTileArea::Add(), AyStar::AddStartNode(), AircraftGetEntryPoint(), AirportGetNearestTown(), AlignTileToGrid(), CalcClosestStationTile(), CalcHeightdiff(), CheckIfCanLevelIndustryPlatform(), OrthogonalTileArea::ClampToMap(), CmdBuildLongRoad(), CmdChangeBankBalance(), CmdClearArea(), CmdRemoveLongRoad(), OrthogonalTileArea::Contains(), DiagonalTileArea::Contains(), DiagdirBetweenTiles(), DiagonalTileArea::DiagonalTileArea(), DistanceFromEdge(), DistanceFromEdgeDir(), DistanceManhattan(), DistanceMax(), DistanceMaxPlusManhattan(), DistanceSquare(), SmallMapWindow::DrawTowns(), CargoPacket::GetDistance(), WaterRegion::GetLocalIndex(), GetOtherAqueductEnd(), GetPCPElevation(), RailTypeScopeResolver::GetRandomBits(), RoadTypeScopeResolver::GetRandomBits(), GetTileMaxZ(), GetTileSlopeZ(), GetTileZ(), GetTLG(), GetTunnelBridgeLength(), HouseScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), GUIPlaceProcDragXY(), Town::InitializeLayout(), CommandHelperBase::InternalPostBefore(), OrthogonalTileArea::Intersects(), IsTileAlignedToGrid(), IsTileFlat(), IsTunnelInWay(), AirportSpec::IsWithinMapBounds(), MarkTileDirtyByTile(), OrthogonalTileArea::OrthogonalTileArea(), CYapfDestinationTileT< Types >::PfCalcEstimate(), CYapfDestinationTileOrStationRailT< Types >::PfCalcEstimate(), CYapfDestinationTileRoadT< Types >::PfCalcEstimate(), CYapfDestinationTileWaterT< Types >::PfCalcEstimate(), ScrollMainWindowToTile(), ScrollWindowToTile(), SetWaterClassDependingOnSurroundings(), SwapDirection(), TerraformAddDirtyTileAround(), TileIndexToTileIndexDiffC(), TileStr(), CargoPacket::UpdateLoadingTile(), CargoPacket::UpdateUnloadingTile(), Town::UpdateVirtCoord(), Station::UpdateVirtCoord(), and Waypoint::UpdateVirtCoord().
|
static |
Returns the TileIndex of a coordinate.
x | The x coordinate of the tile |
y | The y coordinate of the tile |
Definition at line 373 of file map_func.h.
Referenced by OrthogonalTileArea::Add(), AlignTileToGrid(), FlatEmptyWorld(), GetTileMaxZ(), GetTileSlopeZ(), GetTileZ(), GetWaterRegionCenterTile(), BitmapTileArea::Initialize(), IsTileFlat(), LoadTownData(), OrthogonalTileArea::OrthogonalTileArea(), Station::RecomputeCatchment(), and StationRect::ScanForStationTiles().
|
static |
Get the Y component of a tile.
tile | the tile to get the Y component of |
Definition at line 425 of file map_func.h.
Referenced by OrthogonalTileArea::Add(), AyStar::AddStartNode(), AircraftGetEntryPoint(), AirportGetNearestTown(), AlignTileToGrid(), CalcClosestStationTile(), CheckIfCanLevelIndustryPlatform(), OrthogonalTileArea::ClampToMap(), CmdBuildLongRoad(), CmdChangeBankBalance(), CmdClearArea(), CmdRemoveLongRoad(), OrthogonalTileArea::Contains(), DiagonalTileArea::Contains(), DiagdirBetweenTiles(), DiagonalTileArea::DiagonalTileArea(), DistanceFromEdge(), DistanceFromEdgeDir(), DistanceManhattan(), DistanceMax(), DistanceMaxPlusManhattan(), DistanceSquare(), SmallMapWindow::DrawTowns(), CargoPacket::GetDistance(), GetOtherAqueductEnd(), RailTypeScopeResolver::GetRandomBits(), RoadTypeScopeResolver::GetRandomBits(), GetTileMaxZ(), GetTileSlopeZ(), GetTileZ(), GetTLG(), GetTunnelBridgeLength(), HouseScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), GUIPlaceProcDragXY(), Town::InitializeLayout(), CommandHelperBase::InternalPostBefore(), OrthogonalTileArea::Intersects(), IsTileAlignedToGrid(), IsTileFlat(), IsTunnelInWay(), AirportSpec::IsWithinMapBounds(), MarkTileDirtyByTile(), OrthogonalTileArea::OrthogonalTileArea(), CYapfDestinationTileT< Types >::PfCalcEstimate(), CYapfDestinationTileOrStationRailT< Types >::PfCalcEstimate(), CYapfDestinationTileRoadT< Types >::PfCalcEstimate(), CYapfDestinationTileWaterT< Types >::PfCalcEstimate(), ScrollMainWindowToTile(), ScrollWindowToTile(), SetWaterClassDependingOnSurroundings(), SwapDirection(), TerraformAddDirtyTileAround(), TileIndexToTileIndexDiffC(), TileStr(), CargoPacket::UpdateLoadingTile(), CargoPacket::UpdateUnloadingTile(), Town::UpdateVirtCoord(), Station::UpdateVirtCoord(), and Waypoint::UpdateVirtCoord().
|
inline |
Return the offset between two tiles from a TileIndexDiffC struct.
This function works like TileDiffXY(int, int) and returns the difference between two tiles.
tidc | The coordinate of the offset as TileIndexDiffC |
Definition at line 440 of file map_func.h.
References TileDiffXY(), TileIndexDiffC::x, and TileIndexDiffC::y.
Referenced by CalcHeightdiff(), Airport::GetRotatedTileFromOffset(), GrowTown(), AirportTileTableIterator::operator++(), RoadTypesAllowHouseHere(), TileOffsByAxis(), TileOffsByDiagDir(), and TileOffsByDir().