OpenTTD Source: src/pathfinder/water_regions.cpp File Reference

OpenTTD Source 15.0-beta1

Data Structures | Typedefs | Functions | Variables
water_regions.cpp File Reference

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

`#include "stdafx.h"`
`#include "map_func.h"`
`#include "water_regions.h"`
`#include "tilearea_type.h"`
`#include "track_func.h"`
`#include "transport_type.h"`
`#include "landscape.h"`
`#include "tunnelbridge_map.h"`
`#include "follow_track.hpp"`
`#include "ship.h"`
`#include "debug.h"`

Go to the source code of this file.

## Data Structures
class | WaterRegionData
| The data stored for each water region. More...
class | WaterRegion
| Represents a square section of the map of a fixed size. More...

## Typedefs
using | TWaterRegionTraversabilityBits = uint16_t
using | TWaterRegionPatchLabelArray = std::array< TWaterRegionPatchLabel, WATER_REGION_NUMBER_OF_TILES >

## Functions
static TrackBits | GetWaterTracks (TileIndex tile)
static bool | IsAqueductTile (TileIndex tile)
static int | GetWaterRegionX (TileIndex tile)
static int | GetWaterRegionY (TileIndex tile)
static int | GetWaterRegionMapSizeX ()
static int | GetWaterRegionMapSizeY ()
static TWaterRegionIndex | GetWaterRegionIndex (int region_x, int region_y)
static TWaterRegionIndex | GetWaterRegionIndex (TileIndex tile)
static TileIndex | GetTileIndexFromLocalCoordinate (int region_x, int region_y, int local_x, int local_y)
static TileIndex | GetEdgeTileCoordinate (int region_x, int region_y, DiagDirection side, int x_or_y)
static WaterRegion | GetUpdatedWaterRegion (uint16_t region_x, uint16_t region_y)
static WaterRegion | GetUpdatedWaterRegion (TileIndex tile)
static TWaterRegionIndex | GetWaterRegionIndex (const WaterRegionDesc &water_region)
| Returns the index of the water region.
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.
static void | VisitAdjacentWaterRegionPatchNeighbors (const WaterRegionPatchDesc &water_region_patch, DiagDirection side, TVisitWaterRegionPatchCallBack &func)
| Calls the provided callback function for all water region patches accessible from one particular side of the starting patch.
void | VisitWaterRegionPatchNeighbors (const WaterRegionPatchDesc &water_region_patch, TVisitWaterRegionPatchCallBack &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 TWaterRegionPatchLabel | FIRST_REGION_LABEL = 1
std::vector< WaterRegionData > | _water_region_data
std::vector< bool > | _is_water_region_valid

## Detailed Description

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

Definition in file water_regions.cpp.

## Typedef Documentation

## ◆ TWaterRegionPatchLabelArray

using TWaterRegionPatchLabelArray = std::array<TWaterRegionPatchLabel, WATER_REGION_NUMBER_OF_TILES>

Definition at line 40 of file water_regions.cpp.

## ◆ TWaterRegionTraversabilityBits

using TWaterRegionTraversabilityBits = uint16_t

Definition at line 22 of file water_regions.cpp.

## Function Documentation

## ◆ AllocateWaterRegions()

void AllocateWaterRegions | ( |  | ) |

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

Definition at line 409 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_patch | The Water region to calculate the hash for.

Definition at line 270 of file water_regions.cpp.

References WaterRegionPatchDesc::label.

## ◆ GetEdgeTileCoordinate()

static TileIndex GetEdgeTileCoordinate | ( | int | region_x,
|  | int | region_y,
|  | DiagDirection | side,
|  | int | x_or_y
| ) |  |
| static

Definition at line 229 of file water_regions.cpp.

## ◆ GetTileIndexFromLocalCoordinate()

static TileIndex GetTileIndexFromLocalCoordinate | ( | int | region_x,
|  | int | region_y,
|  | int | local_x,
|  | int | local_y
| ) |  |
| static

Definition at line 222 of file water_regions.cpp.

## ◆ GetUpdatedWaterRegion() [1/2]

static WaterRegion GetUpdatedWaterRegion | ( | TileIndex | tile | ) |
| static

Definition at line 252 of file water_regions.cpp.

## ◆ GetUpdatedWaterRegion() [2/2]

static WaterRegion GetUpdatedWaterRegion | ( | uint16_t | region_x,
|  | uint16_t | region_y
| ) |  |
| static

Definition at line 241 of file water_regions.cpp.

## ◆ GetWaterRegionCenterTile()

TileIndex GetWaterRegionCenterTile | ( | const WaterRegionDesc & | water_region | ) |

Returns the center tile of a particular water region.

Parameters

  water_region | The water region to find the center tile for.

Returns
  The center tile of the water region.

Definition at line 280 of file water_regions.cpp.

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

## ◆ GetWaterRegionIndex() [1/3]

static TWaterRegionIndex GetWaterRegionIndex | ( | const WaterRegionDesc & | water_region | ) |
| static

Returns the index of the water region.

Parameters

  water_region | The water region to return the index for.

Definition at line 261 of file water_regions.cpp.

References WaterRegionDesc::x, and WaterRegionDesc::y.

## ◆ GetWaterRegionIndex() [2/3]

static TWaterRegionIndex GetWaterRegionIndex | ( | int | region_x,
|  | int | region_y
| ) |  |
| inlinestatic

Definition at line 37 of file water_regions.cpp.

## ◆ GetWaterRegionIndex() [3/3]

static TWaterRegionIndex GetWaterRegionIndex | ( | TileIndex | tile | ) |
| inlinestatic

Definition at line 38 of file water_regions.cpp.

## ◆ GetWaterRegionInfo()

WaterRegionDesc GetWaterRegionInfo | ( | TileIndex | tile | ) |

Returns basic water region information for the provided tile.

Parameters

  tile | The tile for which the information will be calculated.

Definition at line 289 of file water_regions.cpp.

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

## ◆ GetWaterRegionMapSizeX()

static int GetWaterRegionMapSizeX | ( |  | ) |
| inlinestatic

Definition at line 34 of file water_regions.cpp.

## ◆ GetWaterRegionMapSizeY()

static int GetWaterRegionMapSizeY | ( |  | ) |
| inlinestatic

Definition at line 35 of file water_regions.cpp.

## ◆ GetWaterRegionPatchInfo()

WaterRegionPatchDesc GetWaterRegionPatchInfo | ( | TileIndex | tile | ) |

Returns basic water region patch information for the provided tile.

Parameters

  tile | The tile for which the information will be calculated.

Definition at line 298 of file water_regions.cpp.

References WaterRegion::GetLabel().

Referenced by VisitWaterRegionPatchNeighbors().

## ◆ GetWaterRegionX()

static int GetWaterRegionX | ( | TileIndex | tile | ) |
| inlinestatic

Definition at line 31 of file water_regions.cpp.

## ◆ GetWaterRegionY()

static int GetWaterRegionY | ( | TileIndex | tile | ) |
| inlinestatic

Definition at line 32 of file water_regions.cpp.

## ◆ GetWaterTracks()

static TrackBits GetWaterTracks | ( | TileIndex | tile | ) |
| inlinestatic

Definition at line 28 of file water_regions.cpp.

## ◆ InvalidateWaterRegion()

void InvalidateWaterRegion | ( | TileIndex | tile | ) |

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

Parameters

  tile | Tile within the water region that we wish to invalidate.

Definition at line 308 of file water_regions.cpp.

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

Referenced by BuildObject(), and DoBuildLock().

## ◆ IsAqueductTile()

static bool IsAqueductTile | ( | TileIndex | tile | ) |
| inlinestatic

Definition at line 29 of file water_regions.cpp.

## ◆ PrintWaterRegionDebugInfo()

void PrintWaterRegionDebugInfo | ( | TileIndex | tile | ) |

Definition at line 423 of file water_regions.cpp.

## ◆ VisitAdjacentWaterRegionPatchNeighbors()

static void VisitAdjacentWaterRegionPatchNeighbors | ( | const WaterRegionPatchDesc & | water_region_patch,
|  | DiagDirection | side,
|  | TVisitWaterRegionPatchCallBack & | func
| ) |  |
| inlinestatic

Calls the provided callback function for all water region patches accessible from one particular side of the starting patch.

Parameters

  water_region_patch | Water patch within the water region to start searching from
  side | Side of the water region to look for neigboring patches of water
  callback | The function that will be called for each neighbor that is found

Definition at line 337 of file water_regions.cpp.

References WaterRegion::GetEdgeTraversabilityBits(), WaterRegion::GetLabel(), HasBit(), WaterRegionPatchDesc::label, WaterRegion::NumberOfPatches(), ReverseDiagDir(), TileIndexDiffCByDiagDir(), TileIndexDiffC::x, WaterRegionPatchDesc::x, TileIndexDiffC::y, and WaterRegionPatchDesc::y.

Referenced by VisitWaterRegionPatchNeighbors().

## ◆ VisitWaterRegionPatchNeighbors()

void VisitWaterRegionPatchNeighbors | ( | const WaterRegionPatchDesc & | water_region_patch,
|  | TVisitWaterRegionPatchCallBack & | 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_patch | Water patch within the water region to start searching from
  callback | The function that will be called for each accessible water patch that is found

Definition at line 386 of file water_regions.cpp.

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

## Variable Documentation

## ◆ _is_water_region_valid

std::vector<bool> _is_water_region_valid

Definition at line 220 of file water_regions.cpp.

## ◆ _water_region_data

std::vector<WaterRegionData> _water_region_data

Definition at line 219 of file water_regions.cpp.

## ◆ FIRST_REGION_LABEL

constexpr TWaterRegionPatchLabel FIRST_REGION_LABEL = 1
| constexpr

Definition at line 23 of file water_regions.cpp.