OpenTTD
Data Structures | Enumerations | Functions
water_map.h File Reference

Map accessors for water tiles. More...

#include "depot_type.h"
#include "tile_map.h"

Go to the source code of this file.

Data Structures

struct  EnumPropsT< WaterClass >
 Helper information for extract tool. More...
 

Enumerations

enum  WaterTileTypeBitLayout {
  WBL_TYPE_BEGIN = 4, WBL_TYPE_COUNT = 4, WBL_TYPE_NORMAL = 0x0, WBL_TYPE_LOCK = 0x1,
  WBL_TYPE_DEPOT = 0x8, WBL_COAST_FLAG = 0, WBL_LOCK_ORIENT_BEGIN = 0, WBL_LOCK_ORIENT_COUNT = 2,
  WBL_LOCK_PART_BEGIN = 2, WBL_LOCK_PART_COUNT = 2, WBL_DEPOT_PART = 0, WBL_DEPOT_AXIS = 1
}
 Bit field layout of m5 for water tiles. More...
 
enum  WaterTileType { WATER_TILE_CLEAR, WATER_TILE_COAST, WATER_TILE_LOCK, WATER_TILE_DEPOT }
 Available water tile types. More...
 
enum  WaterClass { WATER_CLASS_SEA, WATER_CLASS_CANAL, WATER_CLASS_RIVER, WATER_CLASS_INVALID }
 classes of water (for WATER_TILE_CLEAR water tile type). More...
 
enum  DepotPart { DEPOT_PART_NORTH = 0, DEPOT_PART_SOUTH = 1, DEPOT_PART_END }
 Sections of the water depot. More...
 
enum  LockPart { LOCK_PART_MIDDLE = 0, LOCK_PART_LOWER = 1, LOCK_PART_UPPER = 2 }
 Sections of the water lock. More...
 

Functions

static WaterTileType GetWaterTileType (TileIndex t)
 Get the water tile type at a tile. More...
 
static bool HasTileWaterClass (TileIndex t)
 Checks whether the tile has an waterclass associated. More...
 
static WaterClass GetWaterClass (TileIndex t)
 Get the water class at a tile. More...
 
static void SetWaterClass (TileIndex t, WaterClass wc)
 Set the water class at a tile. More...
 
static bool IsTileOnWater (TileIndex t)
 Tests if the tile was built on water. More...
 
static bool IsWater (TileIndex t)
 Is it a plain water tile? More...
 
static bool IsSea (TileIndex t)
 Is it a sea water tile? More...
 
static bool IsCanal (TileIndex t)
 Is it a canal tile? More...
 
static bool IsRiver (TileIndex t)
 Is it a river water tile? More...
 
static bool IsWaterTile (TileIndex t)
 Is it a water tile with plain water? More...
 
static bool IsCoast (TileIndex t)
 Is it a coast tile? More...
 
static bool IsCoastTile (TileIndex t)
 Is it a coast tile. More...
 
static bool IsShipDepot (TileIndex t)
 Is it a water tile with a ship depot on it? More...
 
static bool IsShipDepotTile (TileIndex t)
 Is it a ship depot tile? More...
 
static Axis GetShipDepotAxis (TileIndex t)
 Get the axis of the ship depot. More...
 
static DepotPart GetShipDepotPart (TileIndex t)
 Get the part of a ship depot. More...
 
static DiagDirection GetShipDepotDirection (TileIndex t)
 Get the direction of the ship depot. More...
 
static TileIndex GetOtherShipDepotTile (TileIndex t)
 Get the other tile of the ship depot. More...
 
static TileIndex GetShipDepotNorthTile (TileIndex t)
 Get the most northern tile of a ship depot. More...
 
static bool IsLock (TileIndex t)
 Is there a lock on a given water tile? More...
 
static DiagDirection GetLockDirection (TileIndex t)
 Get the direction of the water lock. More...
 
static byte GetLockPart (TileIndex t)
 Get the part of a lock. More...
 
static byte GetWaterTileRandomBits (TileIndex t)
 Get the random bits of the water tile. More...
 
static bool HasTileWaterGround (TileIndex t)
 Checks whether the tile has water at the ground. More...
 
static void MakeShore (TileIndex t)
 Helper function to make a coast tile. More...
 
static void MakeWater (TileIndex t, Owner o, WaterClass wc, uint8 random_bits)
 Helper function for making a watery tile. More...
 
static void MakeSea (TileIndex t)
 Make a sea tile. More...
 
static void MakeRiver (TileIndex t, uint8 random_bits)
 Make a river tile. More...
 
