OpenTTD Source 20250602-master-gea0b3983a5
water_regions.h File Reference

Handles dividing the water in the map into regions to assist pathfinding. More...

Go to the source code of this file.

Data Structures

struct  WaterRegionPatchDesc
 Describes a single interconnected patch of water within a particular water region. More...
 
struct  WaterRegionDesc
 Describes a single square water region. More...
 

Typedefs

using WaterRegionIndex = StrongType::Typedef< uint, struct TWaterRegionIndexTag, StrongType::Compare >
 
using WaterRegionPatchLabel = StrongType::Typedef< uint8_t, struct TWaterRegionPatchLabelTag, StrongType::Compare, StrongType::Integer >
 
using VisitWaterRegionPatchCallback = std::function< void(const WaterRegionPatchDesc &)>
 

Functions

int CalculateWaterRegionPatchHash (const WaterRegionPatchDesc &water_region_patch)
 Calculates a number that uniquely identifies the provided water region patch.
 
TileIndex GetWaterRegionCenterTile (const WaterRegionDesc &water_region)
 Returns the center tile of a particular water region.
 
WaterRegionDesc GetWaterRegionInfo (TileIndex tile)
 Returns basic water region information for the provided tile.
 
WaterRegionPatchDesc GetWaterRegionPatchInfo (TileIndex tile)
 Returns basic water region patch information for the provided tile.
 
void InvalidateWaterRegion (TileIndex tile)
 Marks the water region that tile is part of as invalid.
 
void VisitWaterRegionPatchNeighbours (const WaterRegionPatchDesc &water_region_patch, VisitWaterRegionPatchCallback &callback)
 Calls the provided callback function on all accessible water region patches in each cardinal direction, plus any others that are reachable via aqueducts.
 
void AllocateWaterRegions ()
 Allocates the appropriate amount of water regions for the current map size.
 
void PrintWaterRegionDebugInfo (TileIndex tile)
 

Variables

constexpr int WATER_REGION_EDGE_LENGTH = 16
 
constexpr int WATER_REGION_NUMBER_OF_TILES = WATER_REGION_EDGE_LENGTH * WATER_REGION_EDGE_LENGTH
 
constexpr WaterRegionPatchLabel INVALID_WATER_REGION_PATCH {0}
 

Detailed Description

Handles dividing the water in the map into regions to assist pathfinding.

Definition in file water_regions.h.

Typedef Documentation

◆ VisitWaterRegionPatchCallback

using VisitWaterRegionPatchCallback = std::function<void(const WaterRegionPatchDesc &)>

Definition at line 60 of file water_regions.h.

◆ WaterRegionIndex

using WaterRegionIndex = StrongType::Typedef<uint, struct TWaterRegionIndexTag, StrongType::Compare>

Definition at line 17 of file water_regions.h.

◆ WaterRegionPatchLabel

using WaterRegionPatchLabel = StrongType::Typedef<uint8_t, struct TWaterRegionPatchLabelTag, StrongType::Compare, StrongType::Integer>

Definition at line 18 of file water_regions.h.

Function Documentation

◆ AllocateWaterRegions()

void AllocateWaterRegions ( )

Allocates the appropriate amount of water regions for the current map size.

Definition at line 415 of file water_regions.cpp.

References Debug.

Referenced by Map::Allocate().

◆ CalculateWaterRegionPatchHash()

int CalculateWaterRegionPatchHash ( const WaterRegionPatchDesc water_region_patch)

Calculates a number that uniquely identifies the provided water region patch.

Parameters
water_region_patchThe Water region to calculate the hash for.

Definition at line 276 of file water_regions.cpp.

References WaterRegionPatchDesc::label.

◆ GetWaterRegionCenterTile()

TileIndex GetWaterRegionCenterTile ( const WaterRegionDesc water_region)

Returns the center tile of a particular water region.

Parameters
water_regionThe water region to find the center tile for.
Returns
The center tile of the water region.

Definition at line 286 of file water_regions.cpp.

References TileXY(), WaterRegionDesc::x, and WaterRegionDesc::y.

◆ GetWaterRegionInfo()

WaterRegionDesc GetWaterRegionInfo ( TileIndex  tile)

Returns basic water region information for the provided tile.

Parameters
tileThe tile for which the information will be calculated.

Definition at line 295 of file water_regions.cpp.

Referenced by CYapfFollowShipT< Types >::PfFollowNode().

◆ GetWaterRegionPatchInfo()

WaterRegionPatchDesc GetWaterRegionPatchInfo ( TileIndex  tile)

Returns basic water region patch information for the provided tile.

Parameters
tileThe tile for which the information will be calculated.

Definition at line 304 of file water_regions.cpp.

References WaterRegion::GetLabel().

Referenced by VisitWaterRegionPatchNeighbours().

◆ InvalidateWaterRegion()

void InvalidateWaterRegion ( TileIndex  tile)

Marks the water region that tile is part of as invalid.

Parameters
tileTile within the water region that we wish to invalidate.

Definition at line 314 of file water_regions.cpp.

References AddTileIndexDiffCWrap(), Debug, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_TILE, IsValidTile(), and TileIndexDiffCByDiagDir().

Referenced by BuildObject(), DoBuildLock(), and DoFloodTile().

◆ PrintWaterRegionDebugInfo()

void PrintWaterRegionDebugInfo ( TileIndex  tile)

Definition at line 429 of file water_regions.cpp.

◆ VisitWaterRegionPatchNeighbours()

void VisitWaterRegionPatchNeighbours ( const WaterRegionPatchDesc water_region_patch,
VisitWaterRegionPatchCallback &  callback 
)

Calls the provided callback function on all accessible water region patches in each cardinal direction, plus any others that are reachable via aqueducts.

Parameters
water_region_patchWater patch within the water region to start searching from
callbackThe function that will be called for each accessible water patch that is found

Definition at line 392 of file water_regions.cpp.

References DIAGDIR_BEGIN, DIAGDIR_END, GetOtherBridgeEnd(), GetWaterRegionPatchInfo(), WaterRegion::HasCrossRegionAqueducts(), WaterRegionPatchDesc::label, VisitAdjacentWaterRegionPatchNeighbours(), WaterRegionPatchDesc::x, and WaterRegionPatchDesc::y.

Variable Documentation

◆ INVALID_WATER_REGION_PATCH

constexpr WaterRegionPatchLabel INVALID_WATER_REGION_PATCH {0}
constexpr

Definition at line 22 of file water_regions.h.

◆ WATER_REGION_EDGE_LENGTH

constexpr int WATER_REGION_EDGE_LENGTH = 16
constexpr

Definition at line 20 of file water_regions.h.

◆ WATER_REGION_NUMBER_OF_TILES

constexpr int WATER_REGION_NUMBER_OF_TILES = WATER_REGION_EDGE_LENGTH * WATER_REGION_EDGE_LENGTH
constexpr

Definition at line 21 of file water_regions.h.