OpenTTD Source  20241108-master-g80f628063a
water_regions.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef WATER_REGIONS_H
11 #define WATER_REGIONS_H
12 
13 #include "tile_type.h"
14 #include "map_func.h"
15 
16 using TWaterRegionPatchLabel = uint8_t;
17 using TWaterRegionIndex = uint;
18 
19 constexpr int WATER_REGION_EDGE_LENGTH = 16;
20 constexpr int WATER_REGION_NUMBER_OF_TILES = WATER_REGION_EDGE_LENGTH * WATER_REGION_EDGE_LENGTH;
21 constexpr TWaterRegionPatchLabel INVALID_WATER_REGION_PATCH = 0;
22 
27 {
28  int x;
29  int y;
30  TWaterRegionPatchLabel label;
31 
32  bool operator==(const WaterRegionPatchDesc &other) const { return x == other.x && y == other.y && label == other.label; }
33  bool operator!=(const WaterRegionPatchDesc &other) const { return !(*this == other); }
34 };
35 
36 
41 {
42  int x;
43  int y;
44 
45  WaterRegionDesc(const int x, const int y) : x(x), y(y) {}
46  WaterRegionDesc(const WaterRegionPatchDesc &water_region_patch) : x(water_region_patch.x), y(water_region_patch.y) {}
47 
48  bool operator==(const WaterRegionDesc &other) const { return x == other.x && y == other.y; }
49  bool operator!=(const WaterRegionDesc &other) const { return !(*this == other); }
50 };
51 
52 int CalculateWaterRegionPatchHash(const WaterRegionPatchDesc &water_region_patch);
53 
55 
58 
60 
61 using TVisitWaterRegionPatchCallBack = std::function<void(const WaterRegionPatchDesc &)>;
62 void VisitWaterRegionPatchNeighbors(const WaterRegionPatchDesc &water_region_patch, TVisitWaterRegionPatchCallBack &callback);
63 
65 
66 void PrintWaterRegionDebugInfo(TileIndex tile);
67 
68 #endif /* WATER_REGIONS_H */
Functions related to maps.
Describes a single square water region.
Definition: water_regions.h:41
int x
The X coordinate of the water region, i.e. X=2 is the 3rd water region along the X-axis.
Definition: water_regions.h:42
int y
The Y coordinate of the water region, i.e. Y=2 is the 3rd water region along the Y-axis.
Definition: water_regions.h:43
Describes a single interconnected patch of water within a particular water region.
Definition: water_regions.h:27
TWaterRegionPatchLabel label
Unique label identifying the patch within the region.
Definition: water_regions.h:30
int y
The Y coordinate of the water region, i.e. Y=2 is the 3rd water region along the Y-axis.
Definition: water_regions.h:29
int x
The X coordinate of the water region, i.e. X=2 is the 3rd water region along the X-axis.
Definition: water_regions.h:28
Types related to tiles.
void AllocateWaterRegions()
Allocates the appropriate amount of water regions for the current map size.
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.
TileIndex GetWaterRegionCenterTile(const WaterRegionDesc &water_region)
Returns the center tile of a particular water region.
void InvalidateWaterRegion(TileIndex tile)
Marks the water region that tile is part of as invalid.
void VisitWaterRegionPatchNeighbors(const WaterRegionPatchDesc &water_region_patch, TVisitWaterRegionPatchCallBack &callback)
Calls the provided callback function on all accessible water region patches in each cardinal directio...
int CalculateWaterRegionPatchHash(const WaterRegionPatchDesc &water_region_patch)
Calculates a number that uniquely identifies the provided water region patch.