static void MakeCanal (TileIndex t, Owner o, uint8 random_bits)
 Make a canal tile. More...
 
static void MakeShipDepot (TileIndex t, Owner o, DepotID did, DepotPart part, Axis a, WaterClass original_water_class)
 Make a ship depot section. More...
 
static void MakeLockTile (TileIndex t, Owner o, LockPart part, DiagDirection dir, WaterClass original_water_class)
 Make a lock section. More...
 
static void MakeLock (TileIndex t, Owner o, DiagDirection d, WaterClass wc_lower, WaterClass wc_upper, WaterClass wc_middle)
 Make a water lock. More...
 

Detailed Description

Map accessors for water tiles.

Definition in file water_map.h.

Enumeration Type Documentation

◆ DepotPart

enum DepotPart

Sections of the water depot.

Enumerator
DEPOT_PART_NORTH 

Northern part of a depot.

DEPOT_PART_SOUTH 

Southern part of a depot.

Definition at line 59 of file water_map.h.

◆ LockPart

enum LockPart

Sections of the water lock.

Enumerator
LOCK_PART_MIDDLE 

Middle part of a lock.

LOCK_PART_LOWER 

Lower part of a lock.

LOCK_PART_UPPER 

Upper part of a lock.

Definition at line 66 of file water_map.h.

◆ WaterClass

enum WaterClass

classes of water (for WATER_TILE_CLEAR water tile type).

Enumerator
WATER_CLASS_SEA 

Sea.

WATER_CLASS_CANAL 

Canal.

WATER_CLASS_RIVER 

River.

WATER_CLASS_INVALID 

Used for industry tiles on land (also for oilrig if newgrf says so).

Definition at line 49 of file water_map.h.

◆ WaterTileType

Available water tile types.

Enumerator
WATER_TILE_CLEAR 

Plain water.

WATER_TILE_COAST 

Coast.

WATER_TILE_LOCK 

Water lock.

WATER_TILE_DEPOT 

Water Depot.

Definition at line 41 of file water_map.h.

◆ WaterTileTypeBitLayout

Bit field layout of m5 for water tiles.

Enumerator
WBL_TYPE_BEGIN 

Start of the 'type' bitfield.

WBL_TYPE_COUNT 

Length of the 'type' bitfield.

WBL_TYPE_NORMAL 

Clear water or coast ('type' bitfield).

WBL_TYPE_LOCK 

Lock ('type' bitfield).

WBL_TYPE_DEPOT 

Depot ('type' bitfield).

WBL_COAST_FLAG 

Flag for coast.

WBL_LOCK_ORIENT_BEGIN 

Start of lock orientiation bitfield.

WBL_LOCK_ORIENT_COUNT 

Length of lock orientiation bitfield.

WBL_LOCK_PART_BEGIN 

Start of lock part bitfield.

WBL_LOCK_PART_COUNT 

Length of lock part bitfield.

WBL_DEPOT_PART 

Depot part flag.

WBL_DEPOT_AXIS 

Depot axis flag.

Definition at line 21 of file water_map.h.

Function Documentation

◆ GetLockDirection()

static DiagDirection GetLockDirection ( TileIndex  t)
inlinestatic

Get the direction of the water lock.

Parameters
tWater tile to query.
Returns
Direction of the lock.
Precondition
IsTileType(t, MP_WATER) && IsLock(t)

Definition at line 308 of file water_map.h.

Referenced by RemoveLock().

◆ GetLockPart()

static byte GetLockPart ( TileIndex  t)
inlinestatic

Get the part of a lock.

Parameters
tWater tile to query.
Returns
The part.
Precondition
IsTileType(t, MP_WATER) && IsLock(t)

Definition at line 320 of file water_map.h.

Referenced by DrawWaterLock(), and CanalScopeResolver::GetVariable().

◆ GetOtherShipDepotTile()

static TileIndex GetOtherShipDepotTile ( TileIndex  t)
inlinestatic

Get the other tile of the ship depot.

Parameters
tTile to query, containing one section of a ship depot.
Returns
Tile containing the other section of the depot.
Precondition
IsShipDepotTile(t)

Definition at line 272 of file water_map.h.

References AXIS_X, DEPOT_PART_NORTH, GetShipDepotAxis(), GetShipDepotPart(), and TileDiffXY().

◆ GetShipDepotAxis()

static Axis GetShipDepotAxis ( TileIndex  t)
inlinestatic

Get the axis of the ship depot.

