src/order_base.h
author Tero Marttila <terom@fixme.fi>
Tue, 22 Jul 2008 23:20:33 +0300
changeset 11184 88c967f1422b
parent 10429 1b99254f9607
permissions -rw-r--r--
add an empty bin/cache dir
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2159
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2159
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10136
diff changeset
     3
/** @file order_base.h Base class for orders. */
2214
75d037f8dcc4 (svn r2732) -Codechange: Cleaned the order flags some more. Hit some inconsistencies while trying to locate bug 1244167
celestar
parents: 2186
diff changeset
     4
9280
9c03416d26b1 (svn r12488) -Codechange: split order.h into order_base.h and order_func.h.
rubidium
parents: 9267
diff changeset
     5
#ifndef ORDER_BASE_H
9c03416d26b1 (svn r12488) -Codechange: split order.h into order_base.h and order_func.h.
rubidium
parents: 9267
diff changeset
     6
#define ORDER_BASE_H
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
     7
9267
71cf88230dc1 (svn r12470) -Codechange: split order related types from order.h (and openttd.h) to order_type.h.
rubidium
parents: 9266
diff changeset
     8
#include "order_type.h"
5216
d581e4db95b6 (svn r7331) - Codechange: Rename all memory pool macro's and types to "old pool", so the new pool implementation can be committed alongside it.
matthijs
parents: 4977
diff changeset
     9
#include "oldpool.h"
8609
8c0c3e9dd6a0 (svn r11674) -Codechange: refactor some functions out of macros.h into more logical locations.
rubidium
parents: 8149
diff changeset
    10
