OpenTTD
|
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 "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 | |
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 | |
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 = NULL |
Tiles of the map. | |
TileExtended * | _me = NULL |
Extended Tiles of the map. | |
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.
void AllocateMap | ( | uint | size_x, |
uint | size_y | ||
) |
(Re)allocates a map with the given dimension
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 41 of file map.cpp.
References _map_log_x, _map_log_y, _map_size, _map_size_x, _map_size_y, _map_tile_mask, DEBUG, error(), FindFirstBit(), free(), IsInsideMM(), MAX_MAP_SIZE, and MIN_MAP_SIZE.
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 260 of file map.cpp.
References CircularTileSearch(), DIR_N, TILE_ADD, and TileOffsByDir().
Referenced by ChopLumberMillTrees(), CircularTileSearch(), CmdBuildCanal(), CreateRivers(), FindNearestGoodCoastalTownSpot(), FindStationsNearby(), FlowRiver(), GetDistanceFromNearbyHouse(), Station::RecomputeIndustriesNear(), TownActionBuildStatue(), and TryBuildTransmitter().
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 298 of file map.cpp.
References DIAGDIR_BEGIN, DIAGDIR_END, DIR_W, INVALID_TILE, MapSizeX(), MapSizeY(), TileX(), TileXY(), TileY(), TileIndexDiffC::x, and TileIndexDiffC::y.
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 219 of file map.cpp.
References MapSizeX(), MapSizeY(), min(), TileX(), and TileY().
Referenced by CheckNewIndustry_OilRefinery(), CheckNewIndustry_OilRig(), 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 236 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 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 159 of file map.cpp.
References Delta(), TileX(), and TileY().
Referenced by AirportGetNearestTown(), CalcClosestTownFromTile(), CalcRaildirsDrawstyle(), CheckSubsidyDistance(), ClosestTownFromTile(), DeleteStaleLinks(), DeliverGoods(), FindDeletedWaypointCloseTo(), FindSubsidyPassengerRoute(), FlowRiver(), FlowsDown(), GetClosestDeletedStation(), GetClosestObject(), GetCountAndDistanceOfClosestInstance(), GetDistanceFromNearbyHouse(), GetMinimalAirportDistanceToTile(), GetOrderDistance(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), IsCloseToTown(), CargoPayment::PayTransfer(), Station::RecomputeIndustriesNear(), 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 191 of file map.cpp.
References Delta(), max(), TileX(), and TileY().
Referenced by CheckIfFarEnoughFromConflictingIndustry(), CheckIfIndustryIsAllowed(), and FindStationsNearby().
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 207 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 176 of file map.cpp.
References TileX(), and TileY().
Referenced by CmdBuildBridge(), CmdBuildRoad(), CmdBuildTunnel(), FindNearestHangar(), GetOrderDistance(), GetTownRadiusGroup(), IndustriesScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), and UpdateTownGrowRate().
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 342 of file map.cpp.
References _settings_game, GameSettings::construction, DIAGDIR_BEGIN, DIAGDIR_END, ConstructionSettings::freeform_edges, HasTileWaterGround(), IsInsideMM(), IsTileType(), MapMaxX(), MapMaxY(), MapSize(), 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 116 of file map.cpp.
References _settings_game, GameSettings::construction, ConstructionSettings::freeform_edges, INVALID_TILE, MapMaxX(), MapMaxY(), TileX(), TileXY(), and TileY().
Referenced by CheckIfIndustryTilesAreFree(), CmdBuildRoadStop(), CmdRemoveRoadStop(), CountMapSquareAround(), DisasterTick_Big_Ufo_Destroyer(), FindSpring(), PlaceTreeAtSameHeight(), and PlaceTreeGroups().
Tile* _m = NULL |
Tiles of the map.
Pointer to the tile-array.
Definition at line 32 of file map.cpp.
Referenced by AddClearCounter(), AddClearDensity(), AddTreeCount(), AddTreeCounter(), AddTreeGrowth(), AfterLoadGame(), ClearSingleBridgeMiddle(), ClearSnow(), FixOldVehicles(), GetBridgeAxis(), GetCleanHouseType(), GetCleanIndustryGfx(), GetClearCounter(), GetClearDensity(), GetCrossingRoadAxis(), GetCustomStationSpecIndex(), GetDepotIndex(), GetDisallowedRoadDirections(), GetFence(), GetFieldType(), GetHouseAge(), GetHouseBuildingStage(), GetHouseConstructionTick(), GetHouseRandomBits(), GetHouseTriggers(), GetIndustryAnimationLoop(), GetIndustryConstructionCounter(), GetIndustryConstructionStage(), GetIndustryIndex(), GetIndustryIndexOfField(), GetIndustryRandomBits(), GetLockDirection(), GetLockPart(), GetObjectIndex(), GetObjectRandomBits(), GetPresentSignals(), GetRailDepotDirection(), GetRailReservationTrackBits(), GetRailTileType(), GetRailType(), GetRawClearGround(), GetRoadBits(), GetRoadDepotDirection(), GetRoadOwner(), 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(), 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(), SetFence(), SetFieldType(), SetHasSignals(), SetHouseCompleted(), SetHouseRandomBits(), SetHouseTriggers(), SetHouseType(), SetIndustryAnimationLoop(), SetIndustryCompleted(), SetIndustryConstructionCounter(), SetIndustryConstructionStage(), SetIndustryGfx(), SetIndustryIndexOfField(), SetIndustryRandomBits(), SetPresentSignals(), SetRailType(), SetRoadBits(), SetRoadOwner(), SetSignalStates(), SetStationGfx(), SetStationTileRandomBits(), SetTileHeight(), SetTileOwner(), SetTileType(), SetTownIndex(), SetTrackBits(), SetTrackReservation(), SetTreeCounter(), SetTreeGroundDensity(), SetTreeGrowth(), SetTropicZone(), SetTunnelBridgeReservation(), SetWaterClass(), SetWaterClassDependingOnSurroundings(), TileHeight(), and CrashLog::WriteSavegame().
TileExtended* _me = NULL |
Extended Tiles of the map.
Pointer to the extended tile-array.
Definition at line 33 of file map.cpp.
Referenced by AfterLoadGame(), DecHouseProcessingTime(), GetAnimationFrame(), GetBridgeType(), GetCleanIndustryGfx(), GetFence(), GetHouseProcessingTime(), GetIndustryTriggers(), GetLiftDestination(), GetLiftPosition(), GetRoadOwner(), GetRoadside(), GetRoadTypes(), 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(), SetFence(), SetHouseProcessingTime(), SetIndustryGfx(), SetIndustryTriggers(), SetLiftDestination(), SetLiftPosition(), SetRailStationReservation(), SetRoadOwner(), SetRoadside(), SetRoadTypes(), SetTunnelBridgeSnowOrDesert(), TerminateRoadWorks(), and ToggleSnow().
const TileIndexDiffC _tileoffs_by_diagdir[] |
'Lookup table' for tile offsets given a DiagDirection
Referenced by TileIndexDiffCByDiagDir(), and TileOffsByDiagDir().
const TileIndexDiffC _tileoffs_by_dir[] |
'Lookup table' for tile offsets given a Direction
Referenced by TileIndexDiffCByDir(), and TileOffsByDir().