OpenTTD Source: WaterRegion Class Reference

OpenTTD Source 14.0-beta1

Public Member Functions | Private Member Functions | Private Attributes
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_END > | edge_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

  side | Which 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

  tile | The 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

  tile | Tile 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:

- src/pathfinder/water_regions.cpp