#include "core/bitmath_func.hpp"
8615
6b91ca653bad (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents: 8609
diff changeset
    11
#include "cargo_type.h"
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    12
#include "depot_type.h"
9328
a7ad10a9b0cb (svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents: 9280
diff changeset
    13
#include "station_type.h"
a7ad10a9b0cb (svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents: 9280
diff changeset
    14
#include "vehicle_type.h"
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    15
#include "waypoint_type.h"
1314
d6a253cf92c3 (svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents: 1093
diff changeset
    16
7887
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    17
DECLARE_OLD_POOL(Order, Order, 6, 1000)
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    18
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
    19
/* If you change this, keep in mind that it is saved on 3 places:
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3347
diff changeset
    20
 * - Load_ORDR, all the global orders
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3347
diff changeset
    21
 * - Vehicle -> current_order
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6589
diff changeset
    22
 * - REF_ORDER (all REFs are currently limited to 16 bits!!)
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 3347
diff changeset
    23
 */
7887
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    24
struct Order : PoolItem<Order, OrderID, &_Order_pool> {
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    25
private:
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    26
	friend const struct SaveLoad *GetVehicleDescription(VehicleType vt); ///< Saving and loading the current order of vehicles.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    27
	friend void Load_VEHS();                                             ///< Loading of ancient vehicles.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    28
	friend const struct SaveLoad *GetOrderDescription();                 ///< Saving and loading of orders.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    29
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
    30
	uint8 type;           ///< The type of order + non-stop flags
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
    31
	uint8 flags;          ///< Load/unload types, depot order/action types.
9336
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
    32
	DestinationID dest;   ///< The destination of the order.
9334
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
    33
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
    34
	CargoID refit_cargo;  ///< Refit CargoID
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
    35
	byte refit_subtype;   ///< Refit subtype
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    36
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    37
public:
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    38
	Order *next;          ///< Pointer to next order. If NULL, end of list
6189
2b1ae5e373e9 (svn r8582) -Fix
tron
parents: 6173
diff changeset
    39
7476
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6589
diff changeset
    40
	uint16 wait_time;    ///< How long in ticks to wait at the destination.
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6589
diff changeset
    41
	uint16 travel_time;  ///< How long in ticks the journey to this destination should take.
7f086e4b2a76 (svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents: 6589
diff changeset
    42
7887
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    43
	Order() : refit_cargo(CT_NO_REFIT) {}
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    44
	~Order() { this->type = OT_NOTHING; }
5740662fc5ce (svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents: 7871
diff changeset
    45
7992
8ac3fcd8d570 (svn r11009) -Codechange: unvirtualise IsValid as that isn't needed with templates. This gives up to 10% performance increase in games with lots of vehicles.
rubidium
parents: 7887
diff changeset
    46
	/**
9335
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    47
	 * Create an order based on a packed representation of that order.
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    48
	 * @param packed the packed representation.
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    49
	 */
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    50
	Order(uint32 packed);
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    51
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
    52
	/**
7992
8ac3fcd8d570 (svn r11009) -Codechange: unvirtualise IsValid as that isn't needed with templates. This gives up to 10% performance increase in games with lots of vehicles.
rubidium
parents: 7887
diff changeset
    53
	 * Check if a Order really exists.
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    54
	 * @return true if the order is valid.
7992
8ac3fcd8d570 (svn r11009) -Codechange: unvirtualise IsValid as that isn't needed with templates. This gives up to 10% performance increase in games with lots of vehicles.
rubidium
parents: 7887
diff changeset
    55
	 */
8ac3fcd8d570 (svn r11009) -Codechange: unvirtualise IsValid as that isn't needed with templates. This gives up to 10% performance increase in games with lots of vehicles.
rubidium
parents: 7887
diff changeset
    56
	inline bool IsValid() const { return this->type != OT_NOTHING; }
8ac3fcd8d570 (svn r11009) -Codechange: unvirtualise IsValid as that isn't needed with templates. This gives up to 10% performance increase in games with lots of vehicles.
rubidium
parents: 7887
diff changeset
    57
9330
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    58
	/**
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    59
	 * Check whether this order is of the given type.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    60
	 * @param type the type to check against.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    61
	 * @return true if the order matches.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    62
	 */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
    63
	inline bool IsType(OrderType type) const { return this->GetType() == type; }
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    64
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    65
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    66
	 * Get the type of order of this order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    67
	 * @return the order type.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    68
	 */
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
    69
	inline OrderType GetType() const { return (OrderType)GB(this->type, 0, 4); }
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    70
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    71
	/**
9330
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    72
	 * 'Free' the order
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    73
	 * @note ONLY use on "current_order" vehicle orders!
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    74
	 */
6589
addf4b6946d0 (svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents: 6574
diff changeset
    75
	void Free();
9330
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    76
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
    77
	/**
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    78
	 * Makes this order a Go To Station order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    79
	 * @param destsination the station to go to.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    80
	 */
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    81
	void MakeGoToStation(StationID destination);
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    82
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    83
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    84
	 * Makes this order a Go To Depot order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    85
	 * @param destination the depot to go to.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    86
	 * @param order       is this order a 'default' order, or an overriden vehicle order?
9334
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
    87
	 * @param cargo       the cargo type to change to.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
    88
	 * @param subtype     the subtype to change to.
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    89
	 */
10079
99aba130db3c (svn r12615) -Codechange: rename some enums related to depot orders to make it more clear that they are no loading/unloading flags. Also add more type strictness.
rubidium
parents: 9344
diff changeset
    90
	void MakeGoToDepot(DepotID destination, OrderDepotTypeFlags order, CargoID cargo = CT_NO_REFIT, byte subtype = 0);
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    91
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    92
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    93
	 * Makes this order a Go To Waypoint order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    94
	 * @param destination the waypoint to go to.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    95
	 */
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    96
	void MakeGoToWaypoint(WaypointID destination);
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    97
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    98
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
    99
	 * Makes this order a Loading order.
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   100
	 * @param ordered is this an ordered stop?
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   101
	 */
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   102
	void MakeLoading(bool ordered);
9332
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   103
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   104
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   105
	 * Makes this order a Leave Station order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   106
	 */
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   107
	void MakeLeaveStation();
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   108
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   109
	/**
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   110
	 * Makes this order a Dummy order.
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   111
	 */
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   112
	void MakeDummy();
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   113
2e120d0bd632 (svn r12584) -Codechange: do not access the order type directly.
rubidium
parents: 9331
diff changeset
   114
	/**
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   115
	 * Makes this order an conditional order.
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   116
	 * @param order the order to jump to.
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   117
	 */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   118
	void MakeConditional(VehicleOrderID order);
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   119
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   120
	/**
9330
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
   121
	 * Free a complete order chain.
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
   122
	 * @note do not use on "current_order" vehicle orders!
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
   123
	 */
6589
addf4b6946d0 (svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents: 6574
diff changeset
   124
	void FreeChain();
9328
a7ad10a9b0cb (svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents: 9280
diff changeset
   125
9334
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   126
	/**
9336
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   127
	 * Gets the destination of this order.
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   128
	 * @pre IsType(OT_GOTO_WAYPOINT) || IsType(OT_GOTO_DEPOT) || IsType(OT_GOTO_STATION).
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   129
	 * @return the destination of the order.
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   130
	 */
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   131
	inline DestinationID GetDestination() const { return this->dest; }
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   132
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   133
	/**
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   134
	 * Sets the destination of this order.
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   135
	 * @param destination the new destination of the order.
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   136
	 * @pre IsType(OT_GOTO_WAYPOINT) || IsType(OT_GOTO_DEPOT) || IsType(OT_GOTO_STATION).
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   137
	 */
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   138
	inline void SetDestination(DestinationID destination) { this->dest = destination; }
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   139
3f75a2c5e0d3 (svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents: 9335
diff changeset
   140
	/**
9334
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   141
	 * Is this order a refit order.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   142
	 * @pre IsType(OT_GOTO_DEPOT)
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   143
	 * @return true if a refit should happen.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   144
	 */
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   145
	inline bool IsRefit() const { return this->refit_cargo < NUM_CARGO; }
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   146
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   147
	/**
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   148
	 * Get the cargo to to refit to.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   149
	 * @pre IsType(OT_GOTO_DEPOT)
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   150
	 * @return the cargo type.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   151
	 */
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   152
	inline CargoID GetRefitCargo() const { return this->refit_cargo; }
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   153
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   154
	/**
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   155
	 * Get the cargo subtype to to refit to.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   156
	 * @pre IsType(OT_GOTO_DEPOT)
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   157
	 * @return the cargo subtype.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   158
	 */
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   159
	inline byte GetRefitSubtype() const { return this->refit_subtype; }
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   160
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   161
	/**
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   162
	 * Make this depot order also a refit order.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   163
	 * @param cargo   the cargo type to change to.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   164
	 * @param subtype the subtype to change to.
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   165
	 * @pre IsType(OT_GOTO_DEPOT).
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   166
	 */
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   167
	void SetRefit(CargoID cargo, byte subtype = 0);
db2f5161fcba (svn r12586) -Codechange: do not access an order's refit variables directly.
rubidium
parents: 9332
diff changeset
   168
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   169
	/** How must the consist be loaded? */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   170
	inline OrderLoadFlags GetLoadType() const { return (OrderLoadFlags)GB(this->flags, 4, 4); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   171
	/** How must the consist be unloaded? */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   172
	inline OrderUnloadFlags GetUnloadType() const { return (OrderUnloadFlags)GB(this->flags, 0, 4); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   173
	/** Where must we stop? */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   174
	inline OrderNonStopFlags GetNonStopType() const { return (OrderNonStopFlags)GB(this->type, 6, 2); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   175
	/** What caused us going to the depot? */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   176
	inline OrderDepotTypeFlags GetDepotOrderType() const { return (OrderDepotTypeFlags)GB(this->flags, 0, 4); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   177
	/** What are we going to do when in the depot. */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   178
	inline OrderDepotActionFlags GetDepotActionType() const { return (OrderDepotActionFlags)GB(this->flags, 4, 4); }
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   179
	/** What variable do we have to compare? */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   180
	inline OrderConditionVariable GetConditionVariable() const { return (OrderConditionVariable)GB(this->dest, 11, 5); }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   181
	/** What is the comparator to use? */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   182
	inline OrderConditionComparator GetConditionComparator() const { return (OrderConditionComparator)GB(this->type, 5, 3); }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   183
	/** Get the order to skip to. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   184
	inline VehicleOrderID GetConditionSkipToOrder() const { return this->flags; }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   185
	/** Get the value to base the skip on. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   186
	inline uint16 GetConditionValue() const { return GB(this->dest, 0, 11); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   187
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   188
	/** Set how the consist must be loaded. */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   189
	inline void SetLoadType(OrderLoadFlags load_type) { SB(this->flags, 4, 4, load_type); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   190
	/** Set how the consist must be unloaded. */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   191
	inline void SetUnloadType(OrderUnloadFlags unload_type) { SB(this->flags, 0, 4, unload_type); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   192
	/** Set whether we must stop at stations or not. */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   193
	inline void SetNonStopType(OrderNonStopFlags non_stop_type) { SB(this->type, 6, 2, non_stop_type); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   194
	/** Set the cause to go to the depot. */
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   195
	inline void SetDepotOrderType(OrderDepotTypeFlags depot_order_type) { SB(this->flags, 0, 4, depot_order_type); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   196
	/** Set what we are going to do in the depot. */
10136
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   197
	inline void SetDepotActionType(OrderDepotActionFlags depot_service_type) { SB(this->flags, 4, 4, depot_service_type); }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   198
	/** Set variable we have to compare. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   199
	inline void SetConditionVariable(OrderConditionVariable condition_variable) { SB(this->dest, 11, 5, condition_variable); }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   200
	/** Set the comparator to use. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   201
	inline void SetConditionComparator(OrderConditionComparator condition_comparator) { SB(this->type, 5, 3, condition_comparator); }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   202
	/** Get the order to skip to. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   203
	inline void SetConditionSkipToOrder(VehicleOrderID order_id) { this->flags = order_id; }
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   204
	/** Set the value to base the skip on. */
d808af13bf7a (svn r12667) -Feature: conditional 'skip/jump' orders.
rubidium
parents: 10117
diff changeset
   205
	inline void SetConditionValue(uint16 value) { SB(this->dest, 0, 11, value); }
9339
daaa2adbaf99 (svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents: 9336
diff changeset
   206
9328
a7ad10a9b0cb (svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents: 9280
diff changeset
   207
	bool ShouldStopAtStation(const Vehicle *v, StationID station) const;
9331
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   208
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   209
	/**
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   210
	 * Assign the given order to this one.
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   211
	 * @param other the data to copy (except next pointer).
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   212
	 */
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   213
	void AssignOrder(const Order &other);
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   214
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   215
	/**
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   216
	 * Does this order have the same type, flags and destination?
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   217
	 * @param other the second order to compare to.
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   218
	 * @return true if the type, flags and destination match.
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   219
	 */
f67d4fd5ed5d (svn r12583) -Codechange: make AssignOrder a class function of order.
rubidium
parents: 9330
diff changeset
   220
	bool Equals(const Order &other) const;
9335
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   221
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   222
	/**
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   223
	 * Pack this order into a 32 bits integer, or actually only
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   224
	 * the type, flags and destination.
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   225
	 * @return the packed representation.
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   226
	 * @note unpacking is done in the constructor.
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   227
	 */
18d3658adc60 (svn r12587) -Codechange: unduplicate some code in the Unpack*Order functions and move the 'normal' case Pack/Unpack to Order.
rubidium
parents: 9334
diff changeset
   228
	uint32 Pack() const;
10117
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   229
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   230
	/**
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   231
	 * Converts this order from an old savegame's version;
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   232
	 * it moves all bits to the new location.
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   233
	 */
6a796f06bff4 (svn r12648) -Feature: allow four different non-stop types in a single game instead of two. The "TTDP compatible order" setting now only sets the default behaviour of new trains.
rubidium
parents: 10109
diff changeset
   234
	void ConvertFromOldSavegame();
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   235
};
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   236
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6189
diff changeset
   237
static inline VehicleOrderID GetMaxOrderIndex()
4354
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   238
{
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   239
	/* TODO - This isn't the real content of the function, but
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   240
	 *  with the new pool-system this will be replaced with one that
5247
c3eece01af11 (svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents: 5216
diff changeset
   241
	 *  _really_ returns the highest index. Now it just returns
4354
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   242
	 *  the next safe value we are sure about everything is below.
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   243
	 */
5247
c3eece01af11 (svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents: 5216
diff changeset
   244
	return GetOrderPoolSize() - 1;
c3eece01af11 (svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents: 5216
diff changeset
   245
}
c3eece01af11 (svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents: 5216
diff changeset
   246
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6189
diff changeset
   247
static inline VehicleOrderID GetNumOrders()
5247
c3eece01af11 (svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents: 5216
diff changeset
   248
{
4354
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   249
	return GetOrderPoolSize();
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   250
}
684ab9249dae (svn r6055) -Codechange: added GetXXXArraySize, which returns HighestID + 1 (or, will do that).
truelight
parents: 4351
diff changeset
   251
6589
addf4b6946d0 (svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents: 6574
diff changeset
   252
#define FOR_ALL_ORDERS_FROM(order, start) for (order = GetOrder(start); order != NULL; order = (order->index + 1U < GetOrderPoolSize()) ? GetOrder(order->index + 1U) : NULL) if (order->IsValid())
1314
d6a253cf92c3 (svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents: 1093
diff changeset
   253
#define FOR_ALL_ORDERS(order) FOR_ALL_ORDERS_FROM(order, 0)
d6a253cf92c3 (svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents: 1093
diff changeset
   254
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   255
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   256
#define FOR_VEHICLE_ORDERS(v, order) for (order = v->orders; order != NULL; order = order->next)
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   257
9330
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
   258
/* (Un)pack routines */
828cc0ca9654 (svn r12582) -Codechange: move some (needlessly) static inlined functions from order_base.h to order_cmd.cpp.
rubidium
parents: 9328
diff changeset
   259
Order UnpackOldOrder(uint16 packed);
1024
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   260
9b06b01490a4 (svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
diff changeset
   261
#endif /* ORDER_H */