Parameters
tWater tile to query.
Returns
Axis of the depot.
Precondition
IsShipDepotTile(t)

Definition at line 237 of file water_map.h.

Referenced by GetOtherShipDepotTile(), and GetShipDepotDirection().

◆ GetShipDepotDirection()

static DiagDirection GetShipDepotDirection ( TileIndex  t)
inlinestatic

Get the direction of the ship depot.

Parameters
tWater tile to query.
Returns
Direction of the depot.
Precondition
IsShipDepotTile(t)

Definition at line 261 of file water_map.h.

References GetShipDepotAxis(), GetShipDepotPart(), and XYNSToDiagDir().

Referenced by Ship::GetVehicleTrackdir().

◆ GetShipDepotNorthTile()

static TileIndex GetShipDepotNorthTile ( TileIndex  t)
inlinestatic

Get the most northern tile of a ship depot.

Parameters
tOne of the tiles of the ship depot.
Returns
The northern tile of the depot.
Precondition
IsShipDepotTile(t)

Definition at line 283 of file water_map.h.

Referenced by CmdBuildShip().

◆ GetShipDepotPart()

static DepotPart GetShipDepotPart ( TileIndex  t)
inlinestatic

Get the part of a ship depot.

Parameters
tWater tile to query.
Returns
Part of the depot.
Precondition
IsShipDepotTile(t)

Definition at line 249 of file water_map.h.

Referenced by GetOtherShipDepotTile(), and GetShipDepotDirection().

◆ GetWaterClass()

static WaterClass GetWaterClass ( TileIndex  t)
inlinestatic

Get the water class at a tile.

Parameters
tWater tile to query.
Precondition
IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT)
Returns
Water class at the tile.

Definition at line 106 of file water_map.h.

Referenced by CmdBuildShipDepot(), CmdLandscapeClear(), DoBuildLock(), GetEffectiveWaterClass(), GetFloodingBehaviour(), GetNearbyTileInformation(), IsCanal(), IsRiver(), IsSea(), IsTileOnWater(), RemoveLock(), and SetWaterClassDependingOnSurroundings().

◆ GetWaterTileRandomBits()

static byte GetWaterTileRandomBits ( TileIndex  t)
inlinestatic

Get the random bits of the water tile.

Parameters
tWater tile to query.
Returns
Random bits of the tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 332 of file water_map.h.

Referenced by CanalScopeResolver::GetRandomBits(), and CanalScopeResolver::GetVariable().

◆ GetWaterTileType()

static WaterTileType GetWaterTileType ( TileIndex  t)
inlinestatic

Get the water tile type at a tile.

Parameters
tWater tile to query.
Returns
Water tile type at the tile.

Definition at line 77 of file water_map.h.

Referenced by IsCoast(), IsLock(), IsShipDepot(), IsWater(), and IsWateredTile().

◆ HasTileWaterClass()

static bool HasTileWaterClass ( TileIndex  t)
inlinestatic

Checks whether the tile has an waterclass associated.

You can then subsequently call GetWaterClass().

Parameters
tTile to query.
Returns
True if the tiletype has a waterclass.

Definition at line 95 of file water_map.h.

References IsTileType(), MP_INDUSTRY, MP_OBJECT, MP_STATION, and MP_WATER.

Referenced by CheckIfIndustryTilesAreFree(), CmdLandscapeClear(), GetEffectiveWaterClass(), GetNearbyTileInformation(), and HasTileWaterGround().

◆ HasTileWaterGround()

static bool HasTileWaterGround ( TileIndex  t)
inlinestatic

Checks whether the tile has water at the ground.

That is, it is either some plain water tile, or a object/industry/station/... with water under it.

Returns
true iff the tile has water at the ground.
Note
Coast tiles are not considered waterish, even if there is water on a halftile.

Definition at line 344 of file water_map.h.

References HasTileWaterClass(), IsCoastTile(), and IsTileOnWater().

Referenced by CanFollowRoad(), CmdBuildBuoy(), CmdBuildShipDepot(), and GetClosestWaterDistance().

◆ IsCanal()

static bool IsCanal ( TileIndex  t)
inlinestatic

Is it a canal tile?

Parameters
tWater tile to query.
Returns
true if it is a canal tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 163 of file water_map.h.

References GetWaterClass(), IsWater(), and WATER_CLASS_CANAL.

Referenced by MarkTileDirtyIfCanalOrRiver().

◆ IsCoast()

static bool IsCoast ( TileIndex  t)
inlinestatic

Is it a coast tile?

Parameters
tWater tile to query.
Returns
true if it is a sea water tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 195 of file water_map.h.

