OpenTTD Source  14.0-beta1
WaterRegion Class Reference

Represents a square section of the map of a fixed size. More...

Public Member Functions

 WaterRegion (int region_x, int region_y)
 
OrthogonalTileIterator begin () const
 
OrthogonalTileIterator end () const
 
bool IsInitialized () const
 
void Invalidate ()
 
TWaterRegionTraversabilityBits GetEdgeTraversabilityBits (DiagDirection side) const
 Returns a set of bits indicating whether an edge tile on a particular side is traversable or not. More...
 
int NumberOfPatches () const
 
bool HasCrossRegionAqueducts () const
 
TWaterRegionPatchLabel GetLabel (TileIndex tile) const
 Returns the patch label that was assigned to the tile. More...
 
void ForceUpdate ()
 Performs the connected component labeling and other data gathering. More...
 
void UpdateIfNotInitialized ()
 Updates the patch labels and other data, but only if the region is not yet initialized.
 

Private Member Functions

int GetLocalIndex (TileIndex tile) const
 Returns the local index of the tile within the region. More...
 

Private Attributes

std::array< TWaterRegionTraversabilityBits, DIAGDIR_ENDedge_traversability_bits {}
 
bool has_cross_region_aqueducts = false
 
TWaterRegionPatchLabel number_of_patches = 0
 
const OrthogonalTileArea tile_area
 
std::array< TWaterRegionPatchLabel, WATER_REGION_NUMBER_OF_TILES > tile_patch_labels {}
 
bool initialized = false
 

Detailed Description

Represents a square section of the map of a fixed size.

Within this square individual unconnected patches of water are identified using a Connected Component Labeling (CCL) algorithm. Note that all information stored in this class applies only to tiles within the square section, there is no knowledge about the rest of the map. This makes it easy to invalidate and update a water region if any changes are made to it, such as construction or terraforming.

Definition at line 48 of file water_regions.cpp.

Member Function Documentation

◆ ForceUpdate()

void WaterRegion::ForceUpdate ( )
inline

Performs the connected component labeling and other data gathering.

See also
WaterRegion

Definition at line 117 of file water_regions.cpp.

References Debug.

Referenced by UpdateIfNotInitialized().

◆ GetEdgeTraversabilityBits()

TWaterRegionTraversabilityBits WaterRegion::GetEdgeTraversabilityBits ( DiagDirection  side) const
inline

Returns a set of bits indicating whether an edge tile on a particular side is traversable or not.

These values can be used to determine whether a ship can enter/leave the region through a particular edge tile.

See also
GetLocalIndex() for a description of the coordinate system used.
Parameters
sideWhich side of the region we want to know the edge traversability of.
Returns
A value holding the edge traversability bits.

Definition at line 89 of file water_regions.cpp.

◆ GetLabel()

TWaterRegionPatchLabel WaterRegion::GetLabel ( TileIndex  tile) const
inline

Returns the patch label that was assigned to the tile.

Parameters
tileThe tile of which we want to retrieve the label.
Returns
The label assigned to the tile.

Definition at line 107 of file water_regions.cpp.

References OrthogonalTileArea::Contains(), and GetLocalIndex().

◆ GetLocalIndex()

int WaterRegion::GetLocalIndex ( TileIndex  tile) const
inlineprivate

Returns the local index of the tile within the region.

The N corner represents 0, the x direction is positive in the SW direction, and Y is positive in the SE direction.

Parameters
tileTile within the water region.
Returns
The local index.

Definition at line 64 of file water_regions.cpp.

References OrthogonalTileArea::Contains(), OrthogonalTileArea::tile, and TileX().

Referenced by GetLabel().

◆ HasCrossRegionAqueducts()

bool WaterRegion::HasCrossRegionAqueducts ( ) const
inline
Returns
Whether the water region contains aqueducts that cross the region boundaries.

Definition at line 100 of file water_regions.cpp.

◆ NumberOfPatches()

int WaterRegion::NumberOfPatches ( ) const
inline
Returns
The amount of individual water patches present within the water region. A value of 0 means there is no water present in the water region at all.

Definition at line 95 of file water_regions.cpp.


The documentation for this class was generated from the following file: