| OpenTTD
    | 
GUI for building vehicles. More...
#include "stdafx.h"#include "engine_base.h"#include "engine_func.h"#include "station_base.h"#include "network/network.h"#include "articulated_vehicles.h"#include "textbuf_gui.h"#include "command_func.h"#include "company_func.h"#include "vehicle_gui.h"#include "newgrf_engine.h"#include "newgrf_text.h"#include "group.h"#include "string_func.h"#include "strings_func.h"#include "window_func.h"#include "date_func.h"#include "vehicle_func.h"#include "widgets/dropdown_func.h"#include "engine_gui.h"#include "cargotype.h"#include "core/geometry_func.hpp"#include "autoreplace_func.h"#include "widgets/build_vehicle_widget.h"#include "table/strings.h"#include "safeguards.h"Go to the source code of this file.
| Data Structures | |
| struct | BuildVehicleWindow | 
| GUI for building vehicles.  More... | |
| Functions | |
| uint | GetEngineListHeight (VehicleType type) | 
| Get the height of a single 'entry' in the engine lists. | |
| static int CDECL | EngineNumberSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by engineID. | |
| static int CDECL | EngineIntroDateSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by introduction date. | |
| static int CDECL | EngineNameSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by name. | |
| static int CDECL | EngineReliabilitySorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by reliability. | |
| static int CDECL | EngineCostSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by purchase cost. | |
| static int CDECL | EngineSpeedSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by speed. | |
| static int CDECL | EnginePowerSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by power. | |
| static int CDECL | EngineTractiveEffortSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by tractive effort. | |
| static int CDECL | EngineRunningCostSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by running costs. | |
| static int CDECL | EnginePowerVsRunningCostSorter (const EngineID *a, const EngineID *b) | 
| Determines order of engines by running costs. | |
| static int CDECL | TrainEngineCapacitySorter (const EngineID *a, const EngineID *b) | 
| Determines order of train engines by capacity. | |
| static int CDECL | TrainEnginesThenWagonsSorter (const EngineID *a, const EngineID *b) | 
| Determines order of train engines by engine / wagon. | |
| static int CDECL | RoadVehEngineCapacitySorter (const EngineID *a, const EngineID *b) | 
| Determines order of road vehicles by capacity. | |
| static int CDECL | ShipEngineCapacitySorter (const EngineID *a, const EngineID *b) | 
| Determines order of ships by capacity. | |
| static int CDECL | AircraftEngineCargoSorter (const EngineID *a, const EngineID *b) | 
| Determines order of aircraft by cargo. | |
| static int CDECL | AircraftRangeSorter (const EngineID *a, const EngineID *b) | 
| Determines order of aircraft by range. | |
| static bool CDECL | CargoFilter (const EngineID *eid, const CargoID cid) | 
| Cargo filter functions. | |
| static int | DrawCargoCapacityInfo (int left, int right, int y, EngineID engine) | 
| static int | DrawRailWagonPurchaseInfo (int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi) | 
| static int | DrawRailEnginePurchaseInfo (int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi) | 
| static int | DrawRoadVehPurchaseInfo (int left, int right, int y, EngineID engine_number) | 
| static int | DrawShipPurchaseInfo (int left, int right, int y, EngineID engine_number, bool refittable) | 
| static int | DrawAircraftPurchaseInfo (int left, int right, int y, EngineID engine_number, bool refittable) | 
| static uint | ShowAdditionalText (int left, int right, int y, EngineID engine) | 
| Display additional text from NewGRF in the purchase information window. | |
| int | DrawVehiclePurchaseInfo (int left, int right, int y, EngineID engine_number) | 
| Draw the purchase info details of a vehicle at a given location. | |
| void | DrawEngineList (VehicleType type, int l, int r, int y, const GUIEngineList *eng_list, uint16 min, uint16 max, EngineID selected_id, bool show_count, GroupID selected_group) | 
| Engine drawing loop. | |
| void | DisplayVehicleSortDropDown (Window *w, VehicleType vehicle_type, int selected, int button) | 
| Display the dropdown for the vehicle sort criteria. | |
| void | ShowBuildVehicleWindow (TileIndex tile, VehicleType type) | 
| Variables | |
| static const NWidgetPart | _nested_build_vehicle_widgets [] | 
| static const CargoID | CF_ANY = CT_NO_REFIT | 
| Special cargo filter criteria. | |
| static const CargoID | CF_NONE = CT_INVALID | 
| Show only vehicles which do not carry cargo (e.g. train engines) | |
| bool | _engine_sort_direction | 
| false= descending,true= ascending. | |
| byte | _engine_sort_last_criteria [] = {0, 0, 0, 0} | 
| Last set sort criteria, for each vehicle type. | |
| bool | _engine_sort_last_order [] = {false, false, false, false} | 
| Last set direction of the sort order, for each vehicle type. | |
| bool | _engine_sort_show_hidden_engines [] = {false, false, false, false} | 
| Last set 'show hidden engines' setting for each vehicle type. | |
| static CargoID | _engine_sort_last_cargo_criteria [] = {CF_ANY, CF_ANY, CF_ANY, CF_ANY} | 
| Last set filter criteria, for each vehicle type. | |
| EngList_SortTypeFunction *const | _engine_sort_functions [][11] | 
| Sort functions for the vehicle sort criteria, for each vehicle type. | |
| const StringID | _engine_sort_listing [][12] | 
| Dropdown menu strings for the vehicle sort criteria. | |
| static GUIEngineList::FilterFunction *const | _filter_funcs [] | 
| static WindowDesc | _build_vehicle_desc (WDP_AUTO,"build_vehicle", 240, 268, WC_BUILD_VEHICLE, WC_NONE, WDF_CONSTRUCTION, _nested_build_vehicle_widgets, lengthof(_nested_build_vehicle_widgets)) | 
GUI for building vehicles.
Definition in file build_vehicle_gui.cpp.
Determines order of aircraft by cargo.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 379 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), and Engine::GetDisplayDefaultCapacity().
Determines order of aircraft by range.
| *a | first engine to compare. | 
| *b | second engine to compare. | 
Definition at line 407 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
| void DisplayVehicleSortDropDown | ( | Window * | w, | 
| VehicleType | vehicle_type, | ||
| int | selected, | ||
| int | button | ||
| ) | 
Display the dropdown for the vehicle sort criteria.
| w | Parent window (holds the dropdown button). | 
| vehicle_type | Vehicle type being sorted. | 
| selected | Currently selected sort criterium. | 
| button | Widget button. | 
Definition at line 942 of file build_vehicle_gui.cpp.
References _engine_sort_listing, _settings_game, VehicleSettings::roadveh_acceleration_model, SetBit(), ShowDropDownMenu(), VehicleSettings::train_acceleration_model, VEH_ROAD, VEH_TRAIN, and GameSettings::vehicle.
Referenced by ReplaceVehicleWindow::OnClick(), and BuildVehicleWindow::OnClick().
| void DrawEngineList | ( | VehicleType | type, | 
| int | l, | ||
| int | r, | ||
| int | y, | ||
| const GUIEngineList * | eng_list, | ||
| uint16 | min, | ||
| uint16 | max, | ||
| EngineID | selected_id, | ||
| bool | show_count, | ||
| GroupID | selected_group | ||
| ) | 
Engine drawing loop.
| type | Type of vehicle (VEH_*) | 
| l | The left most location of the list | 
| r | The right most location of the list | 
| y | The top most location of the list | 
| eng_list | What engines to draw | 
| min | where to start in the list | 
| max | where in the list to end | 
| selected_id | what engine to highlight as selected, if any | 
| show_count | Whether to show the amount of engines or not | 
| selected_group | the group to list the engines of | 
Definition at line 880 of file build_vehicle_gui.cpp.
References _current_text_dir, _local_company, Engine::company_hidden, DrawSprite(), DrawString(), DrawVehicleEngine(), EIT_PURCHASE, EngineHasReplacementForCompany(), VehicleCellSize::extend_left, VehicleCellSize::extend_right, FONT_HEIGHT_NORMAL, FONT_HEIGHT_SMALL, FS_SMALL, 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(), GetEngineListHeight(), GetEnginePalette(), GetGroupNumEngines(), GetSpriteSize(), GetStringBoundingBox(), GetVehicleImageCellSize(), HasBit(), max(), min(), PALETTE_CRASH, SA_FORCE, SA_RIGHT, SetDParam(), SetDParamMaxDigits(), TC_NO_SHADE, TD_RTL, WD_FRAMERECT_BOTTOM, WD_FRAMERECT_LEFT, WD_FRAMERECT_RIGHT, WD_FRAMETEXT_LEFT, and WD_FRAMETEXT_RIGHT.
Referenced by ReplaceVehicleWindow::DrawWidget(), and BuildVehicleWindow::DrawWidget().
| int DrawVehiclePurchaseInfo | ( | int | left, | 
| int | right, | ||
| int | y, | ||
| EngineID | engine_number | ||
| ) | 
Draw the purchase info details of a vehicle at a given location.
| left,right,y | location where to draw the info | 
| engine_number | the engine of which to draw the info of | 
Definition at line 798 of file build_vehicle_gui.cpp.
References ConvertDateToYMD(), CT_INVALID, DAYS_IN_LEAP_YEAR, DrawString(), FONT_HEIGHT_NORMAL, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetLifeLengthInDays(), Engine::intro_date, IsArticulatedVehicleRefittable(), RAILVEH_WAGON, Engine::reliability, SetDParam(), ShowAdditionalText(), ShowRefitOptionsList(), ToPercent16(), Engine::type, VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, and YearMonthDay::year.
Referenced by ReplaceVehicleWindow::OnPaint(), and BuildVehicleWindow::OnPaint().
Determines order of engines by purchase cost.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 186 of file build_vehicle_gui.cpp.
References _engine_sort_direction, ClampToI32(), EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by introduction date.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 119 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by name.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 136 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), INVALID_ENGINE, lastof, SetDParam(), and strnatcmp().
Determines order of engines by engineID.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 106 of file build_vehicle_gui.cpp.
References _engine_sort_direction, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Referenced by AircraftEngineCargoSorter(), AircraftRangeSorter(), EngineCostSorter(), EngineIntroDateSorter(), EngineNameSorter(), EnginePowerSorter(), EnginePowerVsRunningCostSorter(), EngineReliabilitySorter(), EngineRunningCostSorter(), EngineSpeedSorter(), EngineTractiveEffortSorter(), ReplaceVehicleWindow::GenerateReplaceVehList(), RoadVehEngineCapacitySorter(), ShipEngineCapacitySorter(), TrainEngineCapacitySorter(), and TrainEnginesThenWagonsSorter().
Determines order of engines by power.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 220 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by running costs.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 271 of file build_vehicle_gui.cpp.
References _engine_sort_direction, ClampToI32(), EngineNumberSorter(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), Engine::GetPower(), Engine::GetRunningCost(), and max().
Determines order of engines by reliability.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 169 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by running costs.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 254 of file build_vehicle_gui.cpp.
References _engine_sort_direction, ClampToI32(), EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by speed.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 203 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
Determines order of engines by tractive effort.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 237 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get().
| uint GetEngineListHeight | ( | VehicleType | type | ) | 
Get the height of a single 'entry' in the engine lists.
| type | the vehicle type to get the height of | 
Definition at line 47 of file build_vehicle_gui.cpp.
References EIT_PURCHASE, FONT_HEIGHT_NORMAL, GetVehicleImageCellSize(), VehicleCellSize::height, WD_MATRIX_BOTTOM, and WD_MATRIX_TOP.
Referenced by DrawEngineList(), ReplaceVehicleWindow::UpdateWidgetSize(), and BuildVehicleWindow::UpdateWidgetSize().
Determines order of road vehicles by capacity.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 338 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and GetTotalCapacityOfArticulatedParts().
Determines order of ships by capacity.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 357 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), and Engine::GetDisplayDefaultCapacity().
| 
 | static | 
