OpenTTD Source
1.11.0-beta2
|
Go to the documentation of this file.
18 #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);
207 str =
FreightWagonMult(item->
cargo) > 1 ? STR_VEHICLE_DETAILS_CARGO_FROM_MULT : STR_VEHICLE_DETAILS_CARGO_FROM;
210 str = item->
cargo ==
INVALID_CARGO ? STR_LTBLUE_STRING : STR_VEHICLE_DETAILS_CARGO_EMPTY;
229 DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE);
234 DrawString(left, right, y, STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE);
254 str =
FreightWagonMult(item->
cargo) > 1 ? STR_VEHICLE_INFO_CAPACITY_MULT : STR_VEHICLE_INFO_CAPACITY;
258 str = STR_VEHICLE_INFO_NO_CAPACITY;
279 auto item = std::find(summary->begin(), summary->end(), new_item);
280 if (item == summary->end()) {
281 summary->emplace_back();
282 item = summary->end() - 1;
283 item->cargo = new_item.
cargo;
284 item->subtype = new_item.
subtype;
287 item->source = INVALID_STATION;
292 if (item->source == INVALID_STATION) item->source = v->
cargo.
Source();
326 act_cargo[v->cargo_type] += v->cargo.StoredCount();
327 max_cargo[v->cargo_type] += v->cargo_cap;
334 if (max_cargo[i] > 0) num++;
368 int sprite_y_offset = line_height / 2;
375 int x = rtl ? right : left;
376 for (; v !=
nullptr && vscroll_pos > -vscroll_cap; v = v->
GetNextVehicle()) {
386 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
389 if (e->
GetGRF() !=
nullptr) {
395 seq.
Draw(px + (rtl ? -offset.x : offset.x), y - line_height * vscroll_pos + sprite_y_offset + pitch, pal, (v->
vehstatus &
VS_CRASHED) != 0);
397 px += rtl ? -width : width;
403 if (separate_sprite_row) {
409 for (uint i = 0; i < num_lines; i++) {
411 int data_left = left + (rtl ? 0 : sprite_width);
412 int data_right = right - (rtl ? sprite_width : 0);
413 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
414 int py = y - line_height * vscroll_pos + text_y_offset;
415 if (i > 0 || separate_sprite_row) {
423 DrawString(data_left, data_right, py, STR_QUANTITY_N_A, TC_LIGHT_BLUE);
436 DrawString(data_left, data_right, py, STR_VEHICLE_INFO_NO_CAPACITY);
440 default: NOT_REACHED();
449 Money feeder_share = 0;
451 for (
const Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
452 act_cargo[u->cargo_type] += u->cargo.StoredCount();
453 max_cargo[u->cargo_type] += u->cargo_cap;
454 feeder_share += u->cargo.FeederShare();
458 DrawString(left, right, y + text_y_offset, STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT);
462 if (max_cargo[i] > 0 && --vscroll_pos < 0 && vscroll_pos > -vscroll_cap) {
468 DrawString(left, right, y + text_y_offset,
FreightWagonMult(i) > 1 ? STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT : STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY);
473 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.
uint32 TileIndex
The index/ID of a Tile.
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.
@ CMD_MOVE_RAIL_VEHICLE
move a rail vehicle (in the depot)
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.
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.
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.
bool DoCommandP(const CommandContainer *container, bool my_cmd)
Shortcut for the long DoCommandP when having a container with the data.
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.
@ 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.
void CcBuildWagon(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
Callback for building wagons.
@ 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.
Year build_year
Year the vehicle has been built.
bool operator!=(const CargoSummaryItem &other) const
Used by CargoSummary::Find() and similar functions.
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.