OpenTTD Source 20260218-master-g2123fca5ea
order_base.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
9
10#ifndef ORDER_BASE_H
11#define ORDER_BASE_H
12
13#include "order_type.h"
14#include "core/pool_type.hpp"
15#include "core/bitmath_func.hpp"
16#include "cargo_type.h"
17#include "depot_type.h"
18#include "station_type.h"
19#include "vehicle_type.h"
21#include "saveload/saveload.h"
22
23using OrderListPool = Pool<OrderList, OrderListID, 128>;
24extern OrderListPool _orderlist_pool;
25
26template <typename, typename>
28
29/* If you change this, keep in mind that it is saved on 3 places:
30 * - Load_ORDR, all the global orders
31 * - Vehicle -> current_order
32 */
33struct Order {
34private:
35 friend struct VEHSChunkHandler;
37 /* So we can use private/protected variables in the saveload code */
38 friend class SlVehicleCommon;
39 friend class SlVehicleDisaster;
40 template <typename T>
41 friend class SlOrders;
42
43 template <typename Tcont, typename Titer>
44 friend EndianBufferWriter<Tcont, Titer> &operator <<(EndianBufferWriter<Tcont, Titer> &buffer, const Order &data);
45 friend class EndianBufferReader &operator >>(class EndianBufferReader &buffer, Order &order);
46
47 uint8_t type = 0;
48 uint8_t flags = 0;
50
52
53 uint16_t wait_time = 0;
54 uint16_t travel_time = 0;
55 uint16_t max_speed = UINT16_MAX;
56
57public:
58 Order() {}
59 Order(uint8_t type, uint8_t flags, DestinationID dest) : type(type), flags(flags), dest(dest) {}
60
66 inline bool IsType(OrderType type) const { return this->GetType() == type; }
67
72 inline OrderType GetType() const { return (OrderType)GB(this->type, 0, 4); }
73
74 void Free();
75
76 void MakeGoToStation(StationID destination);
77 void MakeGoToDepot(DestinationID destination, OrderDepotTypeFlags order, OrderNonStopFlags non_stop_type = OrderNonStopFlag::NoIntermediate, OrderDepotActionFlags action = {}, CargoType cargo = CARGO_NO_REFIT);
78 void MakeGoToWaypoint(StationID destination);
79 void MakeLoading(bool ordered);
80 void MakeLeaveStation();
81 void MakeDummy();
83 void MakeImplicit(StationID destination);
84
89 inline bool IsGotoOrder() const
90 {
91 return IsType(OT_GOTO_WAYPOINT) || IsType(OT_GOTO_DEPOT) || IsType(OT_GOTO_STATION);
92 }
93
99 inline DestinationID GetDestination() const { return this->dest; }
100
106 inline void SetDestination(DestinationID destination) { this->dest = destination; }
107
113 inline bool IsRefit() const { return this->refit_cargo < NUM_CARGO || this->refit_cargo == CARGO_AUTO_REFIT; }
114
120 inline bool IsAutoRefit() const { return this->refit_cargo == CARGO_AUTO_REFIT; }
121
127 inline CargoType GetRefitCargo() const { return this->refit_cargo; }
128
129 void SetRefit(CargoType cargo);
130
135 inline bool IsFullLoadOrder() const
136 {
139 }
140
145 inline OrderLoadType GetLoadType() const { return static_cast<OrderLoadType>(GB(this->flags, 4, 3)); }
146
151 inline OrderUnloadType GetUnloadType() const { return static_cast<OrderUnloadType>(GB(this->flags, 0, 3)); }
152
157 inline OrderNonStopFlags GetNonStopType() const { return static_cast<OrderNonStopFlags>(GB(this->type, 6, 2)); }
158
163 inline OrderStopLocation GetStopLocation() const { return static_cast<OrderStopLocation>(GB(this->type, 4, 2)); }
164
169 inline OrderDepotTypeFlags GetDepotOrderType() const { return static_cast<OrderDepotTypeFlags>(GB(this->flags, 0, 3)); }
170
175 inline OrderDepotActionFlags GetDepotActionType() const { return static_cast<OrderDepotActionFlags>(GB(this->flags, 3, 4)); }
176
181 inline OrderConditionVariable GetConditionVariable() const { return static_cast<OrderConditionVariable>(GB(this->dest.value, 11, 5)); }
182
187 inline OrderConditionComparator GetConditionComparator() const { return static_cast<OrderConditionComparator>(GB(this->type, 5, 3)); }
188
193 inline VehicleOrderID GetConditionSkipToOrder() const { return this->flags; }
194
199 inline uint16_t GetConditionValue() const { return GB(this->dest.value, 0, 11); }
200
205 inline void SetLoadType(OrderLoadType load_type) { SB(this->flags, 4, 3, to_underlying(load_type)); }
206
211 inline void SetUnloadType(OrderUnloadType unload_type) { SB(this->flags, 0, 3, to_underlying(unload_type)); }
212
217 inline void SetNonStopType(OrderNonStopFlags non_stop_type) { SB(this->type, 6, 2, non_stop_type.base()); }
218
223 inline void SetStopLocation(OrderStopLocation stop_location) { SB(this->type, 4, 2, to_underlying(stop_location)); }
224
229 inline void SetDepotOrderType(OrderDepotTypeFlags depot_order_type) { SB(this->flags, 0, 3, depot_order_type.base()); }
230
235 inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 3, 4, depot_service_type.base()); }
236
241 inline void SetConditionVariable(OrderConditionVariable condition_variable) { SB(this->dest.value, 11, 5, to_underlying(condition_variable)); }
242
247 inline void SetConditionComparator(OrderConditionComparator condition_comparator) { SB(this->type, 5, 3, to_underlying(condition_comparator)); }
248
253 inline void SetConditionSkipToOrder(VehicleOrderID order_id) { this->flags = order_id; }
254
259 inline void SetConditionValue(uint16_t value) { SB(this->dest.value, 0, 11, value); }
260
261 /* As conditional orders write their "skip to" order all over the flags, we cannot check the
262 * flags to find out if timetabling is enabled. However, as conditional orders are never
263 * autofilled we can be sure that any non-zero values for their wait_time and travel_time are
264 * explicitly set (but travel_time is actually unused for conditionals). */
265
270 inline bool IsWaitTimetabled() const { return this->IsType(OT_CONDITIONAL) ? this->wait_time > 0 : HasBit(this->flags, 3); }
271
276 inline bool IsTravelTimetabled() const { return this->IsType(OT_CONDITIONAL) ? this->travel_time > 0 : HasBit(this->flags, 7); }
277
282 inline uint16_t GetTimetabledWait() const { return this->IsWaitTimetabled() ? this->wait_time : 0; }
287 inline uint16_t GetTimetabledTravel() const { return this->IsTravelTimetabled() ? this->travel_time : 0; }
288
293 inline uint16_t GetWaitTime() const { return this->wait_time; }
294
299 inline uint16_t GetTravelTime() const { return this->travel_time; }
300
306 inline uint16_t GetMaxSpeed() const { return this->max_speed; }
307
312 inline void SetWaitTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) AssignBit(this->flags, 3, timetabled); }
313
318 inline void SetTravelTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) AssignBit(this->flags, 7, timetabled); }
319
324 inline void SetWaitTime(uint16_t time) { this->wait_time = time; }
325
330 inline void SetTravelTime(uint16_t time) { this->travel_time = time; }
331
337 inline void SetMaxSpeed(uint16_t speed) { this->max_speed = speed; }
338
339 bool ShouldStopAtStation(const Vehicle *v, StationID station) const;
340 bool CanLoadOrUnload() const;
341 bool CanLeaveWithCargo(bool has_cargo) const;
342
343 TileIndex GetLocation(const Vehicle *v, bool airport = false) const;
344
349 inline bool IsCompletelyTimetabled() const
350 {
351 if (!this->IsTravelTimetabled() && !this->IsType(OT_CONDITIONAL)) return false;
352 if (!this->IsWaitTimetabled() && this->IsType(OT_GOTO_STATION) &&
354 return false;
355 }
356 return true;
357 }
358
359 void AssignOrder(const Order &other);
360 bool Equals(const Order &other) const;
361
362 uint16_t MapOldOrder() const;
364};
365
368 uint32_t index = 0;
369 uint32_t next = 0;
371};
372
373OldOrderSaveLoadItem *GetOldOrder(size_t pool_index);
374OldOrderSaveLoadItem &AllocateOldOrder(size_t pool_index);
375
376void InsertOrder(Vehicle *v, Order &&new_o, VehicleOrderID sel_ord);
377void DeleteOrder(Vehicle *v, VehicleOrderID sel_ord);
378
383struct OrderList : OrderListPool::PoolItem<&_orderlist_pool> {
384private:
385 friend void AfterLoadVehiclesPhase1(bool part_of_load);
387 friend struct ORDLChunkHandler;
388 template <typename T>
389 friend class SlOrders;
390
392 uint num_vehicles = 0;
394 std::vector<Order> orders;
395 uint32_t old_order_index = 0;
396
399
400public:
405 OrderList(OrderListID index) : OrderListPool::PoolItem<&_orderlist_pool>(index) {}
406
413 OrderList(OrderListID index, Order &&order, Vehicle *v) : OrderListPool::PoolItem<&_orderlist_pool>(index)
414 {
415 this->orders.emplace_back(std::move(order));
416 this->Initialize(v);
417 }
418
419 OrderList(OrderListID index, std::vector<Order> &&orders, Vehicle *v) : OrderListPool::PoolItem<&_orderlist_pool>(index)
420 {
421 this->orders = std::move(orders);
422 this->Initialize(v);
423 }
424
425 OrderList(OrderListID index, Vehicle *v) : OrderListPool::PoolItem<&_orderlist_pool>(index)
426 {
427 this->Initialize(v);
428 }
429
432
433 void Initialize(Vehicle *v);
434
436
441 inline VehicleOrderID GetFirstOrder() const { return this->orders.empty() ? INVALID_VEH_ORDER_ID : 0; }
442
443 inline std::span<const Order> GetOrders() const { return this->orders; }
444 inline std::span<Order> GetOrders() { return this->orders; }
445
452 {
453 if (index >= this->GetNumOrders()) return nullptr;
454 return &this->orders[index];
455 }
456
458 {
459 if (index >= this->GetNumOrders()) return nullptr;
460 return &this->orders[index];
461 }
462
467 inline VehicleOrderID GetLastOrder() const { return this->orders.empty() ? INVALID_VEH_ORDER_ID : (this->GetNumOrders() - 1); }
468
476 {
477 if (this->orders.empty()) return INVALID_VEH_ORDER_ID;
478 return static_cast<VehicleOrderID>((cur + 1) % this->GetNumOrders());
479 }
480
485 inline VehicleOrderID GetNumOrders() const { return static_cast<VehicleOrderID>(std::size(this->orders)); }
486
491 inline VehicleOrderID GetNumManualOrders() const { return this->num_manual_orders; }
492
493 void GetNextStoppingStation(std::vector<StationID> &next_station, const Vehicle *v, VehicleOrderID first = INVALID_VEH_ORDER_ID, uint hops = 0) const;
495
496 void InsertOrderAt(Order &&order, VehicleOrderID index);
497 void DeleteOrderAt(VehicleOrderID index);
499
504 inline bool IsShared() const { return this->num_vehicles > 1; };
505
510 inline Vehicle *GetFirstSharedVehicle() const { return this->first_shared; }
511
516 inline uint GetNumVehicles() const { return this->num_vehicles; }
517
524 inline void AddVehicle([[maybe_unused]] Vehicle *v) { ++this->num_vehicles; }
525
526 void RemoveVehicle(Vehicle *v);
527
528 bool IsCompleteTimetable() const;
529
534 inline TimerGameTick::Ticks GetTimetableTotalDuration() const { return this->IsCompleteTimetable() ? this->timetable_duration : Ticks::INVALID_TICKS; }
535
540 inline TimerGameTick::Ticks GetTimetableDurationIncomplete() const { return this->timetable_duration; }
541
546 inline TimerGameTick::Ticks GetTotalDuration() const { return this->total_duration; }
547
552 void UpdateTimetableDuration(TimerGameTick::Ticks delta) { this->timetable_duration += delta; }
553
558 void UpdateTotalDuration(TimerGameTick::Ticks delta) { this->total_duration += delta; }
559
560 void FreeChain(bool keep_orderlist = false);
561
562 void DebugCheckSanity() const;
563};
564
565#endif /* ORDER_BASE_H */
Functions related to bit mathematics.
constexpr T AssignBit(T &x, const uint8_t y, bool value)
Assigns a bit in a variable.
constexpr T SB(T &x, const uint8_t s, const uint8_t n, const U d)
Set n bits in x starting at bit s to d.
static constexpr uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
Types related to cargoes...
uint8_t CargoType
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:21
static const CargoType CARGO_AUTO_REFIT
Automatically choose cargo type when doing auto refitting.
Definition cargo_type.h:76
static const CargoType NUM_CARGO
Maximum number of cargo types in a game.
Definition cargo_type.h:73
static const CargoType CARGO_NO_REFIT
Do not refit cargo of a vehicle (used in vehicle orders and auto-replace/auto-renew).
Definition cargo_type.h:77
constexpr Tstorage base() const noexcept
Retrieve the raw value behind this bit set.
Endian-aware buffer adapter that always reads values in little endian order.
Endian-aware buffer adapter that always writes values in little endian order.
static constexpr TimerGameTick::Ticks INVALID_TICKS
Representation of an invalid number of ticks.
int32_t Ticks
The type to store ticks in.
Header files for depots (not hangars).
constexpr std::underlying_type_t< enum_type > to_underlying(enum_type e)
Implementation of std::to_underlying (from C++23).
Definition enum_type.hpp:21
@ Vehicle
Vehicle news item. (new engine available).
Definition news_type.h:81
@ Order
Something wrong with the order, e.g. invalid or duplicate entries, too few entries.
Definition news_type.h:54
void InsertOrder(Vehicle *v, Order &&new_o, VehicleOrderID sel_ord)
Insert a new order but skip the validation.
OldOrderSaveLoadItem * GetOldOrder(size_t pool_index)
Get a pointer to an old order with the given reference index.
Definition order_sl.cpp:125
void DeleteOrder(Vehicle *v, VehicleOrderID sel_ord)
Delete an order but skip the parameter validation.
OldOrderSaveLoadItem & AllocateOldOrder(size_t pool_index)
Allocate an old order with the given pool index.
Definition order_sl.cpp:137
Types related to orders.
OrderUnloadType
Unloading order types.
Definition order_type.h:67
OrderConditionVariable
Variables (of a vehicle) to 'cause' skipping on.
Definition order_type.h:128
OrderStopLocation
Where to stop the trains.
Definition order_type.h:97
@ NoDestination
The vehicle will stop at any station it passes except the destination, aka via.
Definition order_type.h:89
@ NoIntermediate
The vehicle will not stop at any stations it passes except the destination, aka non-stop.
Definition order_type.h:88
uint8_t VehicleOrderID
The index of an order within its current vehicle (not pool related).
Definition order_type.h:18
OrderLoadType
Loading order types.
Definition order_type.h:77
@ FullLoad
Full load all cargoes of the consist.
Definition order_type.h:79
@ FullLoadAny
Full load a single cargo of the consist.
Definition order_type.h:80
static const VehicleOrderID INVALID_VEH_ORDER_ID
Invalid vehicle order index (sentinel).
Definition order_type.h:39
OrderConditionComparator
Comparator for the skip reasoning.
Definition order_type.h:143
OrderType
Order types.
Definition order_type.h:50
Definition of Pool, structure used to access PoolItems, and PoolItem, base structure for Vehicle,...
Functions/types related to saving and loading games.
std::span< const struct SaveLoad > SaveLoadTable
A table of SaveLoad entries.
Definition saveload.h:532
Types related to stations.
Compatibility struct to allow saveload of pool-based orders.
Definition order_base.h:367
uint32_t index
This order's index (1-based).
Definition order_base.h:368
Order order
The order data.
Definition order_base.h:370
uint32_t next
The next order index (1-based).
Definition order_base.h:369
TimerGameTick::Ticks GetTimetableDurationIncomplete() const
Gets the known duration of the vehicles timetable even if the timetable is not complete.
Definition order_base.h:540
friend void AfterLoadVehiclesPhase1(bool part_of_load)
For instantiating the shared vehicle chain.
void DeleteOrderAt(VehicleOrderID index)
Remove an order from the order list and delete it.
std::vector< Order > orders
Orders of the order list.
Definition order_base.h:394
bool IsCompleteTimetable() const
Checks whether all orders of the list have a filled timetable.
friend SaveLoadTable GetOrderListDescription()
Saving and loading of order lists.
Definition order_sl.cpp:240
void UpdateTotalDuration(TimerGameTick::Ticks delta)
Must be called if an order's timetable is changed to update internal book keeping.
Definition order_base.h:558
uint GetNumVehicles() const
Return the number of vehicles that share this orders list.
Definition order_base.h:516
void InsertOrderAt(Order &&order, VehicleOrderID index)
Insert a new order into the order chain.
~OrderList()
Destructor.
Definition order_base.h:431
void RemoveVehicle(Vehicle *v)
Removes the vehicle from the shared order list.
uint num_vehicles
NOSAVE: Number of vehicles that share this order list.
Definition order_base.h:392
void AddVehicle(Vehicle *v)
Adds the given vehicle to this shared order list.
Definition order_base.h:524
Vehicle * GetFirstSharedVehicle() const
Get the first vehicle of this vehicle chain.
Definition order_base.h:510
void Initialize(Vehicle *v)
Recomputes everything.
TimerGameTick::Ticks timetable_duration
NOSAVE: Total timetabled duration of the order list.
Definition order_base.h:397
void UpdateTimetableDuration(TimerGameTick::Ticks delta)
Must be called if an order's timetable is changed to update internal book keeping.
Definition order_base.h:552
Vehicle * first_shared
NOSAVE: pointer to the first vehicle in the shared order chain.
Definition order_base.h:393
VehicleOrderID GetFirstOrder() const
Get the first order of the order chain.
Definition order_base.h:441
TimerGameTick::Ticks GetTimetableTotalDuration() const
Gets the total duration of the vehicles timetable or Ticks::INVALID_TICKS is the timetable is not com...
Definition order_base.h:534
VehicleOrderID num_manual_orders
NOSAVE: How many manually added orders are there in the list.
Definition order_base.h:391
void MoveOrder(VehicleOrderID from, VehicleOrderID to)
Move an order to another position within the order list.
OrderList(OrderListID index, Order &&order, Vehicle *v)
Create an order list with the order for the given vehicle.
Definition order_base.h:413
void GetNextStoppingStation(std::vector< StationID > &next_station, const Vehicle *v, VehicleOrderID first=INVALID_VEH_ORDER_ID, uint hops=0) const
Recursively determine the next deterministic station to stop at.
VehicleOrderID GetNext(VehicleOrderID cur) const
Get the order after the given one or the first one, if the given one is the last one.
Definition order_base.h:475
VehicleOrderID GetNumOrders() const
Get number of orders in the order list.
Definition order_base.h:485
void RecalculateTimetableDuration()
Recomputes Timetable duration.
void FreeChain(bool keep_orderlist=false)
Free a complete order chain.
VehicleOrderID GetNumManualOrders() const
Get number of manually added orders in the order list.
Definition order_base.h:491
VehicleOrderID GetNextDecisionNode(VehicleOrderID next, uint hops) const
Get the next order which will make the given vehicle stop at a station or refit at a depot or evaluat...
TimerGameTick::Ticks GetTotalDuration() const
Gets the known duration of the vehicles orders, timetabled or not.
Definition order_base.h:546
OrderList(OrderListID index)
Default constructor producing an invalid order list.
Definition order_base.h:405
bool IsShared() const
Is this a shared order list?
Definition order_base.h:504
TimerGameTick::Ticks total_duration
NOSAVE: Total (timetabled or not) duration of the order list.
Definition order_base.h:398
VehicleOrderID GetLastOrder() const
Get the last order of the order chain.
Definition order_base.h:467
const Order * GetOrderAt(VehicleOrderID index) const
Get a certain order of the order chain.
Definition order_base.h:451
TileIndex GetLocation(const Vehicle *v, bool airport=false) const
Returns a tile somewhat representing the order destination (not suitable for pathfinding).
bool IsGotoOrder() const
Is this a 'goto' order with a real destination?
Definition order_base.h:89
OrderDepotTypeFlags GetDepotOrderType() const
What caused us going to the depot?
Definition order_base.h:169
uint16_t GetTimetabledTravel() const
Get the time in ticks a vehicle should take to reach the destination or 0 if it's not timetabled.
Definition order_base.h:287
OrderConditionVariable GetConditionVariable() const
What variable do we have to compare?
Definition order_base.h:181
bool Equals(const Order &other) const
Does this order have the same type, flags and destination?
uint16_t MapOldOrder() const
Pack this order into a 16 bits integer as close to the TTD representation as possible.
uint16_t GetMaxSpeed() const
Get the maxmimum speed in km-ish/h a vehicle is allowed to reach on the way to the destination.
Definition order_base.h:306
uint16_t max_speed
How fast the vehicle may go on the way to the destination.
Definition order_base.h:55
void ConvertFromOldSavegame()
Converts this order from an old savegame's version; it moves all bits to the new location.
Definition order_sl.cpp:26
void SetTravelTimetabled(bool timetabled)
Set if the travel time is explicitly timetabled (unless the order is conditional).
Definition order_base.h:318
DestinationID GetDestination() const
Gets the destination of this order.
Definition order_base.h:99
bool IsType(OrderType type) const
Check whether this order is of the given type.
Definition order_base.h:66
void SetNonStopType(OrderNonStopFlags non_stop_type)
Set whether we must stop at stations or not.
Definition order_base.h:217
VehicleOrderID GetConditionSkipToOrder() const
Get the order to skip to.
Definition order_base.h:193
OrderStopLocation GetStopLocation() const
Where must we stop at the platform?
Definition order_base.h:163
uint16_t GetWaitTime() const
Get the time in ticks a vehicle will probably wait at the destination (timetabled or not).
Definition order_base.h:293
CargoType GetRefitCargo() const
Get the cargo to to refit to.
Definition order_base.h:127
OrderType GetType() const
Get the type of order of this order.
Definition order_base.h:72
bool IsFullLoadOrder() const
Is this order a OrderLoadType::FullLoad or OrderLoadType::FullLoadAny?
Definition order_base.h:135
void MakeGoToStation(StationID destination)
Makes this order a Go To Station order.
Definition order_cmd.cpp:58
uint8_t type
The type of order + non-stop flags.
Definition order_base.h:47
friend struct VEHSChunkHandler
Loading of ancient vehicles.
Definition order_base.h:35
uint16_t wait_time
How long in ticks to wait at the destination.
Definition order_base.h:53
void SetRefit(CargoType cargo)
Make this depot/station order also a refit order.
void SetDepotOrderType(OrderDepotTypeFlags depot_order_type)
Set the cause to go to the depot.
Definition order_base.h:229
bool IsCompletelyTimetabled() const
Checks if travel_time and wait_time apply to this order and if they are timetabled.
Definition order_base.h:349
void SetWaitTime(uint16_t time)
Set the time in ticks to wait at the destination.
Definition order_base.h:324
void SetStopLocation(OrderStopLocation stop_location)
Set where we must stop at the platform.
Definition order_base.h:223
void MakeDummy()
Makes this order a Dummy order.
void MakeGoToWaypoint(StationID destination)
Makes this order a Go To Waypoint order.
Definition order_cmd.cpp:87
void SetConditionVariable(OrderConditionVariable condition_variable)
Set variable we have to compare.
Definition order_base.h:241
OrderUnloadType GetUnloadType() const
How must the consist be unloaded?
Definition order_base.h:151
uint8_t flags
Load/unload types, depot order/action types.
Definition order_base.h:48
void MakeGoToDepot(DestinationID destination, OrderDepotTypeFlags order, OrderNonStopFlags non_stop_type=OrderNonStopFlag::NoIntermediate, OrderDepotActionFlags action={}, CargoType cargo=CARGO_NO_REFIT)
Makes this order a Go To Depot order.
Definition order_cmd.cpp:73
bool IsWaitTimetabled() const
Does this order have an explicit wait time set?
Definition order_base.h:270
void SetTravelTime(uint16_t time)
Set the time in ticks to take for travelling to the destination.
Definition order_base.h:330
friend SaveLoadTable GetOrderDescription()
Saving and loading of orders.
Definition order_sl.cpp:144
DestinationID dest
The destination of the order.
Definition order_base.h:49
void SetDestination(DestinationID destination)
Sets the destination of this order.
Definition order_base.h:106
void SetWaitTimetabled(bool timetabled)
Set if the wait time is explicitly timetabled (unless the order is conditional).
Definition order_base.h:312
bool IsTravelTimetabled() const
Does this order have an explicit travel time set?
Definition order_base.h:276
void SetConditionComparator(OrderConditionComparator condition_comparator)
Set the comparator to use.
Definition order_base.h:247
void MakeConditional(VehicleOrderID order)
Makes this order an conditional order.
void SetDepotActionType(OrderDepotActionFlags depot_service_type)
Set what we are going to do in the depot.
Definition order_base.h:235
void SetConditionSkipToOrder(VehicleOrderID order_id)
Get the order to skip to.
Definition order_base.h:253
OrderLoadType GetLoadType() const
How must the consist be loaded?
Definition order_base.h:145
OrderDepotActionFlags GetDepotActionType() const
What are we going to do when in the depot.
Definition order_base.h:175
void MakeLeaveStation()
Makes this order a Leave Station order.
bool CanLeaveWithCargo(bool has_cargo) const
A vehicle can leave the current station with cargo if:
void SetConditionValue(uint16_t value)
Set the value to base the skip on.
Definition order_base.h:259
void SetUnloadType(OrderUnloadType unload_type)
Set how the consist must be unloaded.
Definition order_base.h:211
void Free()
'Free' the order
Definition order_cmd.cpp:47
uint16_t GetTimetabledWait() const
Get the time in ticks a vehicle should wait at the destination or 0 if it's not timetabled.
Definition order_base.h:282
bool ShouldStopAtStation(const Vehicle *v, StationID station) const
Check whether the given vehicle should stop at the given station based on this order and the non-stop...
CargoType refit_cargo
Refit CargoType.
Definition order_base.h:51
uint16_t GetTravelTime() const
Get the time in ticks a vehicle will probably take to reach the destination (timetabled or not).
Definition order_base.h:299
void MakeImplicit(StationID destination)
Makes this order an implicit order.
void SetLoadType(OrderLoadType load_type)
Set how the consist must be loaded.
Definition order_base.h:205
bool IsAutoRefit() const
Is this order a auto-refit order.
Definition order_base.h:120
void AssignOrder(const Order &other)
Assign data to an order (from another order) This function makes sure that the index is maintained co...
OrderConditionComparator GetConditionComparator() const
What is the comparator to use?
Definition order_base.h:187
OrderNonStopFlags GetNonStopType() const
At which stations must we stop?
Definition order_base.h:157
bool IsRefit() const
Is this order a refit order.
Definition order_base.h:113
void MakeLoading(bool ordered)
Makes this order a Loading order.
Definition order_cmd.cpp:98
uint16_t GetConditionValue() const
Get the value to base the skip on.
Definition order_base.h:199
void SetMaxSpeed(uint16_t speed)
Set the maxmimum speed in km-ish/h a vehicle is allowed to reach on the way to the destination.
Definition order_base.h:337
uint16_t travel_time
How long in ticks the journey to this destination should take.
Definition order_base.h:54
Base class for all pools.
Vehicle data structure.
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > > TileIndex
The index/ID of a Tile.
Definition tile_type.h:92
Definition of the tick-based game-timer.
Types related to vehicles.