Display additional text from NewGRF in the purchase information window.
| left | Left border of text bounding box | 
| right | Right border of text bounding box | 
| y | Top border of text bounding box | 
| engine | Engine to query the additional purchase information for | 
Definition at line 776 of file build_vehicle_gui.cpp.
References CALLBACK_FAILED, CBID_VEHICLE_ADDITIONAL_TEXT, DrawStringMultiLine(), ErrorUnknownCallbackResult(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), GetGRFStringID(), GetVehicleCallback(), StartTextRefStackUsage(), and StopTextRefStackUsage().
Referenced by DrawVehiclePurchaseInfo().
Determines order of train engines by capacity.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 299 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), GetTotalCapacityOfArticulatedParts(), and RAILVEH_MULTIHEAD.
Determines order of train engines by engine / wagon.
| *a | first engine to compare | 
| *b | second engine to compare | 
Definition at line 319 of file build_vehicle_gui.cpp.
References _engine_sort_direction, EngineNumberSorter(), and RAILVEH_WAGON.
| EngList_SortTypeFunction* const _engine_sort_functions[][11] | 
Sort functions for the vehicle sort criteria, for each vehicle type.
Definition at line 420 of file build_vehicle_gui.cpp.
Referenced by ReplaceVehicleWindow::GenerateReplaceVehList().
| const StringID _engine_sort_listing[][12] | 
Dropdown menu strings for the vehicle sort criteria.
Definition at line 470 of file build_vehicle_gui.cpp.
Referenced by DisplayVehicleSortDropDown(), ReplaceVehicleWindow::SetStringParameters(), and BuildVehicleWindow::SetStringParameters().
| 
 | static | 
Definition at line 531 of file build_vehicle_gui.cpp.
| 
 | static | 
Special cargo filter criteria.
Show all vehicles independent of carried cargo (i.e. no filtering)
Definition at line 91 of file build_vehicle_gui.cpp.
Referenced by CargoFilter(), BuildVehicleWindow::FilterSingleEngine(), BuildVehicleWindow::OnDropdownSelect(), and BuildVehicleWindow::SetCargoFilterArray().
 1.8.1.2
 1.8.1.2