|
OpenTTD Source
1.10.0-RC1
|
Deals with autoreplace execution but not the setup. More...
#include "stdafx.h"#include "company_func.h"#include "train.h"#include "command_func.h"#include "engine_func.h"#include "vehicle_func.h"#include "autoreplace_func.h"#include "autoreplace_gui.h"#include "articulated_vehicles.h"#include "core/random_func.hpp"#include "vehiclelist.h"#include "road.h"#include "ai/ai.hpp"#include "table/strings.h"#include "safeguards.h"Go to the source code of this file.
Functions | |
| void | ChangeVehicleViewports (VehicleID from_index, VehicleID to_index) |
| Switches viewports following vehicles, which get autoreplaced. More... | |
| void | ChangeVehicleNews (VehicleID from_index, VehicleID to_index) |
| Report a change in vehicle IDs (due to autoreplace) to affected vehicle news. More... | |
| void | ChangeVehicleViewWindow (VehicleID from_index, VehicleID to_index) |
| Report a change in vehicle IDs (due to autoreplace) to affected vehicle windows. More... | |
| static bool | EnginesHaveCargoInCommon (EngineID engine_a, EngineID engine_b) |
| Figure out if two engines got at least one type of cargo in common (refitting if needed) More... | |
| bool | CheckAutoreplaceValidity (EngineID from, EngineID to, CompanyID company) |
| Checks some basic properties whether autoreplace is allowed. More... | |
| void | CheckCargoCapacity (Vehicle *v) |
| Check the capacity of all vehicles in a chain and spread cargo if needed. More... | |
| static void | TransferCargo (Vehicle *old_veh, Vehicle *new_head, bool part_of_chain) |
| Transfer cargo from a single (articulated )old vehicle to the new vehicle chain. More... | |
| static bool | VerifyAutoreplaceRefitForOrders (const Vehicle *v, EngineID engine_type) |
| Tests whether refit orders that applied to v will also apply to the new vehicle type. More... | |
| static CargoID | GetNewCargoTypeForReplace (Vehicle *v, EngineID engine_type, bool part_of_chain) |
| Function to find what type of cargo to refit to when autoreplacing. More... | |
| static CommandCost | GetNewEngineType (const Vehicle *v, const Company *c, bool always_replace, EngineID &e) |
| Get the EngineID of the replacement for a vehicle. More... | |
| static CommandCost | BuildReplacementVehicle (Vehicle *old_veh, Vehicle **new_vehicle, bool part_of_chain) |
| Builds and refits a replacement vehicle Important: The old vehicle is still in the original vehicle chain (used for determining the cargo when the old vehicle did not carry anything, but the new one does) More... | |
| static CommandCost | CmdStartStopVehicle (const Vehicle *v, bool evaluate_callback) |
| Issue a start/stop command. More... | |
| static CommandCost | CmdMoveVehicle (const Vehicle *v, const Vehicle *after, DoCommandFlag flags, bool whole_chain) |
| Issue a train vehicle move command. More... | |
| static CommandCost | CopyHeadSpecificThings (Vehicle *old_head, Vehicle *new_head, DoCommandFlag flags) |
| Copy head specific things to the new vehicle chain after it was successfully constructed. More... | |
| static CommandCost | ReplaceFreeUnit (Vehicle **single_unit, DoCommandFlag flags, bool *nothing_to_do) |
| Replace a single unit in a free wagon chain. More... | |
| static CommandCost | ReplaceChain (Vehicle **chain, DoCommandFlag flags, bool wagon_removal, bool *nothing_to_do) |
| Replace a whole vehicle chain. More... | |
| CommandCost | CmdAutoreplaceVehicle (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
| Autoreplaces a vehicle Trains are replaced as a whole chain, free wagons in depot are replaced on their own. More... | |
| CommandCost | CmdSetAutoReplace (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
| Change engine renewal parameters. More... | |
Deals with autoreplace execution but not the setup.
Definition in file autoreplace_cmd.cpp.
|
static |
Builds and refits a replacement vehicle Important: The old vehicle is still in the original vehicle chain (used for determining the cargo when the old vehicle did not carry anything, but the new one does)
| old_veh | A single (articulated/multiheaded) vehicle that shall be replaced. |
| new_vehicle | Returns the newly build and refitted vehicle |
| part_of_chain | The vehicle is part of a train |
Definition at line 284 of file autoreplace_cmd.cpp.
References _current_company, CT_INVALID, DC_AUTOREPLACE, DC_EXEC, DoCommand(), CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), GetNewCargoTypeForReplace(), GetNewEngineType(), INVALID_ENGINE, and Vehicle::tile.
Report a change in vehicle IDs (due to autoreplace) to affected vehicle news.
| from_index | the old vehicle ID |
| to_index | the new vehicle ID |
Definition at line 978 of file news_gui.cpp.
References NewsItem::next, NF_VEHICLE_PARAM0, and NR_VEHICLE.
Switches viewports following vehicles, which get autoreplaced.
| from_index | the old vehicle ID |
| to_index | the new vehicle ID |
Definition at line 3550 of file window.cpp.
Report a change in vehicle IDs (due to autoreplace) to affected vehicle windows.
| from_index | the old vehicle ID |
| to_index | the new vehicle ID |
Definition at line 1239 of file vehicle_gui.cpp.
References ChangeVehicleWindow(), WC_VEHICLE_DETAILS, WC_VEHICLE_ORDERS, WC_VEHICLE_REFIT, WC_VEHICLE_TIMETABLE, and WC_VEHICLE_VIEW.
Checks some basic properties whether autoreplace is allowed.
| from | Origin engine |
| to | Destination engine |
| company | Company to check for |
Definition at line 52 of file autoreplace_cmd.cpp.
Referenced by ReplaceVehicleWindow::GenerateReplaceVehList(), and RemoveEngineReplacementForCompany().
| void CheckCargoCapacity | ( | Vehicle * | v | ) |
Check the capacity of all vehicles in a chain and spread cargo if needed.
| v | The vehicle to check. |
Definition at line 102 of file autoreplace_cmd.cpp.
| CommandCost CmdAutoreplaceVehicle | ( | TileIndex | tile, |
| DoCommandFlag | flags, | ||
| uint32 | p1, | ||
| uint32 | p2, | ||
| const char * | text | ||
| ) |
Autoreplaces a vehicle Trains are replaced as a whole chain, free wagons in depot are replaced on their own.
| tile | not used |
| flags | type of operation |
| p1 | Index of vehicle |
| p2 | not used |
| text | unused |
Definition at line 676 of file autoreplace_cmd.cpp.
References _current_company, CommandCost::AddCost(), CheckOwnership(), CMD_ERROR, CmdStartStopVehicle(), EXPENSES_NEW_VEHICLES, CommandCost::Failed(), SpecializedVehicle< T, Type >::First(), SpecializedVehicle< Train, Type >::From(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::GetIfValid(), GetNewEngineType(), Train::GetNextUnit(), INVALID_ENGINE, Vehicle::IsArticulatedPart(), Vehicle::IsChainInDepot(), Vehicle::IsFrontEngine(), Vehicle::IsPrimaryVehicle(), GroundVehicle< T, Type >::IsRearDualheaded(), Vehicle::owner, CompanySettings::renew_keep_length, Company::settings, BaseVehicle::type, VEH_TRAIN, Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.
|
inlinestatic |
Issue a train vehicle move command.
| v | The vehicle to move |
| after | The vehicle to insert 'v' after, or nullptr to start new chain |
| flags | the command flags to use |
| whole_chain | move all vehicles following 'v' (true), or only 'v' (false) |
Definition at line 341 of file autoreplace_cmd.cpp.
References CMD_MOVE_RAIL_VEHICLE, DC_NO_CARGO_CAP_CHECK, DoCommand(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, and INVALID_VEHICLE.
| CommandCost CmdSetAutoReplace | ( | TileIndex | tile, |
| DoCommandFlag | flags, | ||
| uint32 | p1, | ||
| uint32 | p2, | ||
| const char * | text | ||
| ) |
Change engine renewal parameters.
| tile | unused |
| flags | operation to perform |
| p1 | packed data
|
| p2 | packed data
|
| text | unused |
Definition at line 766 of file autoreplace_cmd.cpp.
References _current_company, CMD_ERROR, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), IsAllGroupID(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::IsValidID().
|
inlinestatic |
Issue a start/stop command.
| v | a vehicle |
| evaluate_callback | shall the start/stop callback be evaluated? |
Definition at line 328 of file autoreplace_cmd.cpp.
References CMD_START_STOP_VEHICLE, DC_AUTOREPLACE, DC_EXEC, DoCommand(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.
Referenced by CmdAutoreplaceVehicle().
|
static |
Copy head specific things to the new vehicle chain after it was successfully constructed.
| old_head | The old front vehicle (no wagons attached anymore) |
| new_head | The new head of the completely replaced vehicle chain |
| flags | the command flags to use |
Definition at line 352 of file autoreplace_cmd.cpp.
References CommandCost::AddCost(), DoCommand(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, and CommandCost::Succeeded().
Figure out if two engines got at least one type of cargo in common (refitting if needed)
| engine_a | one of the EngineIDs |
| engine_b | the other EngineID |
Definition at line 38 of file autoreplace_cmd.cpp.
References GetUnionOfArticulatedRefitMasks().
|
static |
Function to find what type of cargo to refit to when autoreplacing.
| *v | Original vehicle that is being replaced. |
| engine_type | The EngineID of the vehicle that is being replaced to |
| part_of_chain | The vehicle is part of a train |
Definition at line 204 of file autoreplace_cmd.cpp.
References Engine::CanCarryCargo(), Vehicle::cargo_type, CT_INVALID, CT_NO_REFIT, Vehicle::First(), GetArticulatedRefitMasks(), Vehicle::GetEngine(), HasBit(), IsArticulatedVehicleCarryingDifferentCargoes(), Vehicle::Next(), BaseVehicle::type, VEH_TRAIN, and VerifyAutoreplaceRefitForOrders().
Referenced by BuildReplacementVehicle().
|
static |
Get the EngineID of the replacement for a vehicle.
| v | The vehicle to find a replacement for | |
| c | The vehicle's owner (it's faster to forward the pointer than refinding it) | |
| always_replace | Always replace, even if not old. | |
| [out] | e | the EngineID of the replacement. INVALID_ENGINE if no replacement is found |
Definition at line 246 of file autoreplace_cmd.cpp.
Referenced by BuildReplacementVehicle(), and CmdAutoreplaceVehicle().
|
static |
Replace a whole vehicle chain.
| chain | vehicle chain to let autoreplace/renew operator on |
| flags | command flags |
| wagon_removal | remove wagons when the resulting chain occupies more tiles than the old did |
| nothing_to_do | is set to 'false' when something was done (only valid when not failed) |
< Number of units in the chain
< Will store vehicles of the old chain in their order
< New vehicles corresponding to old_vehs or nullptr if no replacement
< Costs for buying and refitting the new vehicles
< Shall store the last engine unit after this step
Definition at line 445 of file autoreplace_cmd.cpp.
|
static |
Replace a single unit in a free wagon chain.
| single_unit | vehicle to let autoreplace/renew operator on |
| flags | command flags |
| nothing_to_do | is set to 'false' when something was done (only valid when not failed) |
Definition at line 393 of file autoreplace_cmd.cpp.
References SpecializedVehicle< Train, Type >::From().
Transfer cargo from a single (articulated )old vehicle to the new vehicle chain.
| old_veh | Old vehicle that will be sold |
| new_head | Head of the completely constructed new vehicle chain |
| part_of_chain | The vehicle is part of a train |
Definition at line 137 of file autoreplace_cmd.cpp.
Tests whether refit orders that applied to v will also apply to the new vehicle type.
| v | The vehicle to be replaced |
| engine_type | The type we want to replace with |
Definition at line 177 of file autoreplace_cmd.cpp.
References Vehicle::engine_type, Vehicle::First(), GetUnionOfArticulatedRefitMasks(), BaseVehicle::type, and VEH_TRAIN.
Referenced by GetNewCargoTypeForReplace().