References GetWaterTileType(), and WATER_TILE_COAST.

Referenced by CanPlantTreesOnTile(), GetFloodingBehaviour(), IsCoastTile(), and SetWaterClassDependingOnSurroundings().

◆ IsCoastTile()

static bool IsCoastTile ( TileIndex  t)
inlinestatic

Is it a coast tile.

Parameters
tTile to query.
Returns
true if it is a coast.

Definition at line 205 of file water_map.h.

References IsCoast(), IsTileType(), and MP_WATER.

Referenced by CmdLandscapeClear(), and HasTileWaterGround().

◆ IsLock()

static bool IsLock ( TileIndex  t)
inlinestatic

Is there a lock on a given water tile?

Parameters
tWater tile to query.
Returns
true if it is a water lock tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 297 of file water_map.h.

References GetWaterTileType(), and WATER_TILE_LOCK.

Referenced by CanalScopeResolver::GetVariable(), and SetWaterClassDependingOnSurroundings().

◆ IsRiver()

static bool IsRiver ( TileIndex  t)
inlinestatic

Is it a river water tile?

Parameters
tWater tile to query.
Returns
true if it is a river water tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 174 of file water_map.h.

References GetWaterClass(), IsWater(), and WATER_CLASS_RIVER.

Referenced by MarkTileDirtyIfCanalOrRiver().

◆ IsSea()

static bool IsSea ( TileIndex  t)
inlinestatic

Is it a sea water tile?

Parameters
tWater tile to query.
Returns
true if it is a sea water tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 152 of file water_map.h.

References GetWaterClass(), IsWater(), and WATER_CLASS_SEA.

◆ IsShipDepot()

static bool IsShipDepot ( TileIndex  t)
inlinestatic

Is it a water tile with a ship depot on it?

Parameters
tWater tile to query.
Returns
true if it is a ship depot tile.
Precondition
IsTileType(t, MP_WATER)

Definition at line 216 of file water_map.h.

References GetWaterTileType(), and WATER_TILE_DEPOT.

Referenced by IsShipDepotTile().

◆ IsShipDepotTile()

static bool IsShipDepotTile ( TileIndex  t)
inlinestatic

Is it a ship depot tile?

Parameters
tTile to query.
Returns
true if it is a ship depot tile.

Definition at line 226 of file water_map.h.

References IsShipDepot(), IsTileType(), and MP_WATER.

Referenced by IsDepotTile().

◆ IsTileOnWater()

static bool IsTileOnWater ( TileIndex  t)
inlinestatic

Tests if the tile was built on water.

Parameters
tthe tile to check
Precondition
IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT)
Returns
true iff on water

Definition at line 130 of file water_map.h.

References GetWaterClass(), and WATER_CLASS_INVALID.

Referenced by CheckIfIndustryTilesAreFree(), CmdLandscapeClear(), and HasTileWaterGround().

◆ IsWater()

static bool IsWater ( TileIndex  t)
inlinestatic

Is it a plain water tile?

Parameters
tWater tile to query.
Returns
true if any type of clear water like ocean, river, or canal.
Precondition
IsTileType(t, MP_WATER)

Definition at line 141 of file water_map.h.

References GetWaterTileType(), and WATER_TILE_CLEAR.

Referenced by CleanUpRoadBits(), CMSAWater(), IsCanal(), IsRiver(), IsSea(), and IsWaterTile().

◆ IsWaterTile()

static bool IsWaterTile ( TileIndex  t)
inlinestatic

Is it a water tile with plain water?

Parameters
tTile to query.
Returns
true if it is a plain water tile.

Definition at line 184 of file water_map.h.

References IsTileType(), IsWater(), and MP_WATER.

Referenced by CheckIfIndustryTilesAreFree(), CmdLandscapeClear(), DoBuildLock(), FindSpring(), and MakeLock().

◆ MakeCanal()

static void MakeCanal ( TileIndex  t,
Owner  o,
uint8  random_bits 
)
inlinestatic

Make a canal tile.

Parameters
tThe tile to change into canal
oThe owner of the canal
random_bitsRandom bits to be set for this tile

Definition at line 412 of file water_map.h.

◆ MakeLock()

static void MakeLock ( TileIndex  t,
Owner  o,
DiagDirection  d,
WaterClass  wc_lower,
WaterClass  wc_upper,
WaterClass  wc_middle 
)
inlinestatic

Make a water lock.

