OpenTTD
Functions | Variables
water_cmd.cpp File Reference

Handling of water tiles. More...

#include "stdafx.h"
#include "cmd_helper.h"
#include "landscape.h"
#include "viewport_func.h"
#include "command_func.h"
#include "town.h"
#include "news_func.h"
#include "depot_base.h"
#include "depot_func.h"
#include "water.h"
#include "industry_map.h"
#include "newgrf_canal.h"
#include "strings_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
#include "company_func.h"
#include "clear_map.h"
#include "tree_map.h"
#include "aircraft.h"
#include "effectvehicle_func.h"
#include "tunnelbridge_map.h"
#include "station_base.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "core/random_func.hpp"
#include "core/backup_type.hpp"
#include "date_func.h"
#include "company_base.h"
#include "company_gui.h"
#include "newgrf_generic.h"
#include "table/strings.h"
#include "safeguards.h"
#include "table/water_land.h"

Go to the source code of this file.

Functions

static void MarkTileDirtyIfCanalOrRiver (TileIndex tile)
 Marks tile dirty if it is a canal or river tile.
static void MarkCanalsAndRiversAroundDirty (TileIndex tile)
 Marks the tiles around a tile as dirty, if they are canals or rivers.
CommandCost CmdBuildShipDepot (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a ship depot.
void MakeWaterKeepingClass (TileIndex tile, Owner o)
static CommandCost RemoveShipDepot (TileIndex tile, DoCommandFlag flags)
static CommandCost DoBuildLock (TileIndex tile, DiagDirection dir, DoCommandFlag flags)
 Builds a lock.
static CommandCost RemoveLock (TileIndex tile, DoCommandFlag flags)
 Remove a lock.
CommandCost CmdBuildLock (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Builds a lock.
bool RiverModifyDesertZone (TileIndex tile, void *)
 Callback to create non-desert around a river tile.
CommandCost CmdBuildCanal (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Build a piece of canal.
static CommandCost ClearTile_Water (TileIndex tile, DoCommandFlag flags)
bool IsWateredTile (TileIndex tile, Direction from)
 return true if a tile is a water tile wrt.
static void DrawWaterSprite (SpriteID base, uint offset, CanalFeature feature, TileIndex tile)
 Draw a water sprite, potentially with a NewGRF-modified sprite offset.
static void DrawWaterEdges (bool canal, uint offset, TileIndex tile)
 Draw canal or river edges.
static void DrawSeaWater (TileIndex tile)
 Draw a plain sea water tile with no edges.
static void DrawCanalWater (TileIndex tile)
 draw a canal styled water tile with dikes around
static void DrawWaterTileStruct (const TileInfo *ti, const DrawTileSeqStruct *dtss, SpriteID base, uint offset, PaletteID palette, CanalFeature feature)
 Draw a build sprite sequence for water tiles.
static void DrawWaterLock (const TileInfo *ti)
 Draw a lock tile.
static void DrawWaterDepot (const TileInfo *ti)
 Draw a ship depot tile.
static void DrawRiverWater (const TileInfo *ti)
void DrawShoreTile (Slope tileh)
void DrawWaterClassGround (const TileInfo *ti)
static void DrawTile_Water (TileInfo *ti)
void DrawShipDepotSprite (int x, int y, Axis axis, DepotPart part)
static int GetSlopePixelZ_Water (TileIndex tile, uint x, uint y)
static Foundation GetFoundation_Water (TileIndex tile, Slope tileh)
static void GetTileDesc_Water (TileIndex tile, TileDesc *td)
static void FloodVehicle (Vehicle *v)
 Handle the flooding of a vehicle.
static VehicleFloodVehicleProc (Vehicle *v, void *data)
 Flood a vehicle if we are allowed to flood it, i.e.
static void FloodVehicles (TileIndex tile)
 Finds a vehicle to flood.
FloodingBehaviour GetFloodingBehaviour (TileIndex tile)
 Returns the behaviour of a tile during flooding.
void DoFloodTile (TileIndex target)
 Floods a tile.
static void DoDryUp (TileIndex tile)
 Drys a tile up.
void TileLoop_Water (TileIndex tile)
 Let a water tile floods its diagonal adjoining tiles called from tunnelbridge_cmd, and by TileLoop_Industry() and TileLoop_Track()
void ConvertGroundTilesIntoWaterTiles ()
static TrackStatus GetTileTrackStatus_Water (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
static bool ClickTile_Water (TileIndex tile)
static void ChangeTileOwner_Water (TileIndex tile, Owner old_owner, Owner new_owner)
static VehicleEnterTileStatus VehicleEnter_Water (Vehicle *v, TileIndex tile, int x, int y)
static CommandCost TerraformTile_Water (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new)

Variables

static const uint8 _flood_from_dirs []
 Describes from which directions a specific slope can be flooded (if the tile is floodable at all).
const TileTypeProcs _tile_type_water_procs

Detailed Description

Handling of water tiles.

Definition in file water_cmd.cpp.

Function Documentation

CommandCost CmdBuildCanal ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)
CommandCost CmdBuildLock ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Builds a lock.

Parameters
tiletile where to place the lock
flagstype of operation
p1unused
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 370 of file water_cmd.cpp.

References DoBuildLock(), GetInclinedSlopeDirection(), GetTileSlope(), INVALID_DIAGDIR, and return_cmd_error.

CommandCost CmdBuildShipDepot ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)
static CommandCost DoBuildLock ( TileIndex  tile,
DiagDirection  dir,
DoCommandFlag  flags 
)
static
static void DrawWaterDepot ( const TileInfo ti)
static

Draw a ship depot tile.

Definition at line 773 of file water_cmd.cpp.

References DrawWaterTileStruct(), GetShipDepotAxis(), GetShipDepotPart(), GetTileOwner(), and TileInfo::tile.

static void DrawWaterEdges ( bool  canal,
uint  offset,
TileIndex  tile 
)
static

Draw canal or river edges.

Parameters
canalTrue if canal edges should be drawn, false for river edges.
offsetSprite offset.
tileTile to draw.

Definition at line 634 of file water_cmd.cpp.

References DIR_E, DIR_N, DIR_NE, DIR_NW, DIR_S, DIR_SE, DIR_SW, DIR_W, DrawWaterSprite(), GetCanalSprite(), IsWateredTile(), and TILE_ADDXY.

Referenced by DrawCanalWater().

static void DrawWaterLock ( const TileInfo ti)
static
static void DrawWaterSprite ( SpriteID  base,
uint  offset,
CanalFeature  feature,
TileIndex  tile 
)
static

Draw a water sprite, potentially with a NewGRF-modified sprite offset.

Parameters
baseSprite base.
offsetSprite offset.
featureThe type of sprite that is drawn.
tileTile index to draw.

Definition at line 619 of file water_cmd.cpp.

References DrawGroundSprite(), and GetCanalSpriteOffset().

Referenced by DrawCanalWater(), and DrawWaterEdges().

static void DrawWaterTileStruct ( const TileInfo ti,
const DrawTileSeqStruct dtss,
SpriteID  base,
uint  offset,
PaletteID  palette,
CanalFeature  feature 
)
static

Draw a build sprite sequence for water tiles.

If buildings are invisible, nothing will be drawn.

Parameters
tiTile info.
dtssSprite sequence to draw.
baseBase sprite.
offsetAdditional sprite offset.
palettePalette to use.

Definition at line 717 of file water_cmd.cpp.

References AddSortableSpriteToDraw(), DrawTileSeqStruct::delta_x, DrawTileSeqStruct::delta_z, GetCanalSpriteOffset(), IsInvisibilitySet(), DrawTileSeqStruct::IsTerminator(), IsTransparencySet(), PalSpriteID::sprite, TileInfo::tile, TO_BUILDINGS, TileInfo::x, TileInfo::y, and TileInfo::z.

Referenced by DrawWaterDepot(), and DrawWaterLock().

static void FloodVehicle ( Vehicle v)
static

Handle the flooding of a vehicle.

This sets the vehicle state to crashed, creates a newsitem and dirties the necessary windows.

Parameters
vThe vehicle to flood.

Definition at line 918 of file water_cmd.cpp.

References _settings_client, AddVehicleNewsItem(), Vehicle::Crash(), CreateEffectVehicleRel(), SoundSettings::disaster, EV_EXPLOSION_LARGE, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), NT_ACCIDENT, Vehicle::owner, SetDParam(), ClientSettings::sound, and Vehicle::tile.

Referenced by FloodVehicleProc().

static Vehicle* FloodVehicleProc ( Vehicle v,
void *  data 
)
static

Flood a vehicle if we are allowed to flood it, i.e.

when it is on the ground.

Parameters
vThe vehicle to test for flooding.
dataThe z of level to flood.
Returns
NULL as we always want to remove everything.

Definition at line 936 of file water_cmd.cpp.

References AIR_SHADOW, Station::airport, AirportFTAClass::delta_z, Vehicle::First(), FloodVehicle(), SpecializedStation< Station, false >::GetByTile(), Airport::GetFTA(), GetTileMaxZ(), IsAirportTile(), Vehicle::subtype, Vehicle::tile, BaseVehicle::type, VEH_AIRCRAFT, VEH_ROAD, VEH_TRAIN, Vehicle::vehstatus, VS_CRASHED, and Vehicle::z_pos.

Referenced by FloodVehicles().

static void FloodVehicles ( TileIndex  tile)
static

Finds a vehicle to flood.

It does not find vehicles that are already crashed on bridges, i.e. flooded.

Parameters
tilethe tile where to find a vehicle to flood

Definition at line 974 of file water_cmd.cpp.

References Station::airport, FindVehicleOnPos(), FloodVehicleProc(), GetBridgePixelHeight(), SpecializedStation< Station, false >::GetByTile(), GetOtherBridgeEnd(), IsAirportTile(), IsBridgeTile(), and TILE_AREA_LOOP.

Referenced by DoFloodTile().

FloodingBehaviour GetFloodingBehaviour ( TileIndex  tile)
bool IsWateredTile ( TileIndex  tile,
Direction  from 
)
static void MarkTileDirtyIfCanalOrRiver ( TileIndex  tile)
inlinestatic

Marks tile dirty if it is a canal or river tile.

Called to avoid glitches when flooding tiles next to canal tile.

Parameters
tiletile to check

Definition at line 74 of file water_cmd.cpp.

References IsCanal(), IsRiver(), IsTileType(), MarkTileDirtyByTile(), and MP_WATER.

Referenced by MarkCanalsAndRiversAroundDirty().

static CommandCost RemoveLock ( TileIndex  tile,
DoCommandFlag  flags 
)
static
bool RiverModifyDesertZone ( TileIndex  tile,
void *   
)

Callback to create non-desert around a river tile.

Definition at line 379 of file water_cmd.cpp.

References GetTropicZone(), SetTropicZone(), TROPICZONE_DESERT, and TROPICZONE_NORMAL.

Referenced by CmdBuildCanal().

void TileLoop_Water ( TileIndex  tile)

Let a water tile floods its diagonal adjoining tiles called from tunnelbridge_cmd, and by TileLoop_Industry() and TileLoop_Track()

Parameters
tilethe water/shore tile that floods

Definition at line 1153 of file water_cmd.cpp.

References _flood_from_dirs, AmbientSoundEffect(), DIR_BEGIN, DIR_END, DoDryUp(), DoFloodTile(), FLOOD_ACTIVE, FLOOD_DRYUP, FLOOD_PASSIVE, FOR_EACH_SET_BIT, GetFloodingBehaviour(), GetFoundationSlope(), GetTreeGround(), HasBit(), IsTileType(), IsValidTile(), MP_TREES, MP_WATER, ReverseDir(), SLOPE_HALFTILE_MASK, SLOPE_STEEP, TileOffsByDir(), and TREE_GROUND_SHORE.

Variable Documentation

const uint8 _flood_from_dirs[]
static
Initial value:
{
(1 << DIR_NW) | (1 << DIR_SW) | (1 << DIR_SE) | (1 << DIR_NE),
(1 << DIR_NE) | (1 << DIR_SE),
(1 << DIR_NW) | (1 << DIR_NE),
(1 << DIR_NE),
(1 << DIR_NW) | (1 << DIR_SW),
0,
(1 << DIR_NW),
(1 << DIR_N ) | (1 << DIR_NW) | (1 << DIR_NE),
(1 << DIR_SW) | (1 << DIR_SE),
(1 << DIR_SE),
0,
(1 << DIR_E ) | (1 << DIR_NE) | (1 << DIR_SE),
(1 << DIR_SW),
(1 << DIR_S ) | (1 << DIR_SW) | (1 << DIR_SE),
(1 << DIR_W ) | (1 << DIR_SW) | (1 << DIR_NW),
}

Describes from which directions a specific slope can be flooded (if the tile is floodable at all).

Definition at line 50 of file water_cmd.cpp.

Referenced by TileLoop_Water().

const TileTypeProcs _tile_type_water_procs
Initial value:
{
DrawTile_Water,
GetSlopePixelZ_Water,
ClearTile_Water,
NULL,
GetTileDesc_Water,
GetTileTrackStatus_Water,
ClickTile_Water,
NULL,
ChangeTileOwner_Water,
NULL,
VehicleEnter_Water,
GetFoundation_Water,
TerraformTile_Water,
}