author | rubidium |
Sun, 25 Nov 2007 19:45:09 +0000 | |
changeset 8464 | d652654312e7 |
parent 8428 | f8300c908bd9 |
child 8553 | 66a54e0c1c4a |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6677
0578c2e31ed1
(svn r9390) -Documentation : correct Doxygen of comments and @file inclusion. This time, brought to you by the letter O
belugas
parents:
6663
diff
changeset
|
3 |
/** @file order_cmd.cpp */ |
0578c2e31ed1
(svn r9390) -Documentation : correct Doxygen of comments and @file inclusion. This time, brought to you by the letter O
belugas
parents:
6663
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
92a3b0aa0946
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1884
diff
changeset
|
6 |
#include "openttd.h" |
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
7 |
#include "order.h" |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
8 |
#include "airport.h" |
7134
c5a90dd41166
(svn r9869) -Codechange: replace some bytes with VehicleType, i.e. more type strictness.
rubidium
parents:
7108
diff
changeset
|
9 |
#include "vehicle.h" |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
10 |
#include "depot.h" |
2163
637ec3c361f5
(svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents:
2140
diff
changeset
|
11 |
#include "functions.h" |
507
8aa8100b0b22
(svn r815) Include strings.h only in the files which need it.
tron
parents:
340
diff
changeset
|
12 |
#include "table/strings.h" |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
13 |
#include "waypoint.h" |
0 | 14 |
#include "command.h" |
15 |
#include "station.h" |
|
16 |
#include "player.h" |
|
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
17 |
#include "news.h" |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
18 |
#include "saveload.h" |
1752
cdbfb2f23e72
(svn r2256) - Fix: Trains cannot find a depot when they are in a tunnel. (glx)
matthijs
parents:
1751
diff
changeset
|
19 |
#include "vehicle_gui.h" |
6655
951b0ba32eb1
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6589
diff
changeset
|
20 |
#include "cargotype.h" |
7545
9a4834d48970
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7476
diff
changeset
|
21 |
#include "strings.h" |
8179
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
22 |
#include "aircraft.h" |
0 | 23 |
|
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
24 |
DEFINE_OLD_POOL_GENERIC(Order, Order) |
1314
d6a253cf92c3
(svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents:
1297
diff
changeset
|
25 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
26 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
27 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
28 |
* Unpacks a order from savegames made with TTD(Patch) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
29 |
* |
0 | 30 |
*/ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
31 |
Order UnpackOldOrder(uint16 packed) |
0 | 32 |
{ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
33 |
Order order; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
34 |
order.type = (OrderType)GB(packed, 0, 4); |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
35 |
order.flags = GB(packed, 4, 4); |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
36 |
order.dest = GB(packed, 8, 8); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
37 |
order.next = NULL; |
0 | 38 |
|
4780
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
39 |
order.refit_cargo = CT_NO_REFIT; |
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
40 |
order.refit_subtype = 0; |
7476
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
41 |
order.wait_time = 0; |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
42 |
order.travel_time = 0; |
4780
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
43 |
order.index = 0; // avoid compiler warning |
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
44 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
45 |
// Sanity check |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
46 |
// TTD stores invalid orders as OT_NOTHING with non-zero flags/station |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
47 |
if (!order.IsValid() && (order.flags != 0 || order.dest != 0)) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
48 |
order.type = OT_DUMMY; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
49 |
order.flags = 0; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
50 |
} |
0 | 51 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
52 |
return order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
53 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
54 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
55 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
56 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
57 |
* Unpacks a order from savegames with version 4 and lower |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
58 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
59 |
*/ |
2817 | 60 |
static Order UnpackVersion4Order(uint16 packed) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
61 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
62 |
Order order; |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
63 |
order.type = (OrderType)GB(packed, 0, 4); |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
64 |
order.flags = GB(packed, 4, 4); |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
65 |
order.dest = GB(packed, 8, 8); |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
66 |
order.next = NULL; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
67 |
order.index = 0; // avoid compiler warning |
4780
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
68 |
order.refit_cargo = CT_NO_REFIT; |
4715 | 69 |
order.refit_subtype = 0; |
7476
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
70 |
order.wait_time = 0; |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
71 |
order.travel_time = 0; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
72 |
return order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
73 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
74 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
75 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
76 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
77 |
* Updates the widgets of a vehicle which contains the order-data |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
78 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
79 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
80 |
void InvalidateVehicleOrder(const Vehicle *v) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
81 |
{ |
7476
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
82 |
InvalidateWindow(WC_VEHICLE_VIEW, v->index); |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
83 |
InvalidateWindow(WC_VEHICLE_ORDERS, v->index); |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
84 |
InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
85 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
86 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
87 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
88 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
89 |
* Swap two orders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
90 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
91 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
92 |
static void SwapOrders(Order *order1, Order *order2) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
93 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
94 |
Order temp_order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
95 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
96 |
temp_order = *order1; |
1043
123072ba6ced
(svn r1544) -Fix: SwapOrder did not use AssignOrder, which caused the saveroutine to
truelight
parents:
1024
diff
changeset
|
97 |
AssignOrder(order1, *order2); |
123072ba6ced
(svn r1544) -Fix: SwapOrder did not use AssignOrder, which caused the saveroutine to
truelight
parents:
1024
diff
changeset
|
98 |
order1->next = order2->next; |
123072ba6ced
(svn r1544) -Fix: SwapOrder did not use AssignOrder, which caused the saveroutine to
truelight
parents:
1024
diff
changeset
|
99 |
AssignOrder(order2, temp_order); |
123072ba6ced
(svn r1544) -Fix: SwapOrder did not use AssignOrder, which caused the saveroutine to
truelight
parents:
1024
diff
changeset
|
100 |
order2->next = temp_order.next; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
101 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
102 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
103 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
104 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
105 |
* Assign data to an order (from an other order) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
106 |
* This function makes sure that the index is maintained correctly |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
107 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
108 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
109 |
void AssignOrder(Order *order, Order data) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
110 |
{ |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
111 |
order->type = data.type; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
112 |
order->flags = data.flags; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
113 |
order->dest = data.dest; |
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
114 |
|
4780
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
115 |
order->refit_cargo = data.refit_cargo; |
fe1f661dfa86
(svn r6694) -Fix: FS#361 Refit-to Order bug (only one of the two bugs mentioned there)
bjarni
parents:
4735
diff
changeset
|
116 |
order->refit_subtype = data.refit_subtype; |
7476
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
117 |
|
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
118 |
order->wait_time = data.wait_time; |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
119 |
order->travel_time = data.travel_time; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
120 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
121 |
|
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
122 |
|
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
123 |
/** |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
124 |
* Delete all news items regarding defective orders about a vehicle |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
125 |
* This could kill still valid warnings (for example about void order when just |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
126 |
* another order gets added), but assume the player will notice the problems, |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
127 |
* when (s)he's changing the orders. |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
128 |
*/ |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
129 |
static void DeleteOrderWarnings(const Vehicle* v) |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
130 |
{ |
6206
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6173
diff
changeset
|
131 |
DeleteVehicleNews(v->index, STR_TRAIN_HAS_TOO_FEW_ORDERS + v->type * 4); |
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6173
diff
changeset
|
132 |
DeleteVehicleNews(v->index, STR_TRAIN_HAS_VOID_ORDER + v->type * 4); |
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6173
diff
changeset
|
133 |
DeleteVehicleNews(v->index, STR_TRAIN_HAS_DUPLICATE_ENTRY + v->type * 4); |
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6173
diff
changeset
|
134 |
DeleteVehicleNews(v->index, STR_TRAIN_HAS_INVALID_ENTRY + v->type * 4); |
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
135 |
} |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
136 |
|
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
137 |
|
6397 | 138 |
static TileIndex GetOrderLocation(const Order& o) |
139 |
{ |
|
140 |
switch (o.type) { |
|
141 |
default: NOT_REACHED(); |
|
142 |
case OT_GOTO_STATION: return GetStation(o.dest)->xy; |
|
143 |
case OT_GOTO_DEPOT: return GetDepot(o.dest)->xy; |
|
144 |
} |
|
145 |
} |
|
146 |
||
147 |
||
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
148 |
/** Add an order to the orderlist of a vehicle. |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3222
diff
changeset
|
149 |
* @param tile unused |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
150 |
* @param flags operation to perform |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
151 |
* @param p1 various bitstuffed elements |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
152 |
* - p1 = (bit 0 - 15) - ID of the vehicle |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
153 |
* - p1 = (bit 16 - 31) - the selected order (if any). If the last order is given, |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
154 |
* the order will be inserted before that one |
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
155 |
* only the first 8 bits used currently (bit 16 - 23) (max 255) |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
156 |
* @param p2 packed order to insert |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
157 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
158 |
CommandCost CmdInsertOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
159 |
{ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
160 |
Vehicle *v; |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
161 |
VehicleID veh = GB(p1, 0, 16); |
4391
7bfd170bfdf5
(svn r6144) -Codechange: renamed OrderID to VehicleOrderID, because it had nothing to do
truelight
parents:
4389
diff
changeset
|
162 |
VehicleOrderID sel_ord = GB(p1, 16, 16); |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
163 |
Order new_order = UnpackOrder(p2); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
164 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
165 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
166 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
167 |
v = GetVehicle(veh); |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
168 |
|
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
169 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
170 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
171 |
/* Check if the inserted order is to the correct destination (owner, type), |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
172 |
* and has the correct flags if any */ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
173 |
switch (new_order.type) { |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
174 |
case OT_GOTO_STATION: { |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
175 |
const Station *st; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
176 |
|
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
177 |
if (!IsValidStationID(new_order.dest)) return CMD_ERROR; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
178 |
st = GetStation(new_order.dest); |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
179 |
|
6391 | 180 |
if (st->owner != OWNER_NONE && !CheckOwnership(st->owner)) { |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
181 |
return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
182 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
183 |
|
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
184 |
switch (v->type) { |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
185 |
case VEH_TRAIN: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
186 |
if (!(st->facilities & FACIL_TRAIN)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
187 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
188 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
189 |
case VEH_ROAD: |
6655
951b0ba32eb1
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6589
diff
changeset
|
190 |
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
191 |
if (!(st->facilities & FACIL_BUS_STOP)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
192 |
} else { |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
193 |
if (!(st->facilities & FACIL_TRUCK_STOP)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
194 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
195 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
196 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
197 |
case VEH_SHIP: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
198 |
if (!(st->facilities & FACIL_DOCK)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
199 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
200 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
201 |
case VEH_AIRCRAFT: |
8179
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
202 |
if (!(st->facilities & FACIL_AIRPORT) || !CanAircraftUseStation(v->engine_type, st)) { |
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
203 |
return CMD_ERROR; |
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
204 |
} |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
205 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
206 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
207 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
208 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
209 |
|
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
210 |
/* Order flags can be any of the following for stations: |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
211 |
* [full-load | unload] [+ transfer] [+ non-stop] |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
212 |
* non-stop orders (if any) are only valid for trains */ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
213 |
switch (new_order.flags) { |
2639 | 214 |
case 0: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
215 |
case OF_FULL_LOAD: |
2639 | 216 |
case OF_FULL_LOAD | OF_TRANSFER: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
217 |
case OF_UNLOAD: |
2639 | 218 |
case OF_UNLOAD | OF_TRANSFER: |
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
219 |
case OF_TRANSFER: |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
220 |
break; |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
221 |
|
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
222 |
case OF_NON_STOP: |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
223 |
case OF_NON_STOP | OF_FULL_LOAD: |
2639 | 224 |
case OF_NON_STOP | OF_FULL_LOAD | OF_TRANSFER: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
225 |
case OF_NON_STOP | OF_UNLOAD: |
2639 | 226 |
case OF_NON_STOP | OF_UNLOAD | OF_TRANSFER: |
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
227 |
case OF_NON_STOP | OF_TRANSFER: |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
228 |
if (v->type != VEH_TRAIN) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
229 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
230 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
231 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
232 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
233 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
234 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
235 |
|
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
236 |
case OT_GOTO_DEPOT: { |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
237 |
if (v->type == VEH_AIRCRAFT) { |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
238 |
const Station* st; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
239 |
|
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
240 |
if (!IsValidStationID(new_order.dest)) return CMD_ERROR; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
241 |
st = GetStation(new_order.dest); |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
242 |
|
6357 | 243 |
if (!CheckOwnership(st->owner) || |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
244 |
!(st->facilities & FACIL_AIRPORT) || |
8179
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
245 |
st->Airport()->nof_depots == 0 || |
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
246 |
!CanAircraftUseStation(v->engine_type, st)) { |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
247 |
return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
248 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
249 |
} else { |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
250 |
const Depot* dp; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
251 |
|
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
252 |
if (!IsValidDepotID(new_order.dest)) return CMD_ERROR; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
253 |
dp = GetDepot(new_order.dest); |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
254 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
255 |
if (!CheckOwnership(GetTileOwner(dp->xy))) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
256 |
|
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
257 |
switch (v->type) { |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
258 |
case VEH_TRAIN: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
259 |
if (!IsTileDepotType(dp->xy, TRANSPORT_RAIL)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
260 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
261 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
262 |
case VEH_ROAD: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
263 |
if (!IsTileDepotType(dp->xy, TRANSPORT_ROAD)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
264 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
265 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
266 |
case VEH_SHIP: |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
267 |
if (!IsTileDepotType(dp->xy, TRANSPORT_WATER)) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
268 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
269 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
270 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
271 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
272 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
273 |
|
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
274 |
/* Order flags can be any of the following for depots: |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
275 |
* order [+ halt] [+ non-stop] |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
276 |
* non-stop orders (if any) are only valid for trains */ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
277 |
switch (new_order.flags) { |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
278 |
case OF_PART_OF_ORDERS: |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
279 |
case OF_PART_OF_ORDERS | OF_HALT_IN_DEPOT: |
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
280 |
break; |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
281 |
|
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
282 |
case OF_NON_STOP | OF_PART_OF_ORDERS: |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
283 |
case OF_NON_STOP | OF_PART_OF_ORDERS | OF_HALT_IN_DEPOT: |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
284 |
if (v->type != VEH_TRAIN) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
285 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
286 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
287 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
288 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
289 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
290 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
291 |
|
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
292 |
case OT_GOTO_WAYPOINT: { |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
293 |
const Waypoint* wp; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
294 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
295 |
if (v->type != VEH_TRAIN) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
296 |
|
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
297 |
if (!IsValidWaypointID(new_order.dest)) return CMD_ERROR; |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
298 |
wp = GetWaypoint(new_order.dest); |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
299 |
|
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
300 |
if (!CheckOwnership(GetTileOwner(wp->xy))) return CMD_ERROR; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
301 |
|
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
302 |
/* Order flags can be any of the following for waypoints: |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
303 |
* [non-stop] |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
304 |
* non-stop orders (if any) are only valid for trains */ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
305 |
switch (new_order.flags) { |
2433
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
306 |
case 0: break; |
5f55c796b85b
(svn r2959) - Fix: [ 1266036 ] Fix [ 1236317 ] Vehicles with and TRANSFER order don't have that order restored (i_dachev). Also disallow non-train type vehicles to have non-stop orders.
Darkvater
parents:
2295
diff
changeset
|
307 |
|
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
308 |
case OF_NON_STOP: |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
309 |
if (v->type != VEH_TRAIN) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
310 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
311 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
312 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
313 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
314 |
break; |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
315 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
316 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
317 |
default: return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
318 |
} |
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
319 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
320 |
if (sel_ord > v->num_orders) return CMD_ERROR; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
321 |
|
6173 | 322 |
if (!HasOrderPoolFree(1)) return_cmd_error(STR_8831_NO_MORE_SPACE_FOR_ORDERS); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
323 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
324 |
if (v->type == VEH_SHIP && |
6397 | 325 |
IsHumanPlayer(v->owner) && |
326 |
!_patches.new_pathfinding_all) { |
|
327 |
// Make sure the new destination is not too far away from the previous |
|
328 |
const Order *prev = NULL; |
|
329 |
uint n = 0; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
330 |
|
6397 | 331 |
/* Find the last goto station or depot order before the insert location. |
332 |
* If the order is to be inserted at the beginning of the order list this |
|
333 |
* finds the last order in the list. */ |
|
334 |
for (const Order *o = v->orders; o != NULL; o = o->next) { |
|
335 |
if (o->type == OT_GOTO_STATION || o->type == OT_GOTO_DEPOT) prev = o; |
|
336 |
if (++n == sel_ord && prev != NULL) break; |
|
337 |
} |
|
338 |
if (prev != NULL) { |
|
339 |
uint dist = DistanceManhattan( |
|
340 |
GetOrderLocation(*prev), |
|
341 |
GetOrderLocation(new_order) |
|
342 |
); |
|
343 |
if (dist >= 130) { |
|
344 |
return_cmd_error(STR_0210_TOO_FAR_FROM_PREVIOUS_DESTINATIO); |
|
345 |
} |
|
346 |
} |
|
0 | 347 |
} |
348 |
||
349 |
if (flags & DC_EXEC) { |
|
350 |
Vehicle *u; |
|
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
351 |
Order *new_o = new Order(); |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
352 |
AssignOrder(new_o, new_order); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
353 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
354 |
/* Create new order and link in list */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
355 |
if (v->orders == NULL) { |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
356 |
v->orders = new_o; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
357 |
} else { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
358 |
/* Try to get the previous item (we are inserting above the |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
359 |
selected) */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
360 |
Order *order = GetVehicleOrder(v, sel_ord - 1); |
0 | 361 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
362 |
if (order == NULL && GetVehicleOrder(v, sel_ord) != NULL) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
363 |
/* There is no previous item, so we are altering v->orders itself |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
364 |
But because the orders can be shared, we copy the info over |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
365 |
the v->orders, so we don't have to change the pointers of |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
366 |
all vehicles */ |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
367 |
SwapOrders(v->orders, new_o); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
368 |
/* Now update the next pointers */ |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
369 |
v->orders->next = new_o; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
370 |
} else if (order == NULL) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
371 |
/* 'sel' is a non-existing order, add him to the end */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
372 |
order = GetLastVehicleOrder(v); |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
373 |
order->next = new_o; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
374 |
} else { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
375 |
/* Put the new order in between */ |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
376 |
new_o->next = order->next; |
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
377 |
order->next = new_o; |
0 | 378 |
} |
379 |
} |
|
588 | 380 |
|
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
381 |
u = GetFirstVehicleFromSharedList(v); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
382 |
DeleteOrderWarnings(u); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
383 |
for (; u != NULL; u = u->next_shared) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
384 |
/* Increase amount of orders */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
385 |
u->num_orders++; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
386 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
387 |
/* If the orderlist was empty, assign it */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
388 |
if (u->orders == NULL) u->orders = v->orders; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
389 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
390 |
assert(v->orders == u->orders); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
391 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
392 |
/* If there is added an order before the current one, we need |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
393 |
to update the selected order */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
394 |
if (sel_ord <= u->cur_order_index) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
395 |
uint cur = u->cur_order_index + 1; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
396 |
/* Check if we don't go out of bound */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
397 |
if (cur < u->num_orders) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
398 |
u->cur_order_index = cur; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
399 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
400 |
/* Update any possible open window of the vehicle */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
401 |
InvalidateVehicleOrder(u); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
402 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
403 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
404 |
/* Make sure to rebuild the whole list */ |
588 | 405 |
RebuildVehicleLists(); |
0 | 406 |
} |
407 |
||
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
408 |
return CommandCost(); |
0 | 409 |
} |
410 |
||
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
411 |
/** Declone an order-list |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
412 |
* @param *dst delete the orders of this vehicle |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
413 |
* @param flags execution flags |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
414 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
415 |
static CommandCost DecloneOrder(Vehicle *dst, uint32 flags) |
0 | 416 |
{ |
417 |
if (flags & DC_EXEC) { |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
418 |
DeleteVehicleOrders(dst); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
419 |
InvalidateVehicleOrder(dst); |
588 | 420 |
RebuildVehicleLists(); |
0 | 421 |
} |
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
422 |
return CommandCost(); |
0 | 423 |
} |
424 |
||
6662
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
425 |
/** |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
426 |
* Remove the VehicleList that shows all the vehicles with the same shared |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
427 |
* orders. |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
428 |
*/ |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
429 |
static void RemoveSharedOrderVehicleList(Vehicle *v) |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
430 |
{ |
6696
3c2120d41b22
(svn r9429) -Fix r9338: when deleting a vehicle which has shared orders with one more vehicle and no orders, segfaulted
truelight
parents:
6677
diff
changeset
|
431 |
assert(v->orders != NULL); |
6662
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
432 |
WindowClass window_class = WC_NONE; |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
433 |
|
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
434 |
switch (v->type) { |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
435 |
default: NOT_REACHED(); |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
436 |
case VEH_TRAIN: window_class = WC_TRAINS_LIST; break; |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
437 |
case VEH_ROAD: window_class = WC_ROADVEH_LIST; break; |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
438 |
case VEH_SHIP: window_class = WC_SHIPS_LIST; break; |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
439 |
case VEH_AIRCRAFT: window_class = WC_AIRCRAFT_LIST; break; |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
440 |
} |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
441 |
DeleteWindowById(window_class, (v->orders->index << 16) | (v->type << 11) | VLW_SHARED_ORDERS | v->owner); |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
442 |
} |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
443 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
444 |
/** Delete an order from the orderlist of a vehicle. |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3222
diff
changeset
|
445 |
* @param tile unused |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
446 |
* @param flags operation to perform |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
447 |
* @param p1 the ID of the vehicle |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
448 |
* @param p2 the order to delete (max 255) |
0 | 449 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
450 |
CommandCost CmdDeleteOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 451 |
{ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
452 |
Vehicle *v, *u; |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
453 |
VehicleID veh_id = p1; |
4391
7bfd170bfdf5
(svn r6144) -Codechange: renamed OrderID to VehicleOrderID, because it had nothing to do
truelight
parents:
4389
diff
changeset
|
454 |
VehicleOrderID sel_ord = p2; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
455 |
Order *order; |
0 | 456 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
457 |
if (!IsValidVehicleID(veh_id)) return CMD_ERROR; |
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
458 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
459 |
v = GetVehicle(veh_id); |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
460 |
|
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
461 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
462 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
463 |
/* If we did not select an order, we maybe want to de-clone the orders */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
464 |
if (sel_ord >= v->num_orders) |
0 | 465 |
return DecloneOrder(v, flags); |
466 |
||
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
467 |
order = GetVehicleOrder(v, sel_ord); |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
468 |
if (order == NULL) return CMD_ERROR; |
0 | 469 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
470 |
if (flags & DC_EXEC) { |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
471 |
if (GetVehicleOrder(v, sel_ord - 1) == NULL) { |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
472 |
if (GetVehicleOrder(v, sel_ord + 1) != NULL) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
473 |
/* First item, but not the last, so we need to alter v->orders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
474 |
Because we can have shared order, we copy the data |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
475 |
from the next item over the deleted */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
476 |
order = GetVehicleOrder(v, sel_ord + 1); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
477 |
SwapOrders(v->orders, order); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
478 |
} else { |
6662
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
479 |
/* XXX -- The system currently can't handle a shared-order vehicle list |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
480 |
* open when there aren't any orders in the list, so close the window |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
481 |
* in this case. Of course it needs a better fix later */ |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
482 |
RemoveSharedOrderVehicleList(v); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
483 |
/* Last item, so clean the list */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
484 |
v->orders = NULL; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
485 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
486 |
} else { |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
487 |
GetVehicleOrder(v, sel_ord - 1)->next = order->next; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
488 |
} |
0 | 489 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
490 |
/* Give the item free */ |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
491 |
order->Free(); |
0 | 492 |
|
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
493 |
u = GetFirstVehicleFromSharedList(v); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
494 |
DeleteOrderWarnings(u); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
495 |
for (; u != NULL; u = u->next_shared) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
496 |
u->num_orders--; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
497 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
498 |
if (sel_ord < u->cur_order_index) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
499 |
u->cur_order_index--; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
500 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
501 |
/* If we removed the last order, make sure the shared vehicles |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
502 |
* also set their orders to NULL */ |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
503 |
if (v->orders == NULL) u->orders = NULL; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
504 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
505 |
assert(v->orders == u->orders); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
506 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
507 |
/* NON-stop flag is misused to see if a train is in a station that is |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
508 |
* on his order list or not */ |
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
509 |
if (sel_ord == u->cur_order_index && u->current_order.type == OT_LOADING && |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
8316
diff
changeset
|
510 |
HasBit(u->current_order.flags, OFB_NON_STOP)) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
511 |
u->current_order.flags = 0; |
0 | 512 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
513 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
514 |
/* Update any possible open window of the vehicle */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
515 |
InvalidateVehicleOrder(u); |
0 | 516 |
} |
588 | 517 |
|
518 |
RebuildVehicleLists(); |
|
0 | 519 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
520 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
521 |
return CommandCost(); |
0 | 522 |
} |
523 |
||
7290
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
524 |
/** Goto order of order-list. |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3222
diff
changeset
|
525 |
* @param tile unused |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
526 |
* @param flags operation to perform |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
527 |
* @param p1 The ID of the vehicle which order is skipped |
7290
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
528 |
* @param p2 the selected order to which we want to skip |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
529 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
530 |
CommandCost CmdSkipToOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 531 |
{ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
532 |
Vehicle *v; |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
533 |
VehicleID veh_id = p1; |
7290
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
534 |
VehicleOrderID sel_ord = p2; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
535 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
536 |
if (!IsValidVehicleID(veh_id)) return CMD_ERROR; |
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
537 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
538 |
v = GetVehicle(veh_id); |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
539 |
|
7290
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
540 |
if (!CheckOwnership(v->owner) || sel_ord == v->cur_order_index || |
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
541 |
sel_ord >= v->num_orders || v->num_orders < 2) return CMD_ERROR; |
1020
1223cd937174
(svn r1521) -Fix: Ship Vehicle Lists are now redrawn correctly
celestar
parents:
919
diff
changeset
|
542 |
|
0 | 543 |
if (flags & DC_EXEC) { |
7290
647d6416cdfe
(svn r10033) -Feature [FS#760]: skip to the selected order in the order list when clicking on the "skip" button while pressing CTRL.
rubidium
parents:
7134
diff
changeset
|
544 |
v->cur_order_index = sel_ord; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
545 |
|
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
546 |
if (v->type == VEH_ROAD) ClearSlot(v); |
0 | 547 |
|
7108
7ff0e571c766
(svn r9832) -Fix: leave the station when manually skipping to the next order and we are currently (un)loading.
rubidium
parents:
7069
diff
changeset
|
548 |
if (v->current_order.type == OT_LOADING) { |
7ff0e571c766
(svn r9832) -Fix: leave the station when manually skipping to the next order and we are currently (un)loading.
rubidium
parents:
7069
diff
changeset
|
549 |
v->LeaveStation(); |
7ff0e571c766
(svn r9832) -Fix: leave the station when manually skipping to the next order and we are currently (un)loading.
rubidium
parents:
7069
diff
changeset
|
550 |
/* NON-stop flag is misused to see if a train is in a station that is |
7ff0e571c766
(svn r9832) -Fix: leave the station when manually skipping to the next order and we are currently (un)loading.
rubidium
parents:
7069
diff
changeset
|
551 |
* on his order list or not */ |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
8316
diff
changeset
|
552 |
if (HasBit(v->current_order.flags, OFB_NON_STOP)) v->current_order.flags = 0; |
7108
7ff0e571c766
(svn r9832) -Fix: leave the station when manually skipping to the next order and we are currently (un)loading.
rubidium
parents:
7069
diff
changeset
|
553 |
} |
0 | 554 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
555 |
InvalidateVehicleOrder(v); |
0 | 556 |
} |
1020
1223cd937174
(svn r1521) -Fix: Ship Vehicle Lists are now redrawn correctly
celestar
parents:
919
diff
changeset
|
557 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
558 |
/* We have an aircraft/ship, they have a mini-schedule, so update them all */ |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
559 |
if (v->type == VEH_AIRCRAFT) InvalidateWindowClasses(WC_AIRCRAFT_LIST); |
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
560 |
if (v->type == VEH_SHIP) InvalidateWindowClasses(WC_SHIPS_LIST); |
1020
1223cd937174
(svn r1521) -Fix: Ship Vehicle Lists are now redrawn correctly
celestar
parents:
919
diff
changeset
|
561 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
562 |
return CommandCost(); |
0 | 563 |
} |
564 |
||
7328
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
565 |
/** |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
566 |
* Move an order inside the orderlist |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
567 |
* @param tile unused |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
568 |
* @param p1 the ID of the vehicle |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
569 |
* @param p2 order to move and target |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
570 |
* bit 0-15 : the order to move |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
571 |
* bit 16-31 : the target order |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
572 |
* @note The target order will move one place down in the orderlist |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
573 |
* if you move the order upwards else it'll move it one place down |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
574 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
575 |
CommandCost CmdMoveOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
7328
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
576 |
{ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
577 |
VehicleID veh = p1; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
578 |
VehicleOrderID moving_order = GB(p2, 0, 16); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
579 |
VehicleOrderID target_order = GB(p2, 16, 16); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
580 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
581 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
582 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
583 |
Vehicle *v = GetVehicle(veh); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
584 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
585 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
586 |
/* Don't make senseless movements */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
587 |
if (moving_order >= v->num_orders || target_order >= v->num_orders || |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
588 |
moving_order == target_order || v->num_orders <= 1) |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
589 |
return CMD_ERROR; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
590 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
591 |
Order *moving_one = GetVehicleOrder(v, moving_order); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
592 |
/* Don't move an empty order */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
593 |
if (moving_one == NULL) return CMD_ERROR; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
594 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
595 |
if (flags & DC_EXEC) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
596 |
/* Take the moving order out of the pointer-chain */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
597 |
Order *one_before = GetVehicleOrder(v, moving_order - 1); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
598 |
Order *one_past = GetVehicleOrder(v, moving_order + 1); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
599 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
600 |
if (one_before == NULL) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
601 |
/* First order edit */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
602 |
v->orders = moving_one->next; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
603 |
} else { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
604 |
one_before->next = moving_one->next; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
605 |
} |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
606 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
607 |
/* Insert the moving_order again in the pointer-chain */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
608 |
one_before = GetVehicleOrder(v, target_order - 1); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
609 |
one_past = GetVehicleOrder(v, target_order); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
610 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
611 |
moving_one->next = one_past; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
612 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
613 |
if (one_before == NULL) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
614 |
/* first order edit */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
615 |
SwapOrders(v->orders, moving_one); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
616 |
v->orders->next = moving_one; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
617 |
} else { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
618 |
one_before->next = moving_one; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
619 |
} |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
620 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
621 |
/* Update shared list */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
622 |
Vehicle *u = GetFirstVehicleFromSharedList(v); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
623 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
624 |
DeleteOrderWarnings(u); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
625 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
626 |
for (; u != NULL; u = u->next_shared) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
627 |
/* Update the first order */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
628 |
if (u->orders != v->orders) u->orders = v->orders; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
629 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
630 |
/* Update the current order */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
631 |
if (u->cur_order_index == moving_order) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
632 |
u->cur_order_index = target_order; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
633 |
} else if(u->cur_order_index > moving_order && u->cur_order_index <= target_order) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
634 |
u->cur_order_index--; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
635 |
} else if(u->cur_order_index < moving_order && u->cur_order_index >= target_order) { |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
636 |
u->cur_order_index++; |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
637 |
} |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
638 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
639 |
assert(v->orders == u->orders); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
640 |
/* Update any possible open window of the vehicle */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
641 |
InvalidateVehicleOrder(u); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
642 |
} |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
643 |
|
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
644 |
/* Make sure to rebuild the whole list */ |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
645 |
RebuildVehicleLists(); |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
646 |
} |
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
647 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
648 |
return CommandCost(); |
7328
8ac64204c17f
(svn r10071) -Feature [FS#828]: moving of orders (skidd13).
rubidium
parents:
7290
diff
changeset
|
649 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
650 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
651 |
/** Modify an order in the orderlist of a vehicle. |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3222
diff
changeset
|
652 |
* @param tile unused |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
653 |
* @param flags operation to perform |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
654 |
* @param p1 various bitstuffed elements |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
655 |
* - p1 = (bit 0 - 15) - ID of the vehicle |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
656 |
* - p1 = (bit 16 - 31) - the selected order (if any). If the last order is given, |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
657 |
* the order will be inserted before that one |
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
658 |
* only the first 8 bits used currently (bit 16 - 23) (max 255) |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
659 |
* @param p2 mode to change the order to (always set) |
0 | 660 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
661 |
CommandCost CmdModifyOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 662 |
{ |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
663 |
Vehicle *v; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
664 |
Order *order; |
4391
7bfd170bfdf5
(svn r6144) -Codechange: renamed OrderID to VehicleOrderID, because it had nothing to do
truelight
parents:
4389
diff
changeset
|
665 |
VehicleOrderID sel_ord = GB(p1, 16, 16); // XXX - automatically truncated to 8 bits. |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
666 |
VehicleID veh = GB(p1, 0, 16); |
0 | 667 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
668 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
1935
f43f062c9498
(svn r2441) -Feature: You can now give transfer order to set up feeder systems
celestar
parents:
1891
diff
changeset
|
669 |
if (p2 != OFB_FULL_LOAD && p2 != OFB_UNLOAD && p2 != OFB_NON_STOP && p2 != OFB_TRANSFER) return CMD_ERROR; |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
670 |
|
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
671 |
v = GetVehicle(veh); |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
672 |
|
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
673 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
674 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
675 |
/* Is it a valid order? */ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
676 |
if (sel_ord >= v->num_orders) return CMD_ERROR; |
0 | 677 |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
678 |
order = GetVehicleOrder(v, sel_ord); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
679 |
if (order->type != OT_GOTO_STATION && |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
680 |
(order->type != OT_GOTO_DEPOT || p2 == OFB_UNLOAD) && |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
681 |
(order->type != OT_GOTO_WAYPOINT || p2 != OFB_NON_STOP)) { |
0 | 682 |
return CMD_ERROR; |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
683 |
} |
0 | 684 |
|
685 |
if (flags & DC_EXEC) { |
|
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
686 |
switch (p2) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
687 |
case OFB_FULL_LOAD: |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8425
diff
changeset
|
688 |
ToggleBit(order->flags, OFB_FULL_LOAD); |
8425
72a71d480c5f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
8424
diff
changeset
|
689 |
if (order->type != OT_GOTO_DEPOT) ClrBit(order->flags, OFB_UNLOAD); |
0 | 690 |
break; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
691 |
case OFB_UNLOAD: |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8425
diff
changeset
|
692 |
ToggleBit(order->flags, OFB_UNLOAD); |
8425
72a71d480c5f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
8424
diff
changeset
|
693 |
ClrBit(order->flags, OFB_FULL_LOAD); |
0 | 694 |
break; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
695 |
case OFB_NON_STOP: |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8425
diff
changeset
|
696 |
ToggleBit(order->flags, OFB_NON_STOP); |
0 | 697 |
break; |
1935
f43f062c9498
(svn r2441) -Feature: You can now give transfer order to set up feeder systems
celestar
parents:
1891
diff
changeset
|
698 |
case OFB_TRANSFER: |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8425
diff
changeset
|
699 |
ToggleBit(order->flags, OFB_TRANSFER); |
1935
f43f062c9498
(svn r2441) -Feature: You can now give transfer order to set up feeder systems
celestar
parents:
1891
diff
changeset
|
700 |
break; |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
701 |
default: NOT_REACHED(); |
0 | 702 |
} |
703 |
||
1760
0aaab0007731
(svn r2264) - Fix: [ 1060686 1187655 ] Changing the full-load flag on the current order doesn't take effect immediately. (glx)
matthijs
parents:
1752
diff
changeset
|
704 |
/* Update the windows and full load flags, also for vehicles that share the same order list */ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
705 |
{ |
2989 | 706 |
Vehicle* u; |
707 |
||
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
708 |
u = GetFirstVehicleFromSharedList(v); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
709 |
DeleteOrderWarnings(u); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
710 |
for (; u != NULL; u = u->next_shared) { |
5562
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
711 |
/* Toggle u->current_order "Full load" flag if it changed. |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
712 |
* However, as the same flag is used for depot orders, check |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
713 |
* whether we are not going to a depot as there are three |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
714 |
* cases where the full load flag can be active and only |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
715 |
* one case where the flag is used for depot orders. In the |
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
716 |
* other cases for the OrderTypeByte the flags are not used, |
5562
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
717 |
* so do not care and those orders should not be active |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
718 |
* when this function is called. |
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
719 |
*/ |
1786
a54634efeb98
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1760
diff
changeset
|
720 |
if (sel_ord == u->cur_order_index && |
5562
6ad177b6c9ff
(svn r7559) -Fix (FS#456): clicking the 'Full Load' button when the 'current' order is selected in the Order GUI and one has instructed the train to go to the depot, via the button in the Train View GUI, changed the depot order by switching from 'service at depot' to 'stop at depot' and vice versa.
rubidium
parents:
5216
diff
changeset
|
721 |
u->current_order.type != OT_GOTO_DEPOT && |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
8316
diff
changeset
|
722 |
HasBit(u->current_order.flags, OFB_FULL_LOAD) != HasBit(order->flags, OFB_FULL_LOAD)) { |
8428
f8300c908bd9
(svn r11485) -Codechange: Remove the doubled function ToggleBitT and rename the remaining to fit with the naming style
skidd13
parents:
8425
diff
changeset
|
723 |
ToggleBit(u->current_order.flags, OFB_FULL_LOAD); |
2989 | 724 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
725 |
InvalidateVehicleOrder(u); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
726 |
} |
0 | 727 |
} |
728 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
729 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
730 |
return CommandCost(); |
0 | 731 |
} |
732 |
||
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
733 |
/** Clone/share/copy an order-list of an other vehicle. |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
734 |
* @param tile unused |
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
735 |
* @param flags operation to perform |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
736 |
* @param p1 various bitstuffed elements |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
737 |
* - p1 = (bit 0-15) - destination vehicle to clone orders to (p1 & 0xFFFF) |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
738 |
* - p1 = (bit 16-31) - source vehicle to clone orders from, if any (none for CO_UNSHARE) |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
739 |
* @param p2 mode of cloning: CO_SHARE, CO_COPY, or CO_UNSHARE |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
740 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
741 |
CommandCost CmdCloneOrder(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
742 |
{ |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
743 |
Vehicle *dst; |
2140
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
744 |
VehicleID veh_src = GB(p1, 16, 16); |
d708eb80ab8b
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2089
diff
changeset
|
745 |
VehicleID veh_dst = GB(p1, 0, 16); |
0 | 746 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
747 |
if (!IsValidVehicleID(veh_dst)) return CMD_ERROR; |
0 | 748 |
|
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
749 |
dst = GetVehicle(veh_dst); |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
750 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
751 |
if (!CheckOwnership(dst->owner)) return CMD_ERROR; |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
752 |
|
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
753 |
switch (p2) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
754 |
case CO_SHARE: { |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
755 |
Vehicle *src; |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
756 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
757 |
if (!IsValidVehicleID(veh_src)) return CMD_ERROR; |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
758 |
|
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
759 |
src = GetVehicle(veh_src); |
588 | 760 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
761 |
/* Sanity checks */ |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
762 |
if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
763 |
return CMD_ERROR; |
0 | 764 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
765 |
/* Trucks can't share orders with busses (and visa versa) */ |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
766 |
if (src->type == VEH_ROAD) { |
6655
951b0ba32eb1
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6589
diff
changeset
|
767 |
if (src->cargo_type != dst->cargo_type && (IsCargoInClass(src->cargo_type, CC_PASSENGERS) || IsCargoInClass(dst->cargo_type, CC_PASSENGERS))) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
768 |
return CMD_ERROR; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
769 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
770 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
771 |
/* Is the vehicle already in the shared list? */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
772 |
{ |
2989 | 773 |
const Vehicle* u; |
774 |
||
775 |
for (u = GetFirstVehicleFromSharedList(src); u != NULL; u = u->next_shared) { |
|
776 |
if (u == dst) return CMD_ERROR; |
|
29
b4bf7559cfa7
(svn r30) -Fix [1007272] Copy orders between bus/truck possible. You cannot share orders between busses/trucks. You can only copy orders if all the facilities in schedule allow both types to go there (Celestar)
darkvater
parents:
19
diff
changeset
|
777 |
} |
b4bf7559cfa7
(svn r30) -Fix [1007272] Copy orders between bus/truck possible. You cannot share orders between busses/trucks. You can only copy orders if all the facilities in schedule allow both types to go there (Celestar)
darkvater
parents:
19
diff
changeset
|
778 |
} |
0 | 779 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
780 |
if (flags & DC_EXEC) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
781 |
/* If the destination vehicle had a OrderList, destroy it */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
782 |
DeleteVehicleOrders(dst); |
0 | 783 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
784 |
dst->orders = src->orders; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
785 |
dst->num_orders = src->num_orders; |
588 | 786 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
787 |
/* Link this vehicle in the shared-list */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
788 |
dst->next_shared = src->next_shared; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
789 |
dst->prev_shared = src; |
2951 | 790 |
if (src->next_shared != NULL) src->next_shared->prev_shared = dst; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
791 |
src->next_shared = dst; |
0 | 792 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
793 |
InvalidateVehicleOrder(dst); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
794 |
InvalidateVehicleOrder(src); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
795 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
796 |
RebuildVehicleLists(); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
797 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
798 |
} break; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
799 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
800 |
case CO_COPY: { |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
801 |
Vehicle *src; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
802 |
int delta; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
803 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
804 |
if (!IsValidVehicleID(veh_src)) return CMD_ERROR; |
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
805 |
|
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
806 |
src = GetVehicle(veh_src); |
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
807 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
808 |
/* Sanity checks */ |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
809 |
if (!CheckOwnership(src->owner) || dst->type != src->type || dst == src) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
810 |
return CMD_ERROR; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
811 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
812 |
/* Trucks can't copy all the orders from busses (and visa versa) */ |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
813 |
if (src->type == VEH_ROAD) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
814 |
const Order *order; |
1297
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
815 |
TileIndex required_dst = INVALID_TILE; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
816 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
817 |
FOR_VEHICLE_ORDERS(src, order) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
818 |
if (order->type == OT_GOTO_STATION) { |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
819 |
const Station *st = GetStation(order->dest); |
6655
951b0ba32eb1
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6589
diff
changeset
|
820 |
if (IsCargoInClass(dst->cargo_type, CC_PASSENGERS)) { |
1297
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
821 |
if (st->bus_stops != NULL) required_dst = st->bus_stops->xy; |
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
822 |
} else { |
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
823 |
if (st->truck_stops != NULL) required_dst = st->truck_stops->xy; |
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
824 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
825 |
/* This station has not the correct road-bay, so we can't copy! */ |
1297
c828ac28760b
(svn r1801) -Fix [Multistop] Fixed a crash that occured when copying orders due to not checking a pointer to be non-NULL
celestar
parents:
1266
diff
changeset
|
826 |
if (required_dst == INVALID_TILE) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
827 |
return CMD_ERROR; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
828 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
829 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
830 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
831 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
832 |
/* make sure there are orders available */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
833 |
delta = IsOrderListShared(dst) ? src->num_orders + 1 : src->num_orders - dst->num_orders; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
834 |
if (!HasOrderPoolFree(delta)) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
835 |
return_cmd_error(STR_8831_NO_MORE_SPACE_FOR_ORDERS); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
836 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
837 |
if (flags & DC_EXEC) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
838 |
const Order *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
839 |
Order **order_dst; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
840 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
841 |
/* If the destination vehicle had a OrderList, destroy it */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
842 |
DeleteVehicleOrders(dst); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
843 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
844 |
order_dst = &dst->orders; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
845 |
FOR_VEHICLE_ORDERS(src, order) { |
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
846 |
*order_dst = new Order(); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
847 |
AssignOrder(*order_dst, *order); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
848 |
order_dst = &(*order_dst)->next; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
849 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
850 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
851 |
dst->num_orders = src->num_orders; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
852 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
853 |
InvalidateVehicleOrder(dst); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
854 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
855 |
RebuildVehicleLists(); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
856 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
857 |
} break; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
858 |
|
1793
8ac8a8c9ec0f
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1789
diff
changeset
|
859 |
case CO_UNSHARE: return DecloneOrder(dst, flags); |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
860 |
default: return CMD_ERROR; |
0 | 861 |
} |
862 |
||
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
863 |
return CommandCost(); |
0 | 864 |
} |
865 |
||
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
866 |
/** Add/remove refit orders from an order |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
867 |
* @param tile Not used |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
868 |
* @param flags operation to perform |
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
869 |
* @param p1 VehicleIndex of the vehicle having the order |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
870 |
* @param p2 bitmask |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
871 |
* - bit 0-7 CargoID |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
872 |
* - bit 8-15 Cargo subtype |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
873 |
* - bit 16-23 number of order to modify |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
874 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
875 |
CommandCost CmdOrderRefit(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
876 |
{ |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
877 |
const Vehicle *v; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
878 |
Order *order; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
879 |
VehicleID veh = GB(p1, 0, 16); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
880 |
VehicleOrderID order_number = GB(p2, 16, 8); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
881 |
CargoID cargo = GB(p2, 0, 8); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
882 |
byte subtype = GB(p2, 8, 8); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
883 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
884 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
885 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
886 |
v = GetVehicle(veh); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
887 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
888 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
889 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
890 |
order = GetVehicleOrder(v, order_number); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
891 |
if (order == NULL) return CMD_ERROR; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
892 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
893 |
if (flags & DC_EXEC) { |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
894 |
Vehicle *u; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
895 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
896 |
order->refit_cargo = cargo; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
897 |
order->refit_subtype = subtype; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
898 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
899 |
u = GetFirstVehicleFromSharedList(v); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
900 |
for (; u != NULL; u = u->next_shared) { |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
901 |
/* Update any possible open window of the vehicle */ |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
902 |
InvalidateVehicleOrder(u); |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
903 |
|
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
904 |
/* If the vehicle already got the current depot set as current order, then update current order as well */ |
8424
4a488a90ccab
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
8316
diff
changeset
|
905 |
if (u->cur_order_index == order_number && HasBit(u->current_order.flags, OFB_PART_OF_ORDERS)) { |
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
906 |
u->current_order.refit_cargo = cargo; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
907 |
u->current_order.refit_subtype = subtype; |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
908 |
} |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
909 |
} |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
910 |
} |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
911 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
912 |
return CommandCost(); |
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
913 |
} |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
914 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
915 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
916 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
917 |
* Backup a vehicle order-list, so you can replace a vehicle |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
918 |
* without loosing the order-list |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
919 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
920 |
*/ |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
921 |
void BackupVehicleOrders(const Vehicle *v, BackuppedOrders *bak) |
0 | 922 |
{ |
8149
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
923 |
/* Make sure we always have freed the stuff */ |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
924 |
free(bak->order); |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
925 |
bak->order = NULL; |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
926 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
927 |
/* Save general info */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
928 |
bak->orderindex = v->cur_order_index; |
0 | 929 |
bak->service_interval = v->service_interval; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
930 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
931 |
/* Safe custom string, if any */ |
4862
b45c1e638e7f
(svn r6788) - Codechange: Add and use a function to test if a string ID is a custom name.
peter1138
parents:
4845
diff
changeset
|
932 |
if (!IsCustomName(v->string_id)) { |
2639 | 933 |
bak->name[0] = '\0'; |
0 | 934 |
} else { |
7545
9a4834d48970
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7476
diff
changeset
|
935 |
SetDParam(0, v->index); |
9a4834d48970
(svn r10314) -Codechange: Refer to vehicle names by index
peter1138
parents:
7476
diff
changeset
|
936 |
GetString(bak->name, STR_VEHICLE_NAME, lastof(bak->name)); |
0 | 937 |
} |
938 |
||
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
939 |
/* If we have shared orders, store it on a special way */ |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
940 |
if (IsOrderListShared(v)) { |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
941 |
const Vehicle *u = (v->next_shared) ? v->next_shared : v->prev_shared; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
942 |
|
555
eec6c0294435
(svn r955) Replace uint16 for orders with struct Order
tron
parents:
543
diff
changeset
|
943 |
bak->clone = u->index; |
eec6c0294435
(svn r955) Replace uint16 for orders with struct Order
tron
parents:
543
diff
changeset
|
944 |
} else { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
945 |
/* Else copy the orders */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
946 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
947 |
/* We do not have shared orders */ |
555
eec6c0294435
(svn r955) Replace uint16 for orders with struct Order
tron
parents:
543
diff
changeset
|
948 |
bak->clone = INVALID_VEHICLE; |
eec6c0294435
(svn r955) Replace uint16 for orders with struct Order
tron
parents:
543
diff
changeset
|
949 |
|
8149
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
950 |
|
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
951 |
/* Count the number of orders */ |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
952 |
uint cnt = 0; |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
953 |
const Order *order; |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
954 |
FOR_VEHICLE_ORDERS(v, order) cnt++; |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
955 |
|
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
956 |
/* Allocate memory for the orders plus an end-of-orders marker */ |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
957 |
bak->order = MallocT<Order>(cnt + 1); |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
958 |
|
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
959 |
Order *dest = bak->order; |
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
960 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
961 |
/* Copy the orders */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
962 |
FOR_VEHICLE_ORDERS(v, order) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
963 |
*dest = *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
964 |
dest++; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
965 |
} |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
966 |
/* End the list with an empty order */ |
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
967 |
dest->Free(); |
0 | 968 |
} |
969 |
} |
|
970 |
||
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
971 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
972 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
973 |
* Restore vehicle orders that are backupped via BackupVehicleOrders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
974 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
975 |
*/ |
8149
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
976 |
void RestoreVehicleOrders(const Vehicle *v, const BackuppedOrders *bak) |
0 | 977 |
{ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
978 |
/* If we have a custom name, process that */ |
8149
eb78fb69096f
(svn r11184) -Codechange: cleanup the code related to backup orders.
rubidium
parents:
7897
diff
changeset
|
979 |
if (!StrEmpty(bak->name)) { |
1820
9b6458526480
(svn r2324) Introduce _cmd_text for passing strings with a command instead of abusing _decode_parameters as text buffer. This should prevent several possible buffer overruns and is a bit cleaner to use. As bonus it reduces the size of most command packets by 79 bytes.
tron
parents:
1796
diff
changeset
|
980 |
_cmd_text = bak->name; |
0 | 981 |
DoCommandP(0, v->index, 0, NULL, CMD_NAME_VEHICLE); |
982 |
} |
|
983 |
||
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
984 |
/* If we had shared orders, recover that */ |
555
eec6c0294435
(svn r955) Replace uint16 for orders with struct Order
tron
parents:
543
diff
changeset
|
985 |
if (bak->clone != INVALID_VEHICLE) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
986 |
DoCommandP(0, v->index | (bak->clone << 16), 0, NULL, CMD_CLONE_ORDER); |
8316
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
987 |
} else { |
0 | 988 |
|
8316
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
989 |
/* CMD_NO_TEST_IF_IN_NETWORK is used here, because CMD_INSERT_ORDER checks if the |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
990 |
* order number is one more than the current amount of orders, and because |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
991 |
* in network the commands are queued before send, the second insert always |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
992 |
* fails in test mode. By bypassing the test-mode, that no longer is a problem. */ |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
993 |
for (uint i = 0; bak->order[i].IsValid(); i++) { |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
994 |
if (!DoCommandP(0, v->index + (i << 16), PackOrder(&bak->order[i]), NULL, |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
995 |
CMD_INSERT_ORDER | CMD_NO_TEST_IF_IN_NETWORK)) |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
996 |
break; |
1dbc648c7c64
(svn r11370) -Fix [FS1384]: manually replacing a vehicle with shared orders makes it lose it's order index and service interval. Patch by jthill.
rubidium
parents:
8179
diff
changeset
|
997 |
} |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
998 |
} |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
999 |
|
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1000 |
/* Restore vehicle order-index and service interval */ |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1001 |
DoCommandP(0, v->index, bak->orderindex | (bak->service_interval << 16) , NULL, CMD_RESTORE_ORDER_INDEX); |
0 | 1002 |
} |
1003 |
||
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1004 |
/** Restore the current order-index of a vehicle and sets service-interval. |
3491
4c8427796c64
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3222
diff
changeset
|
1005 |
* @param tile unused |
6977
67b989528f3d
(svn r9662) -Documentation: Doxygen corrections and @file omissions
belugas
parents:
6696
diff
changeset
|
1006 |
* @param flags operation to perform |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1007 |
* @param p1 the ID of the vehicle |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1008 |
* @param p2 various bistuffed elements |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1009 |
* - p2 = (bit 0-15) - current order-index (p2 & 0xFFFF) |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1010 |
* - p2 = (bit 16-31) - service interval (p2 >> 16) |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1011 |
* @todo Unfortunately you cannot safely restore the unitnumber or the old vehicle |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1012 |
* as far as I can see. We can store it in BackuppedOrders, and restore it, but |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1013 |
* but we have no way of seeing it has been tampered with or not, as we have no |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1014 |
* legit way of knowing what that ID was.@n |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1015 |
* If we do want to backup/restore it, just add UnitID uid to BackuppedOrders, and |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1016 |
* restore it as parameter 'y' (ugly hack I know) for example. "v->unitnumber = y;" |
0 | 1017 |
*/ |
7439
0c0e2945c890
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
7328
diff
changeset
|
1018 |
CommandCost CmdRestoreOrderIndex(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1019 |
{ |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1020 |
Vehicle *v; |
4391
7bfd170bfdf5
(svn r6144) -Codechange: renamed OrderID to VehicleOrderID, because it had nothing to do
truelight
parents:
4389
diff
changeset
|
1021 |
VehicleOrderID cur_ord = GB(p2, 0, 16); |
2635 | 1022 |
uint16 serv_int = GB(p2, 16, 16); |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
1023 |
|
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
1024 |
if (!IsValidVehicleID(p1)) return CMD_ERROR; |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1025 |
|
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1026 |
v = GetVehicle(p1); |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
1027 |
|
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1028 |
/* Check the vehicle type and ownership, and if the service interval and order are in range */ |
4352
8ddb01bc6075
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
1029 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1030 |
if (serv_int != GetServiceIntervalClamped(serv_int) || cur_ord >= v->num_orders) return CMD_ERROR; |
1718
cef0773365eb
(svn r2222) Check the parameters of Cmd{Insert,Delete,Modify,Skip}Order() and CmdRestoreOrderIndex():
tron
parents:
1680
diff
changeset
|
1031 |
|
0 | 1032 |
if (flags & DC_EXEC) { |
1796
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1033 |
v->cur_order_index = cur_ord; |
cae31916ae54
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1793
diff
changeset
|
1034 |
v->service_interval = serv_int; |
0 | 1035 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1036 |
|
7446
1c4d469f986e
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
7439
diff
changeset
|
1037 |
return CommandCost(); |
0 | 1038 |
} |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1039 |
|
4177
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1040 |
|
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1041 |
static TileIndex GetStationTileForVehicle(const Vehicle* v, const Station* st) |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1042 |
{ |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1043 |
switch (v->type) { |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1044 |
default: NOT_REACHED(); |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
1045 |
case VEH_TRAIN: return st->train_tile; |
8179
1fa8cc3fbeb8
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
8149
diff
changeset
|
1046 |
case VEH_AIRCRAFT: return CanAircraftUseStation(v->engine_type, st) ? st->airport_tile : 0; |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
1047 |
case VEH_SHIP: return st->dock_tile; |
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
1048 |
case VEH_ROAD: |
6655
951b0ba32eb1
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6589
diff
changeset
|
1049 |
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) { |
4177
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1050 |
return (st->bus_stops != NULL) ? st->bus_stops->xy : 0; |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1051 |
} else { |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1052 |
return (st->truck_stops != NULL) ? st->truck_stops->xy : 0; |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1053 |
} |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1054 |
} |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1055 |
} |
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1056 |
|
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1057 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1058 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1059 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1060 |
* Check the orders of a vehicle, to see if there are invalid orders and stuff |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1061 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1062 |
*/ |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1063 |
void CheckOrders(const Vehicle* v) |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1064 |
{ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1065 |
/* Does the user wants us to check things? */ |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1066 |
if (_patches.order_review_system == 0) return; |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1067 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1068 |
/* Do nothing for crashed vehicles */ |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1069 |
if (v->vehstatus & VS_CRASHED) return; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1070 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1071 |
/* Do nothing for stopped vehicles if setting is '1' */ |
2549 | 1072 |
if (_patches.order_review_system == 1 && v->vehstatus & VS_STOPPED) |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1073 |
return; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1074 |
|
1053
dfb5243315f1
(svn r1554) -Fix: [ 1103187 ] Order Check messages are now validated before
celestar
parents:
1043
diff
changeset
|
1075 |
/* do nothing we we're not the first vehicle in a share-chain */ |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1076 |
if (v->next_shared != NULL) return; |
1053
dfb5243315f1
(svn r1554) -Fix: [ 1103187 ] Order Check messages are now validated before
celestar
parents:
1043
diff
changeset
|
1077 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1078 |
/* Only check every 20 days, so that we don't flood the message log */ |
2549 | 1079 |
if (v->owner == _local_player && v->day_counter % 20 == 0) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1080 |
int n_st, problem_type = -1; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1081 |
const Order *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1082 |
int message = 0; |
55
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1083 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1084 |
/* Check the order list */ |
55
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1085 |
n_st = 0; |
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1086 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1087 |
FOR_VEHICLE_ORDERS(v, order) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1088 |
/* Dummy order? */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1089 |
if (order->type == OT_DUMMY) { |
55
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1090 |
problem_type = 1; |
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1091 |
break; |
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1092 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1093 |
/* Does station have a load-bay for this vehicle? */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1094 |
if (order->type == OT_GOTO_STATION) { |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1095 |
const Station* st = GetStation(order->dest); |
4177
5ec2088edc3a
(svn r5615) Move GetStationTileForVehicle() to its only user
tron
parents:
4077
diff
changeset
|
1096 |
TileIndex required_tile = GetStationTileForVehicle(v, st); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1097 |
|
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1098 |
n_st++; |
2639 | 1099 |
if (required_tile == 0) problem_type = 3; |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1100 |
} |
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1101 |
} |
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1102 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1103 |
/* Check if the last and the first order are the same */ |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1104 |
if (v->num_orders > 1) { |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1105 |
const Order* last = GetLastVehicleOrder(v); |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1106 |
|
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1107 |
if (v->orders->type == last->type && |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1108 |
v->orders->flags == last->flags && |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1109 |
v->orders->dest == last->dest) { |
4077
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1110 |
problem_type = 2; |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1111 |
} |
d3022f976946
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4000
diff
changeset
|
1112 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
1113 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1114 |
/* Do we only have 1 station in our order list? */ |
2639 | 1115 |
if (n_st < 2 && problem_type == -1) problem_type = 0; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
1116 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1117 |
/* We don't have a problem */ |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1118 |
if (problem_type < 0) return; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
1119 |
|
6206
67358999d80d
(svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents:
6173
diff
changeset
|
1120 |
message = STR_TRAIN_HAS_TOO_FEW_ORDERS + (v->type << 2) + problem_type; |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5562
diff
changeset
|
1121 |
//DEBUG(misc, 3, "Triggered News Item for vehicle %d", v->index); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
55
diff
changeset
|
1122 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1123 |
SetDParam(0, v->unitnumber); |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1124 |
AddNewsItem( |
55
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1125 |
message, |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1126 |
NEWS_FLAGS(NM_SMALL, NF_VIEWPORT | NF_VEHICLE, NT_ADVICE, 0), |
55
73fae6c6568e
(svn r56) Improved order checker + patch setting for it (celestar)
dominik
parents:
29
diff
changeset
|
1127 |
v->index, |
3140
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1128 |
0 |
69cb681c6d86
(svn r3758) Remove the news validation callback. It is superseded by r3757.
tron
parents:
3139
diff
changeset
|
1129 |
); |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1130 |
} |
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
0
diff
changeset
|
1131 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1132 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1133 |
/** |
4351
63ae31104f07
(svn r6052) -Codechange: change OrderType (order->type) in a typedef
truelight
parents:
4350
diff
changeset
|
1134 |
* Removes an order from all vehicles. Triggers when, say, a station is removed. |
63ae31104f07
(svn r6052) -Codechange: change OrderType (order->type) in a typedef
truelight
parents:
4350
diff
changeset
|
1135 |
* @param type The type of the order (OT_GOTO_[STATION|DEPOT|WAYPOINT]). |
63ae31104f07
(svn r6052) -Codechange: change OrderType (order->type) in a typedef
truelight
parents:
4350
diff
changeset
|
1136 |
* @param destination The destination. Can be a StationID, DepotID or WaypointID. |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1137 |
*/ |
4389
e4555522d257
(svn r6142) -Codechange: added WaypointID (sorry DV, couldn't splits it anymore)
truelight
parents:
4384
diff
changeset
|
1138 |
void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1139 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1140 |
Vehicle *v; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1141 |
|
4528
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1142 |
/* Aircraft have StationIDs for depot orders and never use DepotIDs |
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1143 |
* This fact is handled specially below |
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1144 |
*/ |
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1145 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1146 |
/* Go through all vehicles */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1147 |
FOR_ALL_VEHICLES(v) { |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1148 |
Order *order; |
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1149 |
bool invalidate; |
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1150 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1151 |
/* Forget about this station if this station is removed */ |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1152 |
if (v->last_station_visited == destination && type == OT_GOTO_STATION) { |
1266
9dc5638fe8cc
(svn r1770) -Fix: Hopefully last pieces of code that are containing a station-id
truelight
parents:
1247
diff
changeset
|
1153 |
v->last_station_visited = INVALID_STATION; |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1154 |
} |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1155 |
|
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1156 |
order = &v->current_order; |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
1157 |
if ((v->type == VEH_AIRCRAFT && order->type == OT_GOTO_DEPOT ? OT_GOTO_STATION : order->type) == type && |
4528
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1158 |
v->current_order.dest == destination) { |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1159 |
order->type = OT_DUMMY; |
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1160 |
order->flags = 0; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1161 |
InvalidateWindow(WC_VEHICLE_VIEW, v->index); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1162 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1163 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1164 |
/* Clear the order from the order-list */ |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1165 |
invalidate = false; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1166 |
FOR_VEHICLE_ORDERS(v, order) { |
6585
7da94b26498a
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6573
diff
changeset
|
1167 |
if ((v->type == VEH_AIRCRAFT && order->type == OT_GOTO_DEPOT ? OT_GOTO_STATION : order->type) == type && |
4528
80cc2712b176
(svn r6355) -Fix: Go to hangar orders for aircraft could get spuriously removed when a road or rail depot got deleted (Darkvater and me)
tron
parents:
4527
diff
changeset
|
1168 |
order->dest == destination) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1169 |
order->type = OT_DUMMY; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1170 |
order->flags = 0; |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1171 |
invalidate = true; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1172 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1173 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1174 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1175 |
/* Only invalidate once, and if needed */ |
4533
5959e77ff4a5
(svn r6360) -Codechange: Polish RemoveOrderFromAllVehicles()
tron
parents:
4528
diff
changeset
|
1176 |
if (invalidate) InvalidateWindow(WC_VEHICLE_ORDERS, v->index); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1177 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1178 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1179 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1180 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1181 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1182 |
* Checks if a vehicle has a GOTO_DEPOT in his order list |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1183 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1184 |
* @return True if this is true (lol ;)) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1185 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1186 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1187 |
bool VehicleHasDepotOrders(const Vehicle *v) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1188 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1189 |
const Order *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1190 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1191 |
FOR_VEHICLE_ORDERS(v, order) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1192 |
if (order->type == OT_GOTO_DEPOT) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1193 |
return true; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1194 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1195 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1196 |
return false; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1197 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1198 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1199 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1200 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1201 |
* Delete all orders from a vehicle |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1202 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1203 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1204 |
void DeleteVehicleOrders(Vehicle *v) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1205 |
{ |
3139
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
1206 |
DeleteOrderWarnings(v); |
4c950c7ec5c9
(svn r3757) -Feature: Delete news items about vehicles, when they get stale
tron
parents:
3123
diff
changeset
|
1207 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1208 |
/* If we have a shared order-list, don't delete the list, but just |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1209 |
remove our pointer */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1210 |
if (IsOrderListShared(v)) { |
6663
d09762058039
(svn r9338) -Fix: close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles
truelight
parents:
6662
diff
changeset
|
1211 |
Vehicle *u = v; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1212 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1213 |
v->orders = NULL; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1214 |
v->num_orders = 0; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1215 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1216 |
/* Unlink ourself */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1217 |
if (v->prev_shared != NULL) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1218 |
v->prev_shared->next_shared = v->next_shared; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1219 |
u = v->prev_shared; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1220 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1221 |
if (v->next_shared != NULL) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1222 |
v->next_shared->prev_shared = v->prev_shared; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1223 |
u = v->next_shared; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1224 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1225 |
v->prev_shared = NULL; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1226 |
v->next_shared = NULL; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1227 |
|
6663
d09762058039
(svn r9338) -Fix: close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles
truelight
parents:
6662
diff
changeset
|
1228 |
/* If we are the only one left in the Shared Order Vehicle List, |
d09762058039
(svn r9338) -Fix: close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles
truelight
parents:
6662
diff
changeset
|
1229 |
* remove it, as we are no longer a Shared Order Vehicle */ |
6696
3c2120d41b22
(svn r9429) -Fix r9338: when deleting a vehicle which has shared orders with one more vehicle and no orders, segfaulted
truelight
parents:
6677
diff
changeset
|
1230 |
if (u->prev_shared == NULL && u->next_shared == NULL && u->orders != NULL) RemoveSharedOrderVehicleList(u); |
6663
d09762058039
(svn r9338) -Fix: close the Shared Order Vehicle List if you remove the shared link with only 2 vehicles
truelight
parents:
6662
diff
changeset
|
1231 |
|
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1232 |
/* We only need to update this-one, because if there is a third |
4549
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4534
diff
changeset
|
1233 |
* vehicle which shares the same order-list, nothing will change. If |
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4534
diff
changeset
|
1234 |
* this is the last vehicle, the last line of the order-window |
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4534
diff
changeset
|
1235 |
* will change from Shared order list, to Order list, so it needs |
60410aa1aa88
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4534
diff
changeset
|
1236 |
* an update */ |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1237 |
InvalidateVehicleOrder(u); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1238 |
return; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1239 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1240 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1241 |
/* Remove the orders */ |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
1242 |
Order *cur = v->orders; |
6662
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
1243 |
/* Delete the vehicle list of shared orders, if any */ |
7ad747545522
(svn r9337) -Fix [FS#542]: assert() when you removed the orders of a shared list while having the shared order vehicle list open.
truelight
parents:
6655
diff
changeset
|
1244 |
if (cur != NULL) RemoveSharedOrderVehicleList(v); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1245 |
v->orders = NULL; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1246 |
v->num_orders = 0; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1247 |
|
4735
cd7be58d0551
(svn r6647) -Fix: [vehicle list windows] Lists of shared orders are now no longer closed by a window event if the list is empty
bjarni
parents:
4715
diff
changeset
|
1248 |
if (cur != NULL) { |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
1249 |
cur->FreeChain(); // Free the orders. |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1250 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1251 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1252 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1253 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1254 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1255 |
* Check if we share our orders with an other vehicle |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1256 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1257 |
* @return Returns the vehicle who has the same order |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1258 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1259 |
*/ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1260 |
bool IsOrderListShared(const Vehicle *v) |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1261 |
{ |
2645
964bd8fe3ce2
(svn r3187) Simplify overly complicated ifs, especially if (foo) return false; else return true; is confusing
tron
parents:
2639
diff
changeset
|
1262 |
return v->next_shared != NULL || v->prev_shared != NULL; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1263 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1264 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1265 |
/** |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1266 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1267 |
* Check if a vehicle has any valid orders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1268 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1269 |
* @return false if there are no valid orders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1270 |
* |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1271 |
*/ |
2630 | 1272 |
bool CheckForValidOrders(const Vehicle* v) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1273 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1274 |
const Order *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1275 |
|
2639 | 1276 |
FOR_VEHICLE_ORDERS(v, order) if (order->type != OT_DUMMY) return true; |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1277 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1278 |
return false; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1279 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1280 |
|
6573 | 1281 |
void InitializeOrders() |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1282 |
{ |
7897
222641b84fc4
(svn r10773) -Codechange: use pool.CleanPool instead of CleanPool(&pool) and similarly for AddBlock*.
rubidium
parents:
7887
diff
changeset
|
1283 |
_Order_pool.CleanPool(); |
222641b84fc4
(svn r10773) -Codechange: use pool.CleanPool instead of CleanPool(&pool) and similarly for AddBlock*.
rubidium
parents:
7887
diff
changeset
|
1284 |
_Order_pool.AddBlockToPool(); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1285 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1286 |
_backup_orders_tile = 0; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1287 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1288 |
|
1881
023a134a4b12
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1820
diff
changeset
|
1289 |
static const SaveLoad _order_desc[] = { |
4527
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1290 |
SLE_VAR(Order, type, SLE_UINT8), |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1291 |
SLE_VAR(Order, flags, SLE_UINT8), |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1292 |
SLE_VAR(Order, dest, SLE_UINT16), |
b18634a31a4a
(svn r6353) -Codechange: Make DestinationID a typedef of uin16, which is as large as any type of destinataion (StationID, DepotID, WaypointID) it can hold
tron
parents:
4392
diff
changeset
|
1293 |
SLE_REF(Order, next, REF_ORDER), |
7476
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
1294 |
SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
1295 |
SLE_CONDVAR(Order, refit_subtype, SLE_UINT8, 36, SL_MAX_VERSION), |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
1296 |
SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION), |
7f086e4b2a76
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
7446
diff
changeset
|
1297 |
SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION), |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1298 |
|
4712
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
1299 |
/* Leftover from the minor savegame version stuff |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
1300 |
* We will never use those free bytes, but we have to keep this line to allow loading of old savegames */ |
273ec3b182bf
(svn r6624) -Feature: added ability to add refit commands to vehicle orders (can only be done in goto depot orders)
bjarni
parents:
4549
diff
changeset
|
1301 |
SLE_CONDNULL(10, 5, 35), |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1302 |
SLE_END() |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1303 |
}; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1304 |
|
6573 | 1305 |
static void Save_ORDR() |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1306 |
{ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1307 |
Order *order; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1308 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1309 |
FOR_ALL_ORDERS(order) { |
4346
3f00094f2670
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
1310 |
SlSetArrayIndex(order->index); |
3f00094f2670
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
1311 |
SlObject(order, _order_desc); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1312 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1313 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1314 |
|
6573 | 1315 |
static void Load_ORDR() |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1316 |
{ |
2685
00111d5ca47f
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2645
diff
changeset
|
1317 |
if (CheckSavegameVersionOldStyle(5, 2)) { |
00111d5ca47f
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2645
diff
changeset
|
1318 |
/* Version older than 5.2 did not have a ->next pointer. Convert them |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1319 |
(in the old days, the orderlist was 5000 items big) */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1320 |
uint len = SlGetFieldLength(); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1321 |
uint i; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1322 |
|
2685
00111d5ca47f
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2645
diff
changeset
|
1323 |
if (CheckSavegameVersion(5)) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1324 |
/* Pre-version 5 had an other layout for orders |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1325 |
(uint16 instead of uint32) */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1326 |
uint16 orders[5000]; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1327 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1328 |
len /= sizeof(uint16); |
1314
d6a253cf92c3
(svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents:
1297
diff
changeset
|
1329 |
assert (len <= lengthof(orders)); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1330 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1331 |
SlArray(orders, len, SLE_UINT16); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1332 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1333 |
for (i = 0; i < len; ++i) { |
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
1334 |
Order *order = new (i) Order(); |
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
1335 |
AssignOrder(order, UnpackVersion4Order(orders[i])); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1336 |
} |
2685
00111d5ca47f
(svn r3227) -Codechange: [Savegame] removed 'minor' version, and renamed 'major' version to just: version.
truelight
parents:
2645
diff
changeset
|
1337 |
} else if (CheckSavegameVersionOldStyle(5, 2)) { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1338 |
uint32 orders[5000]; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1339 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1340 |
len /= sizeof(uint32); |
1314
d6a253cf92c3
(svn r1818) -Add: Dynamic orders (up to 64k orders)
truelight
parents:
1297
diff
changeset
|
1341 |
assert (len <= lengthof(orders)); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1342 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1343 |
SlArray(orders, len, SLE_UINT32); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1344 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1345 |
for (i = 0; i < len; ++i) { |
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
1346 |
Order *order = new (i) Order(); |
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
1347 |
AssignOrder(order, UnpackOrder(orders[i])); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1348 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1349 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1350 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1351 |
/* Update all the next pointer */ |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1352 |
for (i = 1; i < len; ++i) { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1353 |
/* The orders were built like this: |
6589
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
1354 |
* While the order is valid, set the previous will get it's next pointer set |
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
1355 |
* We start with index 1 because no order will have the first in it's next pointer */ |
addf4b6946d0
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6585
diff
changeset
|
1356 |
if (GetOrder(i)->IsValid()) |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1357 |
GetOrder(i - 1)->next = GetOrder(i); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1358 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1359 |
} else { |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1360 |
int index; |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1361 |
|
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1362 |
while ((index = SlIterateArray()) != -1) { |
7887
5740662fc5ce
(svn r10760) -Codechange: make the order struct use the pool item class as super class.
rubidium
parents:
7545
diff
changeset
|
1363 |
Order *order = new (index) Order(); |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1364 |
SlObject(order, _order_desc); |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1365 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1366 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1367 |
} |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1368 |
|
5838
9c3129cb019b
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5835
diff
changeset
|
1369 |
extern const ChunkHandler _order_chunk_handlers[] = { |
1024
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1370 |
{ 'ORDR', Save_ORDR, Load_ORDR, CH_ARRAY | CH_LAST}, |
9b06b01490a4
(svn r1525) -Codechange: rewrote the _order_array, now it can be made dynamic.
truelight
parents:
1020
diff
changeset
|
1371 |
}; |