44 | /** Available water tile types. */
| 44 | /** Available water tile types. */ |
---|
45 | @@ -55,6 +56,12 @@
| | |
---|
46 | /** Helper information for extract tool. */
| | |
---|
47 | template <> struct EnumPropsT<WaterClass> : MakeEnumPropsT<WaterClass, byte, WATER_CLASS_SEA, WATER_CLASS_INVALID, WATER_CLASS_INVALID, 2> {};
| | |
---|
48 |
| | |
---|
49 | +/** Bases of a canal (for #WATER_CLASS_CANAL class of water). */
| | |
---|
50 | +enum CanalBase {
| | |
---|
51 | + WCC_WITHOUT_RIVER = 0, ///< Without a river under it
| | |
---|
52 | + WCC_WITH_RIVER = 1, ///< With a river under it
| | |
---|
53 | +};
| | |
---|
54 | +
| | |
---|
55 | /** Sections of the water depot. */
| | |
---|
56 | enum DepotPart {
| | |
---|
57 | DEPOT_PART_NORTH = 0, ///< Northern part of a depot.
| | |
---|
58 | @@ -122,6 +129,40 @@
| | |
---|
59 | }
| | |
---|
60 |
| | |
---|
61 | /**
| | |
---|
62 | + * Get the base of the canal at a tile.
| | |
---|
63 | + * @param t Water tile to query.
| | |
---|
64 | + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
| | |
---|
65 | + * @return Base of the canal at the tile.
| | |
---|
66 | + */
| | |
---|
67 | +static inline CanalBase GetCanalBase(TileIndex t)
| | |
---|
68 | +{
| | |
---|
69 | + assert(GetWaterClass(t) == WATER_CLASS_CANAL);
| | |
---|
70 | + return (CanalBase)HasBit(_me[t].m6, WBL_RIVER_FLAG) ? WCC_WITH_RIVER : WCC_WITHOUT_RIVER;
| | |
---|
71 | +}
| | |
---|
72 | +
| | |
---|
73 | +/**
| | |
---|
74 | + * Set the base of the canal to indicate there is a river under a tile.
| | |
---|
75 | + * @param t Water tile of water class canal to query.
| | |
---|
76 | + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
| | |
---|
77 | + */
| | |
---|
78 | +static inline void SetCanalOnRiver(TileIndex t)
| | |
---|
79 | +{
| | |
---|
80 | + assert(GetWaterClass(t) == WATER_CLASS_CANAL);
| | |
---|
81 | + SB(_me[t].m6, 0, WBL_RIVER_FLAG, WCC_WITH_RIVER);
| | |
---|
82 | +}
| | |
---|
83 | +
| | |
---|
84 | +/**
| | |
---|
85 | + * Checks whether the canal at a tile has a river under it.
| | |
---|
86 | + * @param t Water tile of water class canal to query.
| | |
---|
87 | + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
| | |
---|
88 | + * @return true if the canal has a river under it.
| | |
---|
89 | + */
| | |
---|
90 | +static inline bool HasTileCanalOnRiver(TileIndex t)
| | |
---|
91 | +{
| | |
---|
92 | + return HasTileWaterClass(t) && GetWaterClass(t) == WATER_CLASS_CANAL && GetCanalBase(t) == WCC_WITH_RIVER;
| | |
---|
93 | +}
| | |
---|
94 | +
| | |
---|
95 | +/**
| | |
---|
96 | * Tests if the tile was built on water.
| | |
---|
97 | * @param t the tile to check
| | |
---|
98 | * @pre IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) | | |
---|