author | peter1138 |
Sun, 03 Aug 2008 17:35:08 +0000 | |
changeset 9834 | 7474149531c1 |
parent 9829 | 48132d8feffd |
child 9941 | 8549448b55fa |
permissions | -rw-r--r-- |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
1 |
/* $Id$ */ |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
2 |
|
9111
48ce04029fe4
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
8970
diff
changeset
|
3 |
/** @file timetable_cmd.cpp Commands related to time tabling. */ |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
4 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
5 |
#include "stdafx.h" |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
6 |
#include "openttd.h" |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
7 |
#include "variables.h" |
8116
8da76dcb3287
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
7931
diff
changeset
|
8 |
#include "command_func.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8116
diff
changeset
|
9 |
#include "functions.h" |
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8116
diff
changeset
|
10 |
#include "window_func.h" |
8144
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8140
diff
changeset
|
11 |
#include "vehicle_func.h" |
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8140
diff
changeset
|
12 |
#include "vehicle_base.h" |
8270
e7c342f6b14c
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8264
diff
changeset
|
13 |
#include "settings_type.h" |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
14 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8254
diff
changeset
|
15 |
#include "table/strings.h" |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
16 |
|
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
17 |
static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16 time, bool is_journey) |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
18 |
{ |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
19 |
Order *order = GetVehicleOrder(v, order_number); |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
20 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
21 |
if (is_journey) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
22 |
order->travel_time = time; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
23 |
} else { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
24 |
order->wait_time = time; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
25 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
26 |
|
8853
3266f0374302
(svn r12615) -Codechange: rename some enums related to depot orders to make it more clear that they are no loading/unloading flags. Also add more type strictness.
rubidium
parents:
8848
diff
changeset
|
27 |
if (v->cur_order_index == order_number && v->current_order.GetDepotOrderType() & ODTFB_PART_OF_ORDERS) { |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
28 |
if (is_journey) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
29 |
v->current_order.travel_time = time; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
30 |
} else { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
31 |
v->current_order.wait_time = time; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
32 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
33 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
34 |
|
7809
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
35 |
for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) { |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
36 |
InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index); |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
37 |
} |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
38 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
39 |
|
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
40 |
/** |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
41 |
* Add or remove waiting times from an order. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
42 |
* @param tile Not used. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
43 |
* @param flags Operation to perform. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
44 |
* @param p1 Various bitstuffed elements |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
45 |
* - p1 = (bit 0-15) - Vehicle with the orders to change. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
46 |
* - p1 = (bit 16-23) - Order index to modify. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
47 |
* - p1 = (bit 24) - Whether to change the waiting time or the travelling |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
48 |
* time. |
8650
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
49 |
* - p1 = (bit 25) - Whether p2 contains waiting and travelling time. |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
50 |
* @param p2 The amount of time to wait. |
8650
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
51 |
* - p2 = (bit 0-15) - Waiting or travelling time as specified by p1 bit 24 if p1 bit 25 is not set, |
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
52 |
* Travelling time if p1 bit 25 is set. |
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
53 |
* - p2 = (bit 16-31) - Waiting time if p1 bit 25 is set |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
54 |
*/ |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
55 |
CommandCost CmdChangeTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
56 |
{ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
57 |
if (!_settings_game.order.timetabling) return CMD_ERROR; |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
58 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
59 |
VehicleID veh = GB(p1, 0, 16); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
60 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
61 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
62 |
Vehicle *v = GetVehicle(veh); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
63 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
64 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
65 |
VehicleOrderID order_number = GB(p1, 16, 8); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
66 |
Order *order = GetVehicleOrder(v, order_number); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
67 |
if (order == NULL) return CMD_ERROR; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
68 |
|
8650
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
69 |
bool packed_time = HasBit(p1, 25); |
9a9c905deaa5
(svn r12296) -Fix [FS#1549]: restore timetable from backupped orders and add group ID to the backup
glx
parents:
8302
diff
changeset
|
70 |
bool is_journey = HasBit(p1, 24) || packed_time; |
9665
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
71 |
|
9829
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
72 |
int wait_time = -1; |
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
73 |
int travel_time = -1; |
9665
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
74 |
if (packed_time) { |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
75 |
travel_time = GB(p2, 0, 16); |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
76 |
wait_time = GB(p2, 16, 16);; |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
77 |
} else if (is_journey) { |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
78 |
travel_time = GB(p2, 0, 16); |
9641
a854c7cf6af5
(svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents:
9413
diff
changeset
|
79 |
} else { |
9665
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
80 |
wait_time = GB(p2, 0, 16); |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
81 |
} |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
82 |
|
9829
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
83 |
if (wait_time != -1) { |
9665
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
84 |
switch (order->GetType()) { |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
85 |
case OT_GOTO_STATION: |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
86 |
if (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) return_cmd_error(STR_TIMETABLE_NOT_STOPPING_HERE); |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
87 |
break; |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
88 |
|
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
89 |
case OT_CONDITIONAL: |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
90 |
break; |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
91 |
|
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
92 |
default: return_cmd_error(STR_TIMETABLE_ONLY_WAIT_AT_STATIONS); |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
93 |
} |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
94 |
} |
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
95 |
|
9829
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
96 |
if (travel_time != -1 && order->IsType(OT_CONDITIONAL)) return CMD_ERROR; |
9665
dd6c07db9d32
(svn r13752) -Fix [FS#2130]: correctly restore conditional orders when they are put 'into' backup.
rubidium
parents:
9641
diff
changeset
|
97 |
|
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
98 |
if (flags & DC_EXEC) { |
9829
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
99 |
if (wait_time != -1) ChangeTimetable(v, order_number, wait_time, false); |
48132d8feffd
(svn r13972) -Fix [FS#2180]: the timetable's "Clear Time" button didn't have any effect.
rubidium
parents:
9665
diff
changeset
|
100 |
if (travel_time != -1) ChangeTimetable(v, order_number, travel_time, true); |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
101 |
} |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
102 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
103 |
return CommandCost(); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
104 |
} |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
105 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
106 |
/** |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
107 |
* Clear the lateness counter to make the vehicle on time. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
108 |
* @param tile Not used. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
109 |
* @param flags Operation to perform. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
110 |
* @param p1 Various bitstuffed elements |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
111 |
* - p1 = (bit 0-15) - Vehicle with the orders to change. |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
112 |
*/ |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
113 |
CommandCost CmdSetVehicleOnTime(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
114 |
{ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
115 |
if (!_settings_game.order.timetabling) return CMD_ERROR; |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
116 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
117 |
VehicleID veh = GB(p1, 0, 16); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
118 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
119 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
120 |
Vehicle *v = GetVehicle(veh); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
121 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
122 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
123 |
if (flags & DC_EXEC) { |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
124 |
v->lateness_counter = 0; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
125 |
} |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
126 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
127 |
return CommandCost(); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
128 |
} |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
129 |
|
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
130 |
/** |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
131 |
* Start or stop filling the timetable automatically from the time the vehicle |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
132 |
* actually takes to complete it. When starting to autofill the current times |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
133 |
* are cleared and the timetable will start again from scratch. |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
134 |
* @param tile Not used. |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
135 |
* @param flags Operation to perform. |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
136 |
* @param p1 Vehicle index. |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
137 |
* @param p2 Set to 1 to enable, 0 to disable. |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
138 |
*/ |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
139 |
CommandCost CmdAutofillTimetable(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
140 |
{ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
141 |
if (!_settings_game.order.timetabling) return CMD_ERROR; |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
142 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
143 |
VehicleID veh = GB(p1, 0, 16); |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
144 |
if (!IsValidVehicleID(veh)) return CMD_ERROR; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
145 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
146 |
Vehicle *v = GetVehicle(veh); |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
147 |
if (!CheckOwnership(v->owner)) return CMD_ERROR; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
148 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
149 |
if (flags & DC_EXEC) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
150 |
if (p2 == 1) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
151 |
/* Start autofilling the timetable, which clears all the current |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
152 |
* timings and clears the "timetable has started" bit. */ |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
153 |
SetBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE); |
7929
6c9b25842b0f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
7928
diff
changeset
|
154 |
ClrBit(v->vehicle_flags, VF_TIMETABLE_STARTED); |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
155 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
156 |
for (Order *order = GetVehicleOrder(v, 0); order != NULL; order = order->next) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
157 |
order->wait_time = 0; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
158 |
order->travel_time = 0; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
159 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
160 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
161 |
v->current_order.wait_time = 0; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
162 |
v->current_order.travel_time = 0; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
163 |
} else { |
7929
6c9b25842b0f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
7928
diff
changeset
|
164 |
ClrBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE); |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
165 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
166 |
} |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
167 |
|
7809
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
168 |
for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) { |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
169 |
InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index); |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
170 |
} |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
171 |
|
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
172 |
return CommandCost(); |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
173 |
} |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
174 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
175 |
void UpdateVehicleTimetable(Vehicle *v, bool travelling) |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
176 |
{ |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
177 |
uint timetabled = travelling ? v->current_order.travel_time : v->current_order.wait_time; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
178 |
uint time_taken = v->current_order_time; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
179 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
180 |
v->current_order_time = 0; |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
181 |
|
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
182 |
if (!_settings_game.order.timetabling) return; |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
183 |
|
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
184 |
/* Make sure the timetable only starts when the vehicle reaches the first |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
185 |
* order, not when travelling from the depot to the first station. */ |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
186 |
if (v->cur_order_index == 0 && !HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) { |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
187 |
SetBit(v->vehicle_flags, VF_TIMETABLE_STARTED); |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
188 |
return; |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
189 |
} |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
190 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7809
diff
changeset
|
191 |
if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) return; |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
192 |
|
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
193 |
if (HasBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE)) { |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
194 |
if (timetabled == 0) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
195 |
/* Round the time taken up to the nearest day, as this will avoid |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
196 |
* confusion for people who are timetabling in days, and can be |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
197 |
* adjusted later by people who aren't. */ |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
198 |
time_taken = (((time_taken - 1) / DAY_TICKS) + 1) * DAY_TICKS; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
199 |
|
9641
a854c7cf6af5
(svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents:
9413
diff
changeset
|
200 |
if (!v->current_order.IsType(OT_CONDITIONAL)) { |
a854c7cf6af5
(svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents:
9413
diff
changeset
|
201 |
ChangeTimetable(v, v->cur_order_index, time_taken, travelling); |
a854c7cf6af5
(svn r13704) -Fix: make timetables work more sensible when used in conjunction with conditional orders, i.e. make it possibly to tell how long to travel to the next destination if you jump.
rubidium
parents:
9413
diff
changeset
|
202 |
} |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
203 |
return; |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
204 |
} else if (v->cur_order_index == 0) { |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
205 |
/* Otherwise if we're at the beginning and it already has a value, |
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
206 |
* assume that autofill is finished and turn it off again. */ |
7929
6c9b25842b0f
(svn r11482) -Codechange: Remove the doubled function ClrBitT and rename the remaining to fit with the naming style
skidd13
parents:
7928
diff
changeset
|
207 |
ClrBit(v->vehicle_flags, VF_AUTOFILL_TIMETABLE); |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
208 |
} |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8853
diff
changeset
|
209 |
} |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
210 |
|
7062
6fac471b1093
(svn r10327) -Fix (r10236) [FS#934]: Vehicles wait at stations when they arrive early even
maedhros
parents:
6981
diff
changeset
|
211 |
/* Vehicles will wait at stations if they arrive early even if they are not |
6fac471b1093
(svn r10327) -Fix (r10236) [FS#934]: Vehicles wait at stations when they arrive early even
maedhros
parents:
6981
diff
changeset
|
212 |
* timetabled to wait there, so make sure the lateness counter is updated |
6fac471b1093
(svn r10327) -Fix (r10236) [FS#934]: Vehicles wait at stations when they arrive early even
maedhros
parents:
6981
diff
changeset
|
213 |
* when this happens. */ |
7066
e5d16aa8d6ca
(svn r10331) -Feature: Add the possibility of automatically filling in timetables based on
maedhros
parents:
7062
diff
changeset
|
214 |
if (timetabled == 0 && (travelling || v->lateness_counter >= 0)) return; |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
215 |
|
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
216 |
v->lateness_counter -= (timetabled - time_taken); |
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
217 |
|
7809
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
218 |
for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) { |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
219 |
InvalidateWindow(WC_VEHICLE_TIMETABLE, v->index); |
5711d0a71dba
(svn r11359) -Fix [FS#1381]: shared timetables were not properly refreshed with autofill.
rubidium
parents:
7066
diff
changeset
|
220 |
} |
6981
9af49f50fe33
(svn r10237) -Fix (r10236): It helps if you use svn add with new files...
maedhros
parents:
diff
changeset
|
221 |
} |