OpenTTD Source: src/ship_cmd.cpp File Reference

OpenTTD Source 14.0-beta3

Data Structures | Functions | Variables
ship_cmd.cpp File Reference
`#include "stdafx.h"`
`#include "ship.h"`
`#include "landscape.h"`
`#include "timetable.h"`
`#include "news_func.h"`
`#include "company_func.h"`
`#include "pathfinder/npf/npf_func.h"`
`#include "depot_base.h"`
`#include "station_base.h"`
`#include "newgrf_engine.h"`
`#include "pathfinder/yapf/yapf.h"`
`#include "pathfinder/yapf/yapf_ship_regions.h"`
`#include "newgrf_sound.h"`
`#include "spritecache.h"`
`#include "strings_func.h"`
`#include "window_func.h"`
`#include "timer/timer_game_calendar.h"`
`#include "timer/timer_game_economy.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "ai/ai.hpp"`
`#include "game/game.hpp"`
`#include "engine_base.h"`
`#include "company_base.h"`
`#include "tunnelbridge_map.h"`
`#include "zoom_func.h"`
`#include "framerate_type.h"`
`#include "industry.h"`
`#include "industry_map.h"`
`#include "ship_cmd.h"`
`#include "table/strings.h"`
`#include <unordered_set>`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
struct | ShipSubcoordData
| Structure for ship sub-coordinate data for moving into a new tile via a Diagdir onto a Track. More...

## Functions
WaterClass | GetEffectiveWaterClass (TileIndex tile)
| Determine the effective WaterClass for a ship travelling on a tile. More...
template<>
bool | IsValidImageIndex< VEH_SHIP > (uint8_t image_index)
static TrackBits | GetTileShipTrackStatus (TileIndex tile)
static void | GetShipIcon (EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result)
void | DrawShipEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type)
void | GetShipSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
| Get the size of the sprite of a ship sprite heading west (used for lists). More...
static const Depot * | FindClosestShipDepot (const Vehicle *v, uint max_distance)
static void | CheckIfShipNeedsService (Vehicle *v)
static Vehicle * | EnsureNoMovingShipProc (Vehicle *v, void *)
| Test-procedure for HasVehicleOnPos to check for any ships which are visible and not stopped by the player.
static bool | CheckReverseShip (const Ship *v, Trackdir *trackdir=nullptr)
static bool | CheckShipLeaveDepot (Ship *v)
static uint | ShipAccelerate (Vehicle *v)
| Accelerates the ship towards its target speed. More...
static void | ShipArrivesAt (const Vehicle *v, Station *st)
| Ship arrives at a dock. More...
static Track | ChooseShipTrack (Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks)
| Runs the pathfinder to choose a track to continue along. More...
static TrackBits | GetAvailShipTracks (TileIndex tile, DiagDirection dir)
| Get the available water tracks on a tile for a ship entering a tile. More...
static int | ShipTestUpDownOnLock (const Ship *v)
| Test if a ship is in the centre of a lock and should move up or down. More...
static bool | ShipMoveUpDownOnLock (Ship *v)
| Test and move a ship up or down in a lock. More...
bool | IsShipDestinationTile (TileIndex tile, StationID station)
| Test if a tile is a docking tile for the given station. More...
static void | ReverseShipIntoTrackdir (Ship *v, Trackdir trackdir)
static void | ReverseShip (Ship *v)
static void | ShipController (Ship *v)
CommandCost | CmdBuildShip (DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret)
| Build a ship. More...

## Variables
constexpr int | MAX_SHIP_DEPOT_SEARCH_DISTANCE = 80
| Max distance in tiles (as the crow flies) to search for depots when user clicks "go to depot".
static const uint16_t | _ship_sprites [] = {0x0E5D, 0x0E55, 0x0E65, 0x0E6D}
static const ShipSubcoordData | _ship_subcoord [DIAGDIR_END][TRACK_END]
| Ship sub-coordinate data for moving into a new tile via a Diagdir onto a Track. More...

## Detailed Description

Handling of ships.

Definition in file ship_cmd.cpp.

## Function Documentation

## ◆ ChooseShipTrack()

static Track ChooseShipTrack | ( | Ship * | v,
|  | TileIndex | tile,
|  | DiagDirection | enterdir,
|  | TrackBits | tracks
| ) |  |
| static

Runs the pathfinder to choose a track to continue along.

Parameters

  v | Ship to navigate
  tile | Tile, the ship is about to enter
  enterdir | Direction of entering
  tracks | Available track choices on tile

Returns
  Track to choose, or INVALID_TRACK when to reverse.

Definition at line 506 of file ship_cmd.cpp.

References _settings_game, Vehicle::dest_tile, FindFirstTrack(), HasBit(), IsDiagonalTrack(), IsValidDiagDirection(), NPFShipChooseTrack(), Ship::path, PathfinderSettings::pathfinder_for_ships, GameSettings::pf, Ship::state, TrackBitsToTrack(), TrackdirToTrack(), TrackToOppositeTrack(), VPF_NPF, VPF_YAPF, and YapfShipChooseTrack().

Referenced by YapfShipChooseTrack().

## ◆ CmdBuildShip()

CommandCost CmdBuildShip | ( | DoCommandFlag | flags,
|  | TileIndex | tile,
|  | const Engine * | e,
|  | Vehicle ** | ret
| ) |  |

Build a ship.

Parameters

  | flags | type of operation.
  | tile | tile of the depot where ship is built.
  | e | the engine to build.
  [out] | ret | the vehicle that has been built.

Returns
  the cost of this operation or an error.

Definition at line 912 of file ship_cmd.cpp.

