|
OpenTTD Source
13.0-beta2
|
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;
99 int max_width = r.
Width();
106 int px = rtl ? max_width + skip : -skip;
108 bool sel_articulated =
false;
110 bool drag_at_end_of_train = (drag_dest == v->
index);
111 for (; v !=
nullptr && (rtl ? px > 0 : px < max_width); v = v->
Next()) {
112 if (dragging && !drag_at_end_of_train && drag_dest == v->
index) {
115 px += rtl ? -drag_hlight_width : drag_hlight_width;
121 if (rtl ? px + width > 0 : px - width < max_width) {
130 if (v->
index == selection) {
132 highlight_l = rtl ? px - width : px;
133 highlight_r = rtl ? px - 1 : px + width - 1;
134 sel_articulated =
true;
135 }
else if ((_cursor.
vehchain && highlight_r != 0) || sel_articulated) {
137 highlight_l -= width;
139 highlight_r += width;
143 px += rtl ? -width : width;
146 if (dragging && drag_at_end_of_train) {
153 if (highlight_l != highlight_r) {
157 Rect hr = {highlight_l, 0, highlight_r, height - 1};
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++;
362 int line_height = r.
Height();
363 int sprite_y_offset = line_height / 2;
369 int x = rtl ? r.right : r.left;
370 for (; v !=
nullptr && vscroll_pos > -vscroll_cap; v = v->
GetNextVehicle()) {
380 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
383 if (e->
GetGRF() !=
nullptr) {
389 seq.
Draw(px + (rtl ? -offset.x : offset.x), r.top - line_height * vscroll_pos + sprite_y_offset + pitch, pal, (v->
vehstatus &
VS_CRASHED) != 0);
391 px += rtl ? -width : width;
397 if (separate_sprite_row) {
405 for (uint i = 0; i < num_lines; i++) {
406 if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) {
407 int py = r.top - line_height * vscroll_pos + text_y_offset;
408 if (i > 0 || separate_sprite_row) {
416 DrawString(dr.left, dr.right, py, STR_QUANTITY_N_A, TC_LIGHT_BLUE);
429 DrawString(dr.left, dr.right, py, STR_VEHICLE_INFO_NO_CAPACITY);
433 default: NOT_REACHED();
443 Money feeder_share = 0;
445 for (
const Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
446 act_cargo[u->cargo_type] += u->cargo.StoredCount();
447 max_cargo[u->cargo_type] += u->cargo_cap;
448 feeder_share += u->cargo.FeederShare();
452 DrawString(r.left, r.right, y + text_y_offset, STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT);
458 if (max_cargo[i] > 0 && --vscroll_pos < 0 && vscroll_pos > -vscroll_cap) {
464 DrawString(ir.left, ir.right, y + text_y_offset,
FreightWagonMult(i) > 1 ? STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT : STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY);
469 DrawString(r.left, r.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.
static const byte INVALID_CARGO
Constant representing invalid cargo.
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.
int Height() const
Get height of Rect.
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.
void DrawTrainDetails(const Train *v, const Rect &r, int vscroll_pos, uint16 vscroll_cap, TrainDetailsWindowTabs det_tab)
Draw the details for the given vehicle at the given position.
Commands
List of commands.
T * Next() const
Get next vehicle in the chain.
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.
Rect Expand(int s) const
Copy and expand Rect by s pixels.
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.
Common return value for all commands.
Rect Translate(int x, int y) const
Copy and translate Rect by x,y pixels.
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
EngineID engine_type
The type of engine used for this vehicle.
@ VS_CRASHED
Vehicle is crashed.
Sprite sequence for a vehicle part.
ClientID
'Unique' identifier to be given to clients
VehicleCargoList cargo
The cargo this vehicle is carrying.
bool Failed() const
Did this command fail?
static int ScaleSpriteTrad(int value)
Scale traditional pixel dimensions to GUI zoom level, for drawing sprites.
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.
Rect Indent(int indent, bool end) const
Copy Rect and indent it from its position.
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.
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.
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.
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override
Get the sprite to display the train.
Vehicle * Last()
Get the last vehicle of this vehicle chain.
uint32 VehicleID
The type all our vehicle IDs have.
static int CenterBounds(int min, int max, int size)
Determine where to draw a centred object inside a widget.
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
StringID subtype
STR_EMPTY if none.
int Width() const
Get width of Rect.
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
Specification of a rectangle with absolute coordinates of all edges.
@ 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.
void DrawTrainImage(const Train *v, const Rect &r, VehicleID selection, EngineImageType image_type, int skip, VehicleID drag_dest)
Draws an image of a whole train.
@ 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.