|
OpenTTD Source 20251116-master-g21329071df
|
Handling of ships. More...
#include "stdafx.h"#include "ship.h"#include "landscape.h"#include "timetable.h"#include "news_func.h"#include "company_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 "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. | |
| 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). | |
| static const Depot * | FindClosestShipDepot (const Vehicle *v, uint max_distance) |
| static void | CheckIfShipNeedsService (Vehicle *v) |
| static bool | CheckReverseShip (const Ship *v, Trackdir *trackdir=nullptr) |
| static bool | CheckShipStayInDepot (Ship *v) |
| Checks whether a ship should stay in the depot. | |
| static uint | ShipAccelerate (Vehicle *v) |
| Accelerates the ship towards its target speed. | |
| static void | ShipArrivesAt (const Vehicle *v, Station *st) |
| Ship arrives at a dock. | |
| static Track | ChooseShipTrack (Ship *v, TileIndex tile, TrackBits tracks) |
| Runs the pathfinder to choose a track to continue along. | |
| static TrackBits | GetAvailShipTracks (TileIndex tile, DiagDirection dir) |
| Get the available water tracks on a tile for a ship entering a tile. | |
| static int | ShipTestUpDownOnLock (const Ship *v) |
| Test if a ship is in the centre of a lock and should move up or down. | |
| static bool | ShipMoveUpDownOnLock (Ship *v) |
| Test and move a ship up or down in a lock. | |
| bool | IsShipDestinationTile (TileIndex tile, StationID station) |
| Test if a tile is a docking tile for the given station. | |
| static void | ReverseShipIntoTrackdir (Ship *v, Trackdir trackdir) |
| static void | ReverseShip (Ship *v) |
| static void | ShipController (Ship *v) |
| CommandCost | CmdBuildShip (DoCommandFlags flags, TileIndex tile, const Engine *e, Vehicle **ret) |
| Build a ship. | |
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. | |
Handling of ships.
Definition in file ship_cmd.cpp.
|
static |
Definition at line 203 of file ship_cmd.cpp.
Definition at line 355 of file ship_cmd.cpp.
|
static |
Checks whether a ship should stay in the depot.
| v | Ship to check. |
Definition at line 366 of file ship_cmd.cpp.
References AxisToTrackBits(), Vehicle::cur_speed, Vehicle::current_order, Vehicle::dest_tile, DiagDirToDir(), Vehicle::direction, GetDepotIndex(), Order::GetDestination(), GetShipDepotAxis(), Ship::GetVehicleTrackdir(), HasVehicleOnTile(), Hidden, InvalidateWindowData(), Vehicle::IsChainInDepot(), IsShipDepotTile(), Order::IsType(), Vehicle::IsWaitingForUnbunching(), Vehicle::LeaveUnbunchingDepot(), Ship::PlayLeaveStationSound(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), ReverseDir(), Ship::rotation, SetWindowClassesDirty(), SetWindowDirty(), Ship::state, Vehicle::tile, TRACKDIR_X_NE, TRACKDIR_Y_NW, TrackdirToExitdir(), SpecializedVehicle< T, Type >::UpdateViewport(), VehicleEnterDepot(), VehicleServiceInDepot(), Vehicle::vehstatus, WC_SHIPS_LIST, and WC_VEHICLE_DEPOT.
Runs the pathfinder to choose a track to continue along.
| v | Ship to navigate |
| tile | Tile, the ship is about to enter |
| tracks | Available track choices on tile |
Definition at line 465 of file ship_cmd.cpp.
References Vehicle::dest_tile, FindFirstTrack(), Vehicle::HandlePathfindingResult(), HasBit(), IsDiagonalTrack(), Ship::path, Ship::state, TrackBitsToTrack(), TrackdirToTrack(), TrackToOppositeTrack(), and YapfShipChooseTrack().
| CommandCost CmdBuildShip | ( | DoCommandFlags | flags, |
| TileIndex | tile, | ||
| const Engine * | e, | ||
| Vehicle ** | ret | ||
| ) |
Build a ship.
| 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. |
Definition at line 865 of file ship_cmd.cpp.
References _current_company, ShipVehicleInfo::acceleration, BuiltAsPrototype, TimerGameCalendar::date, TimerGameEconomy::date, DefaultPalette, Engine::DetermineCapacity(), DiagDirToDir(), ExclusivePreview, Execute, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), Engine::GetDefaultCargoType(), Engine::GetLifeLengthInDays(), GetShipDepotDirection(), GetShipDepotNorthTile(), GetSlopePixelZ(), Hidden, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, IsValidCargoType(), Vehicle::owner, Random, Engine::reliability, Engine::reliability_spd_dec, settings, Stopped, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TILE_SIZE, TileX(), TileY(), TRACK_BIT_DEPOT, and TimerGameCalendar::year.
Referenced by CmdBuildVehicle().
| void DrawShipEngine | ( | int | left, |
| int | right, | ||
| int | preferred_x, | ||
| int | y, | ||
| EngineID | engine, | ||
| PaletteID | pal, | ||
| EngineImageType | image_type | ||
| ) |
Definition at line 96 of file ship_cmd.cpp.
Definition at line 150 of file ship_cmd.cpp.
|
inlinestatic |
Get the available water tracks on a tile for a ship entering a tile.
| tile | The tile about to enter. |
| dir | The entry direction. |
Definition at line 504 of file ship_cmd.cpp.
References DiagdirReachesTracks().
| WaterClass GetEffectiveWaterClass | ( | TileIndex | tile | ) |
Determine the effective WaterClass for a ship travelling on a tile.
| tile | Tile of interest |
Definition at line 53 of file ship_cmd.cpp.
References GetTunnelBridgeTransportType(), GetWaterClass(), HasTileWaterClass(), IsTileType(), MP_RAILWAY, MP_TUNNELBRIDGE, RAIL_GROUND_WATER, TRANSPORT_WATER, WATER_CLASS_CANAL, and WATER_CLASS_SEA.
Referenced by CYapfCostShipT< Types >::PfCalcCost(), and Ship::UpdateCache().
|
static |
Definition at line 80 of file ship_cmd.cpp.
| 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).
| 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 119 of file ship_cmd.cpp.
References VehicleSpriteSeq::GetBounds(), Rect::Height(), UnScaleGUI(), and Rect::Width().
Referenced by EnginePreviewWindow::UpdateWidgetSize().
Definition at line 75 of file ship_cmd.cpp.
Test if a tile is a docking tile for the given station.
| tile | Docking tile to test. |
| station | Destination station. |
Definition at line 617 of file ship_cmd.cpp.
References DIAGDIR_BEGIN, DIAGDIR_END, Industry::GetByTile(), GetStationIndex(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, IsDockingTile(), IsDockTile(), IsDockWaterPart(), IsOilRig(), IsTileType(), IsValidTile(), MP_INDUSTRY, MP_STATION, Industry::neutral_station, and TileOffsByDiagDir().
Referenced by RemoveDock().
| bool IsValidImageIndex< VEH_SHIP > | ( | uint8_t | image_index | ) |
Definition at line 70 of file ship_cmd.cpp.
|
static |
Definition at line 655 of file ship_cmd.cpp.
Definition at line 634 of file ship_cmd.cpp.
|
static |
Accelerates the ship towards its target speed.
| v | Ship to accelerate. |
Definition at line 414 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, Tpool_type, Tcache >::PoolItem< Tpool >::index, Vehicle::progress, SetWindowWidgetDirty(), Vehicle::vcache, WC_VEHICLE_VIEW, and WID_VV_START_STOP.
Ship arrives at a dock.
If it is the first time, send out a news item.
Definition at line 439 of file ship_cmd.cpp.
References _local_company, AddVehicleNewsItem(), ArrivalCompany, ArrivalOther, GetEncodedString(), HVOT_SHIP, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Game::NewEvent(), AI::NewEvent(), and Vehicle::owner.
|
static |
Definition at line 669 of file ship_cmd.cpp.
|
static |
Test and move a ship up or down in a lock.
| v | Ship to move. |
Definition at line 591 of file ship_cmd.cpp.
References Vehicle::cur_speed, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::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.
|
static |
Test if a ship is in the centre of a lock and should move up or down.
| v | Ship being tested. |
Definition at line 566 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().
|
static |
Definition at line 67 of file ship_cmd.cpp.
|
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 522 of file ship_cmd.cpp.
|
constexpr |
Max distance in tiles (as the crow flies) to search for depots when user clicks "go to depot".
Definition at line 46 of file ship_cmd.cpp.
Referenced by Ship::FindClosestDepot().