References DC_EXEC, and GetShipDepotNorthTile().

## ◆ GetAvailShipTracks()

static TrackBits GetAvailShipTracks | ( | TileIndex | tile,
|  | DiagDirection | dir
| ) |  |
| inlinestatic

Get the available water tracks on a tile for a ship entering a tile.

Parameters

  tile | The tile about to enter.
  dir | The entry direction.

Returns
  The available trackbits on the next tile.

Definition at line 551 of file ship_cmd.cpp.

## ◆ GetEffectiveWaterClass()

WaterClass GetEffectiveWaterClass | ( | TileIndex | tile | ) |

Determine the effective WaterClass for a ship travelling on a tile.

Parameters

  tile | Tile of interest

Returns
  the waterclass to be used by the ship.

Definition at line 55 of file ship_cmd.cpp.

References GetTunnelBridgeTransportType(), GetWaterClass(), HasTileWaterClass(), IsTileType(), MP_RAILWAY, MP_TUNNELBRIDGE, TRANSPORT_WATER, and WATER_CLASS_CANAL.

## ◆ GetShipSpriteSize()

void GetShipSpriteSize | ( | EngineID | engine,
|  | uint & | width,
|  | uint & | height,
|  | int & | xoffs,
|  | int & | yoffs,
|  | EngineImageType | image_type
| ) |  |

Get the size of the sprite of a ship sprite heading west (used for lists).

Parameters

  | engine | The engine to get the sprite from.
  [out] | width | The width of the sprite.
  [out] | height | The height of the sprite.
  [out] | xoffs | Number of pixels to shift the sprite to the right.
  [out] | yoffs | Number of pixels to shift the sprite downwards.
  | image_type | Context the sprite is used in.

Definition at line 121 of file ship_cmd.cpp.

## ◆ IsShipDestinationTile()

bool IsShipDestinationTile | ( | TileIndex | tile,
|  | StationID | station
| ) |  |

Test if a tile is a docking tile for the given station.

Parameters

  tile | Docking tile to test.
  station | Destination station.

Returns
  true iff docking tile is next to station.

Definition at line 664 of file ship_cmd.cpp.

References DIAGDIR_BEGIN, DIAGDIR_END, Industry::GetByTile(), GetStationIndex(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsDockingTile(), IsDockTile(), IsDockWaterPart(), IsOilRig(), IsTileType(), IsValidTile(), MP_INDUSTRY, MP_STATION, Industry::neutral_station, and TileOffsByDiagDir().

## ◆ ShipAccelerate()

static uint ShipAccelerate | ( | Vehicle * | v | ) |
| static

Accelerates the ship towards its target speed.

Parameters

  v | Ship to accelerate.

Returns
  Number of steps to move the ship.

Definition at line 453 of file ship_cmd.cpp.

References Vehicle::acceleration, VehicleCache::cached_max_speed, Vehicle::cur_speed, Vehicle::current_order, Vehicle::GetAdvanceDistance(), Vehicle::GetAdvanceSpeed(), Order::GetMaxSpeed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Vehicle::progress, SetWindowWidgetDirty(), Vehicle::vcache, WC_VEHICLE_VIEW, and WID_VV_START_STOP.

## ◆ ShipArrivesAt()

static void ShipArrivesAt | ( | const Vehicle * | v,
|  | Station * | st
| ) |  |
| static

Ship arrives at a dock.

If it is the first time, send out a news item.

Parameters

  v | Ship that arrived.
  st | Station being visited.

Definition at line 478 of file ship_cmd.cpp.

References _local_company, AddVehicleNewsItem(), HVOT_SHIP, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), NT_ARRIVAL_COMPANY, NT_ARRIVAL_OTHER, Vehicle::owner, and SetDParam().

## ◆ ShipMoveUpDownOnLock()

static bool ShipMoveUpDownOnLock | ( | Ship * | v | ) |
| static

Test and move a ship up or down in a lock.

Parameters

  v | Ship to move.

Returns
  true iff ship is moving up or down in a lock.

Definition at line 638 of file ship_cmd.cpp.

References Vehicle::cur_speed, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetWindowWidgetDirty(), ShipTestUpDownOnLock(), Vehicle::tick_counter, Vehicle::UpdatePosition(), SpecializedVehicle< T, Type >::UpdateViewport(), WC_VEHICLE_VIEW, WID_VV_START_STOP, and Vehicle::z_pos.

## ◆ ShipTestUpDownOnLock()

static int ShipTestUpDownOnLock | ( | const Ship * | v | ) |
| static

Test if a ship is in the centre of a lock and should move up or down.

Parameters

  v | Ship being tested.

Returns
  0 if ship is not moving in lock, or -1 to move down, 1 to move up.

Definition at line 613 of file ship_cmd.cpp.

References Vehicle::direction, DirToDiagDir(), GetInclinedSlopeDirection(), GetLockPart(), GetTileMaxZ(), GetTileSlope(), GetTileZ(), IsLock(), IsTileType(), IsValidDiagDirection(), LOCK_PART_MIDDLE, MP_WATER, Vehicle::tile, TILE_HEIGHT, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.

Referenced by ShipMoveUpDownOnLock().

## Variable Documentation

## ◆ _ship_subcoord

const ShipSubcoordData _ship_subcoord[DIAGDIR_END][TRACK_END]
| static

Ship sub-coordinate data for moving into a new tile via a Diagdir onto a Track.

Array indexes are Diagdir, Track. There will always be three possible tracks going into an adjacent tile via a Diagdir, so each Diagdir sub-array will have three valid and three invalid structures per Track.

Definition at line 569 of file ship_cmd.cpp.