|
OpenTTD Source
13.0-beta1
|
Go to the documentation of this file.
19 #include "table/strings.h"
32 if (result.
Failed())
return;
37 if (t->IsFrontEngine() && t->tile == tile && t->IsStoppedInDepot()) {
38 if (found !=
nullptr)
return;
44 if (found !=
nullptr) {
45 found = found->
Last();
65 int dragged_width = 0;
66 for (
Train *t =
Train::Get(selection); t !=
nullptr; t = chain ? t->
Next() : (t->HasArticulatedPart() ? t->GetNextArticulatedPart() :
nullptr)) {
67 dragged_width += t->GetDisplayImageWidth(
nullptr);
70 int drag_hlight_left = rtl ? std::max(px - dragged_width + 1, 0) : px;
71 int drag_hlight_right = rtl ? px : std::min(px + dragged_width, max_width) - 1;
72 int drag_hlight_width = std::max(drag_hlight_right - drag_hlight_left + 1, 0);
74 if (drag_hlight_width > 0) {
79 return drag_hlight_width;
101 int max_width = right - left + 1;
109 int px = rtl ? max_width + skip : -skip;
110 bool sel_articulated =
false;
112 bool drag_at_end_of_train = (drag_dest == v->
index);
113 for (; v !=
nullptr && (rtl ? px > 0 : px < max_width); v = v->
Next()) {
114 if (dragging && !drag_at_end_of_train && drag_dest == v->
index) {
117 px += rtl ? -drag_hlight_width : drag_hlight_width;
123 if (rtl ? px + width > 0 : px - width < max_width) {
132 if (v->
index == selection) {
134 highlight_l = rtl ? px - width : px;
135 highlight_r = rtl ? px - 1 : px + width - 1;
136 sel_articulated =
true;
137 }
else if ((_cursor.
vehchain && highlight_r != 0) || sel_articulated) {
139 highlight_l -= width;
141 highlight_r += width;
145 px += rtl ? -width : width;
148 if (dragging && drag_at_end_of_train) {
153 if (highlight_l != highlight_r) {
173 return this->cargo != other.
cargo || this->subtype != other.
subtype;
179 return !(this->cargo != other.
cargo);
208 str =
FreightWagonMult(item->
cargo) > 1 ? STR_VEHICLE_DETAILS_CARGO_FROM_MULT : STR_VEHICLE_DETAILS_CARGO_FROM;
211 str = item->
cargo ==
INVALID_CARGO ? STR_LTBLUE_STRING : STR_VEHICLE_DETAILS_CARGO_EMPTY;
230 DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE);
235 DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE);
255 str =
FreightWagonMult(item->
cargo) > 1 ? STR_VEHICLE_INFO_CAPACITY_MULT : STR_VEHICLE_INFO_CAPACITY;
259 str = STR_VEHICLE_INFO_NO_CAPACITY;
280 auto item = std::find(summary->begin(), summary->end(), new_item);
281 if (item == summary->end()) {
282 summary->emplace_back();
283 item = summary->end() - 1;
284 item->cargo = new_item.
cargo;
285 item->subtype = new_item.
subtype;
288 item->source = INVALID_STATION;
293 if (item->source == INVALID_STATION) item->source = v->
cargo.
Source();
327 act_cargo[v->cargo_type] += v->cargo.StoredCount();
328 max_cargo[v->cargo_type] += v->cargo_cap;
335 if (max_cargo[i] > 0) num++;
373 int sprite_y_offset = line_height / 2;
380 int x = rtl ? right : left;
381 for (; v !=
nullptr && vscroll_pos > -vscroll_cap; v = v->
GetNextVehicle()) {
391 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
394 if (e->
GetGRF() !=
nullptr) {
400 seq.
Draw(px + (rtl ? -offset.x : offset.x), y - line_height * vscroll_pos + sprite_y_offset + pitch, pal, (v->
vehstatus &
VS_CRASHED) != 0);
402 px += rtl ? -width : width;
408 if (separate_sprite_row) {
414 for (uint i = 0; i < num_lines; i++) {
416 int data_left = left + (rtl ? 0 : sprite_width);
417 int data_right = right - (rtl ? sprite_width : 0);
418 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
419 int py = y - line_height * vscroll_pos + text_y_offset;
420 if (i > 0 || separate_sprite_row) {
428 DrawString(data_left, data_right, py, STR_QUANTITY_N_A, TC_LIGHT_BLUE);
441 DrawString(data_left, data_right, py, STR_VEHICLE_INFO_NO_CAPACITY);
445 default: NOT_REACHED();
454 Money feeder_share = 0;
456 for (
const Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
457 act_cargo[u->cargo_type] += u->cargo.StoredCount();
458 max_cargo[u->cargo_type] += u->cargo_cap;
459 feeder_share += u->cargo.FeederShare();
463 DrawString(left, right, y + text_y_offset, STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT);
467 if (max_cargo[i] > 0 && --vscroll_pos < 0 && vscroll_pos > -vscroll_cap) {
473 DrawString(left + offs_left, right - offs_right, y + text_y_offset,
FreightWagonMult(i) > 1 ? STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT : STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY);
478 DrawString(left, right, y + text_y_offset, STR_VEHICLE_INFO_FEEDER_CARGO_VALUE);
int GetDisplayImageWidth(Point *offset=nullptr) const
Get the width of a train vehicle image in the GUI.
T * GetNextVehicle() const
Get the next real (non-articulated part) vehicle in the consist.
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const
Get the sprite to display the train.
static const byte INVALID_CARGO
Constant representing invalid cargo.
@ WD_FRAMERECT_TOP
Offset at top to draw the frame rectangular area.
uint StoredCount() const
Returns sum of cargo on board the vehicle (ie not only reserved).
static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *summary)
Collects the cargo transported.
static Titem * Get(size_t index)
Returns Titem with given index.
Direction
Defines the 8 directions on the map.
@ TDW_TAB_INFO
Tab with name and value of the vehicles.
Money value
Value of the vehicle.
Commands
List of commands.
T * Next() const
Get next vehicle in the chain.
@ WD_MATRIX_TOP
Offset at top of a matrix cell.
TrainDetailsWindowTabs
The tabs in the train details window.
@ TD_LTR
Text is written left-to-right by default.
bool vehchain
vehicle chain is dragged
Tindex index
Index of this pool item.
Class for storing amounts of cargo.
@ EIT_IN_DETAILS
Vehicle drawn in vehicle details, refit window, ...
int DrawString(int left, int right, int top, const char *str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
EngineImageType
Visualisation contexts of vehicles and engines.
static void TrainDetailsCapacityTab(const CargoSummaryItem *item, int left, int right, int y)
Draw the details capacity tab for the given vehicle at the given position.
void Draw(int x, int y, PaletteID default_pal, bool force_pal) const
Draw the sprite sequence.
byte _colour_gradient[COLOUR_END][8]
All 16 colour gradients 8 colours per gradient from darkest (0) to lightest (7)
static void SetDParam(uint n, uint64 v)
Set a string parameter v at index n in the global string parameter array.
static const uint TRAIN_DETAILS_MIN_INDENT
Minimum indent level in the train details window.
bool IsArticulatedPart() const
Check if the vehicle is an articulated part of an engine.
uint capacity
Amount that can be carried.
@ TDW_TAB_TOTALS
Tab with sum of total cargo transported.
const GRFFile * GetGRF() const
Retrieve the NewGRF the engine is tied to.
int traininfo_vehicle_pitch
Vertical offset for drawing train images in depot GUI and vehicle details.
uint16 EngineID
Unique identification number of an engine.
std::vector< CargoSummaryItem > CargoSummary
Container for the cargo summary information.
StationID source
One of the source stations.
static uint GetVehicleHeight(VehicleType type)
Get the height of a single vehicle in the GUIs.
Common return value for all commands.
void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_pos, uint16 vscroll_cap, TrainDetailsWindowTabs det_tab)
Draw the details for the given vehicle at the given position.
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
EngineID engine_type
The type of engine used for this vehicle.
@ WD_FRAMERECT_LEFT
Offset at left to draw the frame rectangular area.
@ VS_CRASHED
Vehicle is crashed.
Sprite sequence for a vehicle part.
ClientID
'Unique' identifier to be given to clients
@ WD_FRAMERECT_RIGHT
Offset at right to draw the frame rectangular area.
VehicleCargoList cargo
The cargo this vehicle is carrying.
void DrawTrainImage(const Train *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip, VehicleID drag_dest)
Draws an image of a whole train.
@ WD_FRAMERECT_BOTTOM
Offset at bottom to draw the frame rectangular area.
bool Failed() const
Did this command fail?
GameSettings _settings_game
Game settings of a running game or the scenario editor.
static Train * Get(size_t index)
Gets vehicle with given index.
static CargoSummary _cargo_summary
Reused container of cargo details.
const Engine * GetEngine() const
Retrieves the engine of the vehicle.
'Train' is either a loco or a wagon.
static const uint TRAIN_DETAILS_MAX_INDENT
Maximum indent level in the train details window; wider than this and we start on a new line.
static void TrainDetailsInfoTab(const Vehicle *v, int left, int right, int y)
Draw the details info tab for the given vehicle at the given position.
Coordinates of a point in 2D.
@ WC_TRAINS_LIST
Trains list; Window numbers:
void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectMode mode)
Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
@ RAILVEH_WAGON
simple wagon, not motorized
bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int height)
Set up a clipping area for only drawing into a certain area.
StringID GetCargoSubtypeText(const Vehicle *v)
Get the cargo subtype text from NewGRF for the vehicle details window.
static int HighlightDragPosition(int px, int max_width, VehicleID selection, bool chain)
Highlight the position where a rail vehicle is dragged over by drawing a light gray background.
uint32 StringID
Numeric value that represents a string, independent of the selected language.
Helper struct for the cargo details information.
static const PaletteID PALETTE_CRASH
Recolour sprite greying of crashed vehicles.
CargoID cargo
The cargo that is carried.
static void TrainDetailsCargoTab(const CargoSummaryItem *item, int left, int right, int y)
Draw the details cargo tab for the given vehicle at the given position.
uint16 cargo_cap
total capacity
bool CanCarryCargo() const
Determines whether an engine can carry something.
@ TDW_TAB_CAPACITY
Tab with cargo capacity of the vehicles.
static Train * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
PaletteID GetVehiclePalette(const Vehicle *v)
Get the colour map for a vehicle.
#define FONT_HEIGHT_NORMAL
Height of characters in the normal (FS_NORMAL) font.
static int ScaleGUITrad(int value)
Scale traditional pixel dimensions to GUI zoom level.
uint32 PaletteID
The number of the palette.
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
@ NUM_CARGO
Maximal number of cargo types in a game.
static const int TRAIN_DETAILS_LIST_INDENT
Indent for list items in the Total Cargo window.
Year build_year
Year the vehicle has been built.
bool operator!=(const CargoSummaryItem &other) const
Used by CargoSummary::Find() and similar functions.
void CcBuildWagon(Commands cmd, const CommandCost &result, VehicleID new_veh_id, uint, uint16, TileIndex tile, EngineID, bool, CargoID, ClientID)
Callback for building wagons.
StationID Source() const
Returns source of the first cargo packet in this list.
static Pool::IterateWrapper< Train > Iterate(size_t from=0)
Returns an iterable ensemble of all valid vehicles of type T.
Vehicle * Last()
Get the last vehicle of this vehicle chain.
uint32 VehicleID
The type all our vehicle IDs have.
@ WD_MATRIX_BOTTOM
Offset at bottom of a matrix cell.
uint amount
Amount that is carried.
byte CargoID
Cargo slots to indicate a cargo type within a game.
bool operator==(const CargoSummaryItem &other) const
Used by std::find() and similar functions.
CargoID cargo_type
type of cargo this vehicle is carrying
static uint GetLengthOfArticulatedVehicle(const Train *v)
Get the length of an articulated vehicle.
VehicleSettings vehicle
options for vehicles
@ VEH_TRAIN
Train vehicle type.
StringID subtype
STR_EMPTY if none.
int GetTrainDetailsWndVScroll(VehicleID veh_id, TrainDetailsWindowTabs det_tab)
Determines the number of lines in the train details window.
uint8 freight_trains
value to multiply the weight of cargo by
@ TD_RTL
Text is written right-to-left by default.
TextDirection _current_text_dir
Text direction of the currently selected language.
@ FR_BORDERONLY
Draw border only, no background.
Data about how and where to blit pixels.
@ TDW_TAB_CARGO
Tab with cargo carried by the vehicles.
byte FreightWagonMult(CargoID cargo)
Return the cargo weight multiplier to use for a rail vehicle.