OpenTTD Source
20241109-master-g5e4f8db7d6
|
Handling of road vehicles. More...
#include "stdafx.h"
#include "roadveh.h"
#include "command_func.h"
#include "error_func.h"
#include "news_func.h"
#include "station_base.h"
#include "company_func.h"
#include "articulated_vehicles.h"
#include "newgrf_sound.h"
#include "pathfinder/yapf/yapf.h"
#include "strings_func.h"
#include "tunnelbridge_map.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 "depot_map.h"
#include "effectvehicle_func.h"
#include "roadstop_base.h"
#include "spritecache.h"
#include "core/random_func.hpp"
#include "company_base.h"
#include "core/backup_type.hpp"
#include "newgrf.h"
#include "zoom_func.h"
#include "framerate_type.h"
#include "roadveh_cmd.h"
#include "road_cmd.h"
#include "table/strings.h"
#include "safeguards.h"
#include "table/roadveh_movement.h"
Go to the source code of this file.
Data Structures | |
struct | RoadVehFindData |
struct | OvertakeData |
struct | RoadDriveEntry |
Macros | |
#define | return_track(x) { best_track = (Trackdir)x; goto found_best_track; } |
Functions | |
template<> | |
bool | IsValidImageIndex< VEH_ROAD > (uint8_t image_index) |
static void | GetRoadVehIcon (EngineID engine, EngineImageType image_type, VehicleSpriteSeq *result) |
void | DrawRoadVehEngine (int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) |
Draw a road vehicle engine. More... | |
void | GetRoadVehSpriteSize (EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type) |
Get the size of the sprite of a road vehicle sprite heading west (used for lists). More... | |
static uint | GetRoadVehLength (const RoadVehicle *v) |
Get length of a road vehicle. More... | |
void | RoadVehUpdateCache (RoadVehicle *v, bool same_length) |
Update the cache of a road vehicle. More... | |
CommandCost | CmdBuildRoadVehicle (DoCommandFlag flags, TileIndex tile, const Engine *e, Vehicle **ret) |
Build a road vehicle. More... | |
static FindDepotData | FindClosestRoadDepot (const RoadVehicle *v, int max_distance) |
CommandCost | CmdTurnRoadVeh (DoCommandFlag flags, VehicleID veh_id) |
Turn a roadvehicle around. More... | |
static void | DeleteLastRoadVeh (RoadVehicle *v) |
Delete last vehicle of a chain road vehicles. More... | |
static void | RoadVehSetRandomDirection (RoadVehicle *v) |
static bool | RoadVehIsCrashed (RoadVehicle *v) |
Road vehicle chain has crashed. More... | |
static Vehicle * | EnumCheckRoadVehCrashTrain (Vehicle *v, void *data) |
Check routine whether a road and a train vehicle have collided. More... | |
static void | RoadVehCrash (RoadVehicle *v) |
static bool | RoadVehCheckTrainCrash (RoadVehicle *v) |
static void | StartRoadVehSound (const RoadVehicle *v) |
static Vehicle * | EnumCheckRoadVehClose (Vehicle *v, void *data) |
static RoadVehicle * | RoadVehFindCloseTo (RoadVehicle *v, int x, int y, Direction dir, bool update_blocked_ctr=true) |
static void | RoadVehArrivesAt (const RoadVehicle *v, Station *st) |
A road vehicle arrives at a station. More... | |
static Direction | RoadVehGetNewDirection (const RoadVehicle *v, int x, int y) |
static Direction | RoadVehGetSlidingDirection (const RoadVehicle *v, int x, int y) |
static Vehicle * | EnumFindVehBlockingOvertake (Vehicle *v, void *data) |
static bool | CheckRoadBlockedForOvertaking (OvertakeData *od) |
Check if overtaking is possible on a piece of track. More... | |
static void | RoadVehCheckOvertake (RoadVehicle *v, RoadVehicle *u) |
static void | RoadZPosAffectSpeed (RoadVehicle *v, int old_z) |
static int | PickRandomBit (uint bits) |
static Trackdir | RoadFindPathToDest (RoadVehicle *v, TileIndex tile, DiagDirection enterdir) |
Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked. More... | |
bool | RoadVehLeaveDepot (RoadVehicle *v, bool first) |
static Trackdir | FollowPreviousRoadVehicle (const RoadVehicle *v, const RoadVehicle *prev, TileIndex tile, DiagDirection entry_dir, bool already_reversed) |
static bool | CanBuildTramTrackOnTile (CompanyID c, TileIndex t, RoadType rt, RoadBits r) |
Can a tram track build without destruction on the given tile? More... | |
bool | IndividualRoadVehicleController (RoadVehicle *v, const RoadVehicle *prev) |
static bool | RoadVehController (RoadVehicle *v) |
static void | CheckIfRoadVehNeedsService (RoadVehicle *v) |
Variables | |
static const uint16_t | _roadveh_images [] |
static const uint16_t | _roadveh_full_adder [] |
static const Trackdir | _road_reverse_table [DIAGDIR_END] |
Handling of road vehicles.
Definition in file roadveh_cmd.cpp.
Can a tram track build without destruction on the given tile?
c | the company that would be building the tram tracks |
t | the tile to build on. |
rt | the tram type to build. |
r | the road bits needed. |
Definition at line 1125 of file roadveh_cmd.cpp.
References _current_company, DC_NO_WATER, DRD_NONE, Backup< T >::Restore(), and CommandCost::Succeeded().
|
static |
Check if overtaking is possible on a piece of track.
od | Information about the tile and the involved vehicles |
Definition at line 784 of file roadveh_cmd.cpp.
References RoadVehicle::compatible_roadtypes, GetTileTrackStatus(), HasTileAnyRoadType(), and TRANSPORT_ROAD.
CommandCost CmdBuildRoadVehicle | ( | DoCommandFlag | flags, |
TileIndex | tile, | ||
const Engine * | e, | ||
Vehicle ** | ret | ||
) |
Build a road vehicle.
flags | type of operation. | |
tile | tile of the depot where road vehicle is built. | |
e | the engine to build. | |
[out] | ret | the vehicle that has been built. |
Definition at line 261 of file roadveh_cmd.cpp.
References _current_company, DC_EXEC, DiagDirToDir(), Vehicle::direction, GetRoadDepotDirection(), GetRoadTypeInfo(), HasTileAnyRoadType(), Vehicle::owner, RoadTypeInfo::powered_roadtypes, return_cmd_error, RoadVehicleInfo::roadtype, and Vehicle::tile.
CommandCost CmdTurnRoadVeh | ( | DoCommandFlag | flags, |
VehicleID | veh_id | ||
) |
Turn a roadvehicle around.
flags | operation to perform |
veh_id | vehicle ID to turn |
Definition at line 361 of file roadveh_cmd.cpp.
References Vehicle::breakdown_ctr, CheckOwnership(), CMD_ERROR, Vehicle::current_order, CommandCost::Failed(), SpecializedVehicle< T, Type >::GetIfValid(), RoadVehicle::IsInDepot(), RoadVehicle::IsPrimaryVehicle(), Order::IsType(), RoadVehicle::overtaking, Vehicle::owner, RVSB_WORMHOLE, RoadVehicle::state, Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.
|
static |
Delete last vehicle of a chain road vehicles.
v | First roadvehicle. |
Definition at line 464 of file roadveh_cmd.cpp.
References SpecializedVehicle< T, Type >::First(), IsInsideMM(), Vehicle::last_station_visited, SpecializedVehicle< T, Type >::Next(), RVSB_IN_ROAD_STOP, Vehicle::SetNext(), and RoadVehicle::state.
void DrawRoadVehEngine | ( | int | left, |
int | right, | ||
int | preferred_x, | ||
int | y, | ||
EngineID | engine, | ||
PaletteID | pal, | ||
EngineImageType | image_type | ||
) |
Draw a road vehicle engine.
left | Left edge to draw within. |
right | Right edge to draw within. |
preferred_x | Preferred position of the engine. |
y | Vertical position of the engine. |
engine | Engine to draw |
pal | Palette to use. |
Definition at line 148 of file roadveh_cmd.cpp.
Check routine whether a road and a train vehicle have collided.
v | Train vehicle to test. |
data | Road vehicle to test. |
nullptr
. Definition at line 519 of file roadveh_cmd.cpp.
References abs(), BaseVehicle::type, VEH_TRAIN, Vehicle::x_pos, Vehicle::y_pos, and Vehicle::z_pos.
|
static |
Get length of a road vehicle.
v | Road vehicle to query length. |
Definition at line 190 of file roadveh_cmd.cpp.
References Vehicle::GetEngine(), and VEHICLE_LENGTH.
Referenced by RoadVehUpdateCache().
void GetRoadVehSpriteSize | ( | EngineID | engine, |
uint & | width, | ||
uint & | height, | ||
int & | xoffs, | ||
int & | yoffs, | ||
EngineImageType | image_type | ||
) |
Get the size of the sprite of a road vehicle 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 171 of file roadveh_cmd.cpp.
|
static |
Returns direction to for a road vehicle to take or INVALID_TRACKDIR if the direction is currently blocked.
v | the Vehicle to do the pathfinding for |
tile | the where to start the pathfinding |
enterdir | the direction the vehicle enters the tile from |
Definition at line 880 of file roadveh_cmd.cpp.
References GetTileTrackStatus(), and TRANSPORT_ROAD.
|
static |
A road vehicle arrives at a station.
If it is the first time, create a news item.
v | Road vehicle that arrived. |
st | Station where the road vehicle arrived. |
Definition at line 686 of file roadveh_cmd.cpp.
References AddVehicleNewsItem(), HVOT_BUS, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, RoadVehicle::IsBus(), and SetDParam().
|
static |
Road vehicle chain has crashed.
v | First roadvehicle. |
Definition at line 497 of file roadveh_cmd.cpp.
References RoadVehicle::crashed_ctr, CreateEffectVehicleRel(), EV_EXPLOSION_LARGE, and Vehicle::tick_counter.
void RoadVehUpdateCache | ( | RoadVehicle * | v, |
bool | same_length | ||
) |
Update the cache of a road vehicle.
v | Road vehicle needing an update of its cache. |
same_length | should length of vehicles stay the same? |
Definition at line 218 of file roadveh_cmd.cpp.
References GroundVehicleCache::cached_total_length, Vehicle::engine_type, GroundVehicle< T, Type >::gcache, GetRoadVehLength(), INVALID_ENGINE, Vehicle::InvalidateNewGRFCacheOfChain(), Vehicle::IsFrontEngine(), SpecializedVehicle< T, Type >::Next(), BaseVehicle::type, VEH_ROAD, and VehicleLengthChanged().
|
static |
Definition at line 74 of file roadveh_cmd.cpp.
|
static |
Definition at line 56 of file roadveh_cmd.cpp.
|
static |
Definition at line 45 of file roadveh_cmd.cpp.