Parameters
tTile to place the water lock section.
oOwner of the lock.
dDirection of the water lock.
wc_lowerOriginal water class of the lower part.
wc_upperOriginal water class of the upper part.
wc_middleOriginal water class of the middle part.

Definition at line 471 of file water_map.h.

References GetTileOwner(), IsWaterTile(), LOCK_PART_LOWER, LOCK_PART_MIDDLE, LOCK_PART_UPPER, MakeLockTile(), and TileOffsByDiagDir().

◆ MakeLockTile()

static void MakeLockTile ( TileIndex  t,
Owner  o,
LockPart  part,
DiagDirection  dir,
WaterClass  original_water_class 
)
inlinestatic

Make a lock section.

Parameters
tTile to place the water lock section.
oOwner of the lock.
partPart to place.
dirLock orientation
original_water_classOriginal water class.
See also
MakeLock

Definition at line 449 of file water_map.h.

References _m, _me, Tile::m2, Tile::m3, Tile::m4, Tile::m5, TileExtended::m7, MP_WATER, SB(), SetTileOwner(), SetTileType(), SetWaterClass(), WBL_LOCK_ORIENT_BEGIN, WBL_LOCK_PART_BEGIN, WBL_TYPE_BEGIN, and WBL_TYPE_LOCK.

Referenced by MakeLock().

◆ MakeRiver()

static void MakeRiver ( TileIndex  t,
uint8  random_bits 
)
inlinestatic

Make a river tile.

Parameters
tThe tile to change into river
random_bitsRandom bits to be set for this tile

Definition at line 401 of file water_map.h.

References MakeWater(), OWNER_WATER, and WATER_CLASS_RIVER.

Referenced by RemoveLock().

◆ MakeSea()

static void MakeSea ( TileIndex  t)
inlinestatic

Make a sea tile.

Parameters
tThe tile to change into sea

Definition at line 391 of file water_map.h.

References MakeWater(), OWNER_WATER, and WATER_CLASS_SEA.

◆ MakeShipDepot()

static void MakeShipDepot ( TileIndex  t,
Owner  o,
DepotID  did,
DepotPart  part,
Axis  a,
WaterClass  original_water_class 
)
inlinestatic

Make a ship depot section.

Parameters
tTile to place the ship depot section.
oOwner of the depot.
didDepot ID.
partDepot part (either DEPOT_PART_NORTH or DEPOT_PART_SOUTH).
aAxis of the depot.
original_water_classOriginal water class.

Definition at line 427 of file water_map.h.

References _m, _me, Tile::m2, Tile::m3, Tile::m4, Tile::m5, TileExtended::m7, MP_WATER, SB(), SetTileOwner(), SetTileType(), SetWaterClass(), WBL_DEPOT_AXIS, WBL_DEPOT_PART, WBL_TYPE_BEGIN, and WBL_TYPE_DEPOT.

◆ MakeShore()

static void MakeShore ( TileIndex  t)
inlinestatic

Helper function to make a coast tile.

Parameters
tThe tile to change into water

Definition at line 354 of file water_map.h.

References _m, _me, Tile::m2, Tile::m3, Tile::m4, Tile::m5, TileExtended::m7, MP_WATER, OWNER_WATER, SB(), SetTileOwner(), SetTileType(), SetWaterClass(), WATER_CLASS_SEA, WBL_COAST_FLAG, WBL_TYPE_BEGIN, and WBL_TYPE_NORMAL.

◆ MakeWater()

static void MakeWater ( TileIndex  t,
Owner  o,
WaterClass  wc,
uint8  random_bits 
)
inlinestatic

Helper function for making a watery tile.

Parameters
tThe tile to change into water
oThe owner of the water
wcThe class of water the tile has to be
random_bitsEventual random bits to be set for this tile

Definition at line 374 of file water_map.h.

References _m, _me, Tile::m2, Tile::m3, Tile::m4, Tile::m5, TileExtended::m7, MP_WATER, SB(), SetTileOwner(), SetTileType(), SetWaterClass(), WBL_TYPE_BEGIN, and WBL_TYPE_NORMAL.

Referenced by MakeRiver(), and MakeSea().

◆ SetWaterClass()

static void SetWaterClass ( TileIndex  t,
WaterClass  wc 
)
inlinestatic

Set the water class at a tile.

Parameters
tWater tile to change.
wcNew water class.
Precondition
IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT)

Definition at line 118 of file water_map.h.

Referenced by MakeIndustry(), MakeLockTile(), MakeObject(), MakeShipDepot(), MakeShore(), MakeStation(), MakeWater(), and SetWaterClassDependingOnSurroundings().