OpenTTD
Functions | Variables
engine.cpp File Reference

Base for all engine handling. More...

#include "stdafx.h"
#include "company_func.h"
#include "command_func.h"
#include "news_func.h"
#include "aircraft.h"
#include "newgrf.h"
#include "newgrf_engine.h"
#include "strings_func.h"
#include "core/random_func.hpp"
#include "window_func.h"
#include "date_func.h"
#include "autoreplace_gui.h"
#include "string_func.h"
#include "ai/ai.hpp"
#include "core/pool_func.hpp"
#include "engine_gui.h"
#include "engine_func.h"
#include "engine_base.h"
#include "company_base.h"
#include "vehicle_func.h"
#include "articulated_vehicles.h"
#include "error.h"
#include "table/strings.h"
#include "table/engines.h"
#include "safeguards.h"

Go to the source code of this file.

Functions

 assert_compile (lengthof(_orig_rail_vehicle_info)+lengthof(_orig_road_vehicle_info)+lengthof(_orig_ship_vehicle_info)+lengthof(_orig_aircraft_vehicle_info)==lengthof(_orig_engine_info))
 
void SetupEngines ()
 Initialise the engine pool with the data from the original vehicles.
 
void ShowEnginePreviewWindow (EngineID engine)
 
static bool IsWagon (EngineID index)
 Determine whether an engine type is a wagon (and not a loco). More...
 
static void CalcEngineReliability (Engine *e)
 Update #reliability of engine e, (if needed) update the engine GUIs. More...
 
void SetYearEngineAgingStops ()
 Compute the value for _year_engine_aging_stops. More...
 
void StartupOneEngine (Engine *e, Date aging_date)
 Start/initialise one engine. More...
 
void StartupEngines ()
 Start/initialise all our engines. More...
 
static void AcceptEnginePreview (EngineID eid, CompanyID company)
 Company company accepts engine eid for preview. More...
 
static CompanyID GetPreviewCompany (Engine *e)
 Get the best company for an engine preview. More...
 
static bool IsVehicleTypeDisabled (VehicleType type, bool ai)
 Checks if a vehicle type is disabled for all/ai companies. More...
 
void EnginesDailyLoop ()
 Daily check to offer an exclusive engine preview to the companies. More...
 
void ClearEnginesHiddenFlagOfCompany (CompanyID cid)
 Clear the 'hidden' flag for all engines of a new company. More...
 
CommandCost CmdSetVehicleVisibility (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Set the visibility of an engine. More...
 
CommandCost CmdWantEnginePreview (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Accept an engine prototype. More...
 
static void NewVehicleAvailable (Engine *e)
 An engine has become available for general use. More...
 
void EnginesMonthlyLoop ()
 Monthly update of the availability, reliability, and preview offers of the engines. More...
 
static bool IsUniqueEngineName (const char *name)
 Is name still free as name for an engine? More...
 
CommandCost CmdRenameEngine (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Rename an engine. More...
 
bool IsEngineBuildable (EngineID engine, VehicleType type, CompanyID company)
 Check if an engine is buildable. More...
 
bool IsEngineRefittable (EngineID engine)
 Check if an engine is refittable. More...
 
void CheckEngines ()
 Check for engines that have an appropriate availability.
 

Variables

EnginePool _engine_pool ("Engine")
 
EngineOverrideManager _engine_mngr
 
static Year _year_engine_aging_stops
 Year that engine aging stops. More...
 
const uint8 _engine_counts [4]
 Number of engines of each vehicle type in original engine data. More...
 
const uint8 _engine_offsets [4]
 Offset of the first engine of each vehicle type in original engine data. More...
 

Detailed Description

Base for all engine handling.

Definition in file engine.cpp.

Function Documentation

◆ AcceptEnginePreview()

static void AcceptEnginePreview ( EngineID  eid,
CompanyID  company 
)
static

Company company accepts engine eid for preview.

Parameters
eidEngine being accepted (is under preview).
companyCurrent company previewing the engine.

Definition at line 714 of file engine.cpp.

References Engine::company_avail, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), SetBit(), Engine::type, and VEH_TRAIN.

Referenced by CmdWantEnginePreview().

◆ CalcEngineReliability()

static void CalcEngineReliability ( Engine e)
static

◆ ClearEnginesHiddenFlagOfCompany()

void ClearEnginesHiddenFlagOfCompany ( CompanyID  cid)

Clear the 'hidden' flag for all engines of a new company.

Parameters
cidCompany being created.

Definition at line 843 of file engine.cpp.

◆ CmdRenameEngine()

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

Rename an engine.

Parameters
tileunused
flagsoperation to perform
p1engine ID to rename
p2unused
textthe new name or an empty string when resetting to the default
Returns
the cost of this operation or an error

Definition at line 1030 of file engine.cpp.

References CMD_ERROR, DC_EXEC, free(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), IsUniqueEngineName(), MarkWholeScreenDirty(), MAX_LENGTH_ENGINE_NAME_CHARS, Engine::name, return_cmd_error, stredup(), StrEmpty(), and Utf8StringLength().

◆ CmdSetVehicleVisibility()

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

Set the visibility of an engine.

Parameters
tileUnused.
flagsOperation to perform.
p1Unused.
p2Bit 31: 0=visible, 1=hidden, other bits for the EngineID.
textUnused.
Returns
The cost of this operation or an error.

Definition at line 860 of file engine.cpp.

References _current_company, AddRemoveEngineFromAutoreplaceAndBuildWindows(), CMD_ERROR, Engine::company_hidden, DC_EXEC, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsEngineBuildable(), MAX_COMPANIES, SB(), and Engine::type.

◆ CmdWantEnginePreview()

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

Accept an engine prototype.

XXX - it is possible that the top-company changes while you are waiting to accept the offer? Then it becomes invalid

Parameters
tileunused
flagsoperation to perform
p1engine-prototype offered
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 884 of file engine.cpp.

References _current_company, AcceptEnginePreview(), CMD_ERROR, DC_EXEC, ENGINE_EXCLUSIVE_PREVIEW, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::GetIfValid(), and Engine::preview_company.

◆ EnginesDailyLoop()

void EnginesDailyLoop ( )

Daily check to offer an exclusive engine preview to the companies.

Functions used by the IncreaseDate function.

Definition at line 799 of file engine.cpp.

◆ EnginesMonthlyLoop()

void EnginesMonthlyLoop ( )

Monthly update of the availability, reliability, and preview offers of the engines.

Definition at line 967 of file engine.cpp.

References _cur_year, and _year_engine_aging_stops.

Referenced by ClickChangeDateCheat(), ClickSetProdCheat(), and OnNewMonth().

◆ GetPreviewCompany()

static CompanyID GetPreviewCompany ( Engine e)
static

Get the best company for an engine preview.

Parameters
eEngine to preview.
Returns
Best company if it exists, INVALID_COMPANY otherwise.

Definition at line 750 of file engine.cpp.

References GetUnionOfArticulatedRefitMasks(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, Engine::type, and VEH_TRAIN.

◆ IsEngineBuildable()

bool IsEngineBuildable ( EngineID  engine,
VehicleType  type,
CompanyID  company 
)

Check if an engine is buildable.

Parameters
engineindex of the engine to check.
typethe type the engine should be.
companyindex of the company.
Returns
True if an engine is valid, of the specified type, and buildable by the given company.

Definition at line 1066 of file engine.cpp.

References CompanyProperties::avail_railtypes, Engine::company_avail, ENGINE_AVAILABLE, Engine::flags, 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<&_engine_pool >::GetIfValid(), GetRailTypeInfo(), HasBit(), Engine::IsEnabled(), OWNER_DEITY, Engine::type, and VEH_TRAIN.

Referenced by CmdBuildVehicle(), and CmdSetVehicleVisibility().

◆ IsEngineRefittable()

bool IsEngineRefittable ( EngineID  engine)

◆ IsUniqueEngineName()

static bool IsUniqueEngineName ( const char *  name)
static

Is name still free as name for an engine?

Parameters
nameNew name of an engine.
Returns
false if the name is being used already, else true.

Definition at line 1010 of file engine.cpp.

Referenced by CmdRenameEngine().

◆ IsVehicleTypeDisabled()

static bool IsVehicleTypeDisabled ( VehicleType  type,
bool  ai 
)
static

Checks if a vehicle type is disabled for all/ai companies.

Parameters
typeThe vehicle type which shall be checked.
aiIf true, check if the type is disabled for AI companies, otherwise check if the vehicle type is disabled for human companies.
Returns
Whether or not a vehicle type is disabled.

Definition at line 786 of file engine.cpp.

References _settings_game, GameSettings::ai, AISettings::ai_disable_veh_aircraft, AISettings::ai_disable_veh_roadveh, AISettings::ai_disable_veh_ship, AISettings::ai_disable_veh_train, VehicleSettings::max_aircraft, VehicleSettings::max_roadveh, VehicleSettings::max_ships, VehicleSettings::max_trains, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, and GameSettings::vehicle.

◆ IsWagon()

static bool IsWagon ( EngineID  index)
static

Determine whether an engine type is a wagon (and not a loco).

Parameters
indexEngine getting queried.
Returns
Whether the queried engine is a wagon.

Definition at line 569 of file engine.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), RAILVEH_WAGON, Engine::type, and VEH_TRAIN.

◆ NewVehicleAvailable()

static void NewVehicleAvailable ( Engine e)
static

An engine has become available for general use.

Also handle the exclusive engine preview contract.

Parameters
eEngine generally available as of now.

Definition at line 899 of file engine.cpp.

References ENGINE_EXCLUSIVE_PREVIEW, Engine::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::index, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.

◆ SetYearEngineAgingStops()

void SetYearEngineAgingStops ( )

Compute the value for _year_engine_aging_stops.

Definition at line 617 of file engine.cpp.

References _year_engine_aging_stops.

◆ StartupEngines()

void StartupEngines ( )

Start/initialise all our engines.

Must be called whenever there are changes to the NewGRF config.

Definition at line 688 of file engine.cpp.

References _date, _year_engine_aging_stops, ConvertYMDToDate(), and min().

Referenced by DEF_CONSOLE_CMD().

◆ StartupOneEngine()

void StartupOneEngine ( Engine e,
Date  aging_date 
)

Start/initialise one engine.

Parameters
eThe engine to initialise.
aging_dateThe date used for age calculations.

Definition at line 643 of file engine.cpp.

References Engine::company_avail, Engine::company_hidden, and Engine::flags.

Variable Documentation

◆ _engine_counts

const uint8 _engine_counts[4]
Initial value:
= {
lengthof(_orig_rail_vehicle_info),
lengthof(_orig_road_vehicle_info),
lengthof(_orig_ship_vehicle_info),
lengthof(_orig_aircraft_vehicle_info),
}
#define lengthof(x)
Return the length of an fixed size array.
Definition: depend.cpp:42

Number of engines of each vehicle type in original engine data.

Definition at line 52 of file engine.cpp.

Referenced by EngineOverrideManager::ResetToDefaultMapping().

◆ _engine_offsets

const uint8 _engine_offsets[4]
Initial value:
= {
0,
lengthof(_orig_rail_vehicle_info),
lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info),
lengthof(_orig_rail_vehicle_info) + lengthof(_orig_road_vehicle_info) + lengthof(_orig_ship_vehicle_info),
}
#define lengthof(x)
Return the length of an fixed size array.
Definition: depend.cpp:42

Offset of the first engine of each vehicle type in original engine data.

Definition at line 60 of file engine.cpp.

◆ _year_engine_aging_stops

Year _year_engine_aging_stops
static

Year that engine aging stops.

Engines will not reduce in reliability and no more engines will be introduced

Definition at line 49 of file engine.cpp.

Referenced by EnginesMonthlyLoop(), SetYearEngineAgingStops(), and StartupEngines().