Mercurial > hg > openttd
annotate src/vehicle_cmd.cpp @ 12305:217431f4bc67 draft
(svn r16722) -Codechange: unify the naming of the Is/Set/HasArticulatedPart functions
author | rubidium <rubidium@openttd.org> |
---|---|
date | Thu, 02 Jul 2009 09:06:15 +0000 |
parents | bfdb5c948bb4 |
children | d0ff55a976ad |
rev | line source |
---|---|
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
1 /* $Id$ */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
2 |
11350
8a62f1cb73a3
(svn r15700) -Codechange: split Cmd* from signs.cpp to signs_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
11349
diff
changeset
|
3 /** @file vehicle_cmd.cpp Commands for vehicles. */ |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
4 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
5 #include "stdafx.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
6 #include "roadveh.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
7 #include "gfx_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
8 #include "news_func.h" |
12228
240adc64d01a
(svn r16643) -Codechange: replace GetStationByTile() by Station::GetByTile()
smatz <smatz@openttd.org>
parents:
12114
diff
changeset
|
9 #include "airport.h" |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
10 #include "command_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
11 #include "company_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
12 #include "vehicle_gui.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
13 #include "train.h" |
11982
9add5306a01e
(svn r16388) -Codechange: move u.air to Aircraft
rubidium <rubidium@openttd.org>
parents:
11949
diff
changeset
|
14 #include "aircraft.h" |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
15 #include "newgrf_engine.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
16 #include "newgrf_text.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
17 #include "functions.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
18 #include "window_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
19 #include "vehicle_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
20 #include "string_func.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
21 #include "depot_map.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
22 #include "vehiclelist.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
23 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
24 #include "table/strings.h" |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
25 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
26 /* Tables used in vehicle.h to find the right command for a certain vehicle type */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
27 const uint32 _veh_build_proc_table[] = { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
28 CMD_BUILD_RAIL_VEHICLE, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
29 CMD_BUILD_ROAD_VEH, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
30 CMD_BUILD_SHIP, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
31 CMD_BUILD_AIRCRAFT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
32 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
33 const uint32 _veh_sell_proc_table[] = { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
34 CMD_SELL_RAIL_WAGON, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
35 CMD_SELL_ROAD_VEH, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
36 CMD_SELL_SHIP, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
37 CMD_SELL_AIRCRAFT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
38 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
39 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
40 const uint32 _veh_refit_proc_table[] = { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
41 CMD_REFIT_RAIL_VEHICLE, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
42 CMD_REFIT_ROAD_VEH, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
43 CMD_REFIT_SHIP, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
44 CMD_REFIT_AIRCRAFT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
45 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
46 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
47 const uint32 _send_to_depot_proc_table[] = { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
48 CMD_SEND_TRAIN_TO_DEPOT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
49 CMD_SEND_ROADVEH_TO_DEPOT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
50 CMD_SEND_SHIP_TO_DEPOT, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
51 CMD_SEND_AIRCRAFT_TO_HANGAR, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
52 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
53 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
54 /** Start/Stop a vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
55 * @param tile unused |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
56 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
57 * @param p1 vehicle to start/stop |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
58 * @param p2 bit 0: Shall the start/stop newgrf callback be evaluated (only valid with DC_AUTOREPLACE for network safety) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
59 * @return result of operation. Nothing if everything went well |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
60 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
61 CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
62 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
63 /* Disable the effect of p2 bit 0, when DC_AUTOREPLACE is not set */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
64 if ((flags & DC_AUTOREPLACE) == 0) SetBit(p2, 0); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
65 |
11949
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
66 Vehicle *v = Vehicle::GetIfValid(p1); |
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
67 if (v == NULL || !CheckOwnership(v->owner) || !v->IsPrimaryVehicle()) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
68 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
69 switch (v->type) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
70 case VEH_TRAIN: |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
71 if ((v->vehstatus & VS_STOPPED) && Train::From(v)->tcache.cached_power == 0) return_cmd_error(STR_TRAIN_START_NO_CATENARY); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
72 break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
73 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
74 case VEH_SHIP: |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
75 case VEH_ROAD: |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
76 break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
77 |
11982
9add5306a01e
(svn r16388) -Codechange: move u.air to Aircraft
rubidium <rubidium@openttd.org>
parents:
11949
diff
changeset
|
78 case VEH_AIRCRAFT: { |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
79 Aircraft *a = Aircraft::From(v); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
80 /* cannot stop airplane when in flight, or when taking off / landing */ |
11982
9add5306a01e
(svn r16388) -Codechange: move u.air to Aircraft
rubidium <rubidium@openttd.org>
parents:
11949
diff
changeset
|
81 if (a->state >= STARTTAKEOFF && a->state < TERM7) return_cmd_error(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT); |
9add5306a01e
(svn r16388) -Codechange: move u.air to Aircraft
rubidium <rubidium@openttd.org>
parents:
11949
diff
changeset
|
82 } break; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
83 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
84 default: return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
85 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
86 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
87 /* Check if this vehicle can be started/stopped. The callback will fail or |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
88 * return 0xFF if it can. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
89 uint16 callback = GetVehicleCallback(CBID_VEHICLE_START_STOP_CHECK, 0, 0, v->engine_type, v); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
90 if (callback != CALLBACK_FAILED && GB(callback, 0, 8) != 0xFF && HasBit(p2, 0)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
91 StringID error = GetGRFStringID(GetEngineGRFID(v->engine_type), 0xD000 + callback); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
92 return_cmd_error(error); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
93 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
94 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
95 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
96 static const StringID vehicle_waiting_in_depot[] = { |
11730
a39da1e4c1f5
(svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents:
11368
diff
changeset
|
97 STR_VEHICLE_STATUS_WAITING_IN_DEPOT, |
a39da1e4c1f5
(svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents:
11368
diff
changeset
|
98 STR_NEWS_ROAD_VEHICLE_IS_WAITING, |
a39da1e4c1f5
(svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents:
11368
diff
changeset
|
99 STR_NEWS_SHIP_IS_WAITING, |
a39da1e4c1f5
(svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents:
11368
diff
changeset
|
100 STR_NEWS_AIRCRAFT_IS_WAITING, |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
101 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
102 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
103 static const WindowClass vehicle_list[] = { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
104 WC_TRAINS_LIST, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
105 WC_ROADVEH_LIST, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
106 WC_SHIPS_LIST, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
107 WC_AIRCRAFT_LIST, |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
108 }; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
109 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
110 if (v->IsStoppedInDepot() && (flags & DC_AUTOREPLACE) == 0) DeleteVehicleNews(p1, vehicle_waiting_in_depot[v->type]); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
111 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
112 v->vehstatus ^= VS_STOPPED; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
113 if (v->type != VEH_TRAIN) v->cur_speed = 0; // trains can stop 'slowly' |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
114 InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
115 InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
116 InvalidateWindowClasses(vehicle_list[v->type]); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
117 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
118 return CommandCost(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
119 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
120 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
121 /** Starts or stops a lot of vehicles |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
122 * @param tile Tile of the depot where the vehicles are started/stopped (only used for depots) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
123 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
124 * @param p1 Station/Order/Depot ID (only used for vehicle list windows) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
125 * @param p2 bitmask |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
126 * - bit 0-4 Vehicle type |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
127 * - bit 5 false = start vehicles, true = stop vehicles |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
128 * - bit 6 if set, then it's a vehicle list window, not a depot and Tile is ignored in this case |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
129 * - bit 8-11 Vehicle List Window type (ignored unless bit 1 is set) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
130 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
131 CommandCost CmdMassStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
132 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
133 VehicleList list; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
134 CommandCost return_value = CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
135 VehicleType vehicle_type = (VehicleType)GB(p2, 0, 5); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
136 bool start_stop = HasBit(p2, 5); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
137 bool vehicle_list_window = HasBit(p2, 6); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
138 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
139 if (vehicle_list_window) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
140 uint32 id = p1; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
141 uint16 window_type = p2 & VLW_MASK; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
142 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
143 GenerateVehicleSortList(&list, vehicle_type, _current_company, id, window_type); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
144 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
145 /* Get the list of vehicles in the depot */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
146 BuildDepotVehicleList(vehicle_type, tile, &list, NULL); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
147 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
148 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
149 for (uint i = 0; i < list.Length(); i++) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
150 const Vehicle *v = list[i]; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
151 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
152 if (!!(v->vehstatus & VS_STOPPED) != start_stop) continue; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
153 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
154 if (!vehicle_list_window) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
155 if (vehicle_type == VEH_TRAIN) { |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
156 if (CheckTrainInDepot(Train::From(v), false) == -1) continue; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
157 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
158 if (!(v->vehstatus & VS_HIDDEN)) continue; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
159 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
160 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
161 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
162 CommandCost ret = DoCommand(tile, v->index, 0, flags, CMD_START_STOP_VEHICLE); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
163 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
164 if (CmdSucceeded(ret)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
165 return_value = CommandCost(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
166 /* We know that the command is valid for at least one vehicle. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
167 * If we haven't set DC_EXEC, then there is no point in continueing because it will be valid */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
168 if (!(flags & DC_EXEC)) break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
169 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
170 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
171 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
172 return return_value; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
173 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
174 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
175 /** Sells all vehicles in a depot |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
176 * @param tile Tile of the depot where the depot is |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
177 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
178 * @param p1 Vehicle type |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
179 * @param p2 unused |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
180 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
181 CommandCost CmdDepotSellAllVehicles(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
182 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
183 VehicleList list; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
184 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
185 CommandCost cost(EXPENSES_NEW_VEHICLES); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
186 uint sell_command; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
187 VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
188 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
189 switch (vehicle_type) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
190 case VEH_TRAIN: sell_command = CMD_SELL_RAIL_WAGON; break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
191 case VEH_ROAD: sell_command = CMD_SELL_ROAD_VEH; break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
192 case VEH_SHIP: sell_command = CMD_SELL_SHIP; break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
193 case VEH_AIRCRAFT: sell_command = CMD_SELL_AIRCRAFT; break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
194 default: return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
195 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
196 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
197 /* Get the list of vehicles in the depot */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
198 BuildDepotVehicleList(vehicle_type, tile, &list, &list); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
199 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
200 for (uint i = 0; i < list.Length(); i++) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
201 CommandCost ret = DoCommand(tile, list[i]->index, 1, flags, sell_command); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
202 if (CmdSucceeded(ret)) cost.AddCost(ret); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
203 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
204 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
205 if (cost.GetCost() == 0) return CMD_ERROR; // no vehicles to sell |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
206 return cost; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
207 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
208 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
209 /** Autoreplace all vehicles in the depot |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
210 * Note: this command can make incorrect cost estimations |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
211 * Luckily the final price can only drop, not increase. This is due to the fact that |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
212 * estimation can't predict wagon removal so it presumes worst case which is no income from selling wagons. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
213 * @param tile Tile of the depot where the vehicles are |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
214 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
215 * @param p1 Type of vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
216 * @param p2 If bit 0 is set, then either replace all or nothing (instead of replacing until money runs out) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
217 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
218 CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
219 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
220 VehicleList list; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
221 CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
222 VehicleType vehicle_type = (VehicleType)GB(p1, 0, 8); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
223 bool all_or_nothing = HasBit(p2, 0); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
224 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
225 if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
226 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
227 /* Get the list of vehicles in the depot */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
228 BuildDepotVehicleList(vehicle_type, tile, &list, &list, true); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
229 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
230 bool did_something = false; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
231 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
232 for (uint i = 0; i < list.Length(); i++) { |
12015
f51061a22830
(svn r16421) -Codechange: do not unnecessarily remove constness or unnecessarily add it.
rubidium <rubidium@openttd.org>
parents:
11987
diff
changeset
|
233 const Vehicle *v = list[i]; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
234 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
235 /* Ensure that the vehicle completely in the depot */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
236 if (!v->IsInDepot()) continue; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
237 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
238 CommandCost ret = DoCommand(0, v->index, 0, flags, CMD_AUTOREPLACE_VEHICLE); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
239 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
240 if (CmdSucceeded(ret)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
241 did_something = true; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
242 cost.AddCost(ret); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
243 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
244 if (ret.GetErrorMessage() != STR_AUTOREPLACE_NOTHING_TO_DO && all_or_nothing) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
245 /* We failed to replace a vehicle even though we set all or nothing. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
246 * We should never reach this if DC_EXEC is set since then it should |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
247 * have failed the estimation guess. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
248 assert(!(flags & DC_EXEC)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
249 /* Now we will have to return an error. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
250 return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
251 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
252 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
253 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
254 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
255 if (!did_something) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
256 /* Either we didn't replace anything or something went wrong. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
257 * Either way we want to return an error and not execute this command. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
258 cost = CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
259 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
260 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
261 return cost; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
262 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
263 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
264 /** Test if a name is unique among vehicle names. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
265 * @param name Name to test. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
266 * @return True ifffffff the name is unique. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
267 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
268 static bool IsUniqueVehicleName(const char *name) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
269 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
270 const Vehicle *v; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
271 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
272 FOR_ALL_VEHICLES(v) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
273 if (v->name != NULL && strcmp(v->name, name) == 0) return false; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
274 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
275 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
276 return true; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
277 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
278 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
279 /** Clone the custom name of a vehicle, adding or incrementing a number. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
280 * @param src Source vehicle, with a custom name. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
281 * @param dst Destination vehicle. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
282 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
283 static void CloneVehicleName(const Vehicle *src, Vehicle *dst) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
284 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
285 char buf[256]; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
286 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
287 /* Find the position of the first digit in the last group of digits. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
288 size_t number_position; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
289 for (number_position = strlen(src->name); number_position > 0; number_position--) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
290 /* The design of UTF-8 lets this work simply without having to check |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
291 * for UTF-8 sequences. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
292 if (src->name[number_position - 1] < '0' || src->name[number_position - 1] > '9') break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
293 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
294 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
295 /* Format buffer and determine starting number. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
296 int num; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
297 if (number_position == strlen(src->name)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
298 /* No digit at the end, so start at number 2. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
299 strecpy(buf, src->name, lastof(buf)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
300 strecat(buf, " ", lastof(buf)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
301 number_position = strlen(buf); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
302 num = 2; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
303 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
304 /* Found digits, parse them and start at the next number. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
305 strecpy(buf, src->name, lastof(buf)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
306 buf[number_position] = '\0'; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
307 num = strtol(&src->name[number_position], NULL, 10) + 1; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
308 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
309 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
310 /* Check if this name is already taken. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
311 for (int max_iterations = 1000; max_iterations > 0; max_iterations--, num++) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
312 /* Attach the number to the temporary name. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
313 seprintf(&buf[number_position], lastof(buf), "%d", num); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
314 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
315 /* Check the name is unique. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
316 if (IsUniqueVehicleName(buf)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
317 dst->name = strdup(buf); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
318 break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
319 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
320 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
321 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
322 /* All done. If we didn't find a name, it'll just use its default. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
323 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
324 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
325 /** Clone a vehicle. If it is a train, it will clone all the cars too |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
326 * @param tile tile of the depot where the cloned vehicle is build |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
327 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
328 * @param p1 the original vehicle's index |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
329 * @param p2 1 = shared orders, else copied orders |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
330 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
331 CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
332 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
333 CommandCost total_cost(EXPENSES_NEW_VEHICLES); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
334 uint32 build_argument = 2; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
335 |
11949
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
336 Vehicle *v = Vehicle::GetIfValid(p1); |
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
337 if (v == NULL) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
338 Vehicle *v_front = v; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
339 Vehicle *w = NULL; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
340 Vehicle *w_front = NULL; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
341 Vehicle *w_rear = NULL; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
342 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
343 /* |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
344 * v_front is the front engine in the original vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
345 * v is the car/vehicle of the original vehicle, that is currently being copied |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
346 * w_front is the front engine of the cloned vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
347 * w is the car/vehicle currently being cloned |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
348 * w_rear is the rear end of the cloned train. It's used to add more cars and is only used by trains |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
349 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
350 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
351 if (!CheckOwnership(v->owner)) return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
352 |
12300
7ec79afe8c18
(svn r16717) -Codechange: make IsFrontEngine() member of Train
smatz <smatz@openttd.org>
parents:
12228
diff
changeset
|
353 if (v->type == VEH_TRAIN && (!Train::From(v)->IsFrontEngine() || Train::From(v)->crash_anim_pos >= 4400)) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
354 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
355 /* check that we can allocate enough vehicles */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
356 if (!(flags & DC_EXEC)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
357 int veh_counter = 0; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
358 do { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
359 veh_counter++; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
360 } while ((v = v->Next()) != NULL); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
361 |
11900
46d45a7511f9
(svn r16300) -Codechange: reduce usage of Vehicle::AllocateList
smatz <smatz@openttd.org>
parents:
11730
diff
changeset
|
362 if (!Vehicle::CanAllocateItem(veh_counter)) { |
11730
a39da1e4c1f5
(svn r16118) -Change/cleanup: remove the hexadecimal 'in TTD the string had this ID' from 'some' strings and replace the string name with something more sensible.
rubidium <rubidium@openttd.org>
parents:
11368
diff
changeset
|
363 return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
364 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
365 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
366 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
367 v = v_front; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
368 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
369 do { |
12302
fc8e41f34b8c
(svn r16719) -Codechange: make IsArticulatedPart(), IsTrainEngine(), IsTrainWagon(), IsMultiheaded(), EngineHasArticPart() and IsRearDualheaded() members of Train
smatz <smatz@openttd.org>
parents:
12300
diff
changeset
|
370 if (v->type == VEH_TRAIN && Train::From(v)->IsRearDualheaded()) { |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
371 /* we build the rear ends of multiheaded trains with the front ones */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
372 continue; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
373 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
374 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
375 CommandCost cost = DoCommand(tile, v->engine_type, build_argument, flags, GetCmdBuildVeh(v)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
376 build_argument = 3; // ensure that we only assign a number to the first engine |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
377 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
378 if (CmdFailed(cost)) return cost; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
379 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
380 total_cost.AddCost(cost); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
381 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
382 if (flags & DC_EXEC) { |
11922
0a4b63f3f3c3
(svn r16325) -Codechange: replace GetPoolItem(index) by PoolItem::Get(index)
smatz <smatz@openttd.org>
parents:
11900
diff
changeset
|
383 w = Vehicle::Get(_new_vehicle_id); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
384 |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
385 if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_REVERSE_DIRECTION)) { |
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
386 SetBit(Train::From(w)->flags, VRF_REVERSE_DIRECTION); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
387 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
388 |
12300
7ec79afe8c18
(svn r16717) -Codechange: make IsFrontEngine() member of Train
smatz <smatz@openttd.org>
parents:
12228
diff
changeset
|
389 if (v->type == VEH_TRAIN && !Train::From(v)->IsFrontEngine()) { |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
390 /* this s a train car |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
391 * add this unit to the end of the train */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
392 CommandCost result = DoCommand(0, (w_rear->index << 16) | w->index, 1, flags, CMD_MOVE_RAIL_VEHICLE); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
393 if (CmdFailed(result)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
394 /* The train can't be joined to make the same consist as the original. |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
395 * Sell what we already made (clean up) and return an error. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
396 DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
397 DoCommand(w_front->tile, w->index, 1, flags, GetCmdSellVeh(w)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
398 return result; // return error and the message returned from CMD_MOVE_RAIL_VEHICLE |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
399 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
400 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
401 /* this is a front engine or not a train. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
402 w_front = w; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
403 w->service_interval = v->service_interval; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
404 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
405 w_rear = w; // trains needs to know the last car in the train, so they can add more in next loop |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
406 } |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
407 } while (v->type == VEH_TRAIN && (v = GetNextVehicle(Train::From(v))) != NULL); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
408 |
12082
d092f17a921d
(svn r16491) -Codechange: Added parentheses around bitwise operators for code style.
alberth <alberth@openttd.org>
parents:
12032
diff
changeset
|
409 if ((flags & DC_EXEC) && v_front->type == VEH_TRAIN) { |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
410 /* for trains this needs to be the front engine due to the callback function */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
411 _new_vehicle_id = w_front->index; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
412 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
413 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
414 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
415 /* Cloned vehicles belong to the same group */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
416 DoCommand(0, v_front->group_id, w_front->index, flags, CMD_ADD_VEHICLE_GROUP); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
417 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
418 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
419 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
420 /* Take care of refitting. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
421 w = w_front; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
422 v = v_front; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
423 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
424 /* Both building and refitting are influenced by newgrf callbacks, which |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
425 * makes it impossible to accurately estimate the cloning costs. In |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
426 * particular, it is possible for engines of the same type to be built with |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
427 * different numbers of articulated parts, so when refitting we have to |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
428 * loop over real vehicles first, and then the articulated parts of those |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
429 * vehicles in a different loop. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
430 do { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
431 do { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
432 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
433 assert(w != NULL); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
434 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
435 if (w->cargo_type != v->cargo_type || w->cargo_subtype != v->cargo_subtype) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
436 CommandCost cost = DoCommand(0, w->index, v->cargo_type | (v->cargo_subtype << 8) | 1U << 16 , flags, GetCmdRefitVeh(v)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
437 if (CmdSucceeded(cost)) total_cost.AddCost(cost); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
438 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
439 |
12305
217431f4bc67
(svn r16722) -Codechange: unify the naming of the Is/Set/HasArticulatedPart functions
rubidium <rubidium@openttd.org>
parents:
12304
diff
changeset
|
440 if (w->type == VEH_TRAIN && Train::From(w)->HasArticulatedPart()) { |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
441 w = GetNextArticPart(Train::From(w)); |
12305
217431f4bc67
(svn r16722) -Codechange: unify the naming of the Is/Set/HasArticulatedPart functions
rubidium <rubidium@openttd.org>
parents:
12304
diff
changeset
|
442 } else if (w->type == VEH_ROAD && RoadVehicle::From(w)->HasArticulatedPart()) { |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
443 w = w->Next(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
444 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
445 break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
446 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
447 } else { |
11922
0a4b63f3f3c3
(svn r16325) -Codechange: replace GetPoolItem(index) by PoolItem::Get(index)
smatz <smatz@openttd.org>
parents:
11900
diff
changeset
|
448 const Engine *e = Engine::Get(v->engine_type); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
449 CargoID initial_cargo = (e->CanCarryCargo() ? e->GetDefaultCargoType() : (CargoID)CT_INVALID); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
450 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
451 if (v->cargo_type != initial_cargo && initial_cargo != CT_INVALID) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
452 total_cost.AddCost(GetRefitCost(v->engine_type)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
453 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
454 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
455 |
12305
217431f4bc67
(svn r16722) -Codechange: unify the naming of the Is/Set/HasArticulatedPart functions
rubidium <rubidium@openttd.org>
parents:
12304
diff
changeset
|
456 if (v->type == VEH_TRAIN && Train::From(v)->HasArticulatedPart()) { |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
457 v = GetNextArticPart(Train::From(v)); |
12305
217431f4bc67
(svn r16722) -Codechange: unify the naming of the Is/Set/HasArticulatedPart functions
rubidium <rubidium@openttd.org>
parents:
12304
diff
changeset
|
458 } else if (v->type == VEH_ROAD && RoadVehicle::From(v)->HasArticulatedPart()) { |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
459 v = v->Next(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
460 } else { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
461 break; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
462 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
463 } while (v != NULL); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
464 |
12114
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
465 if ((flags & DC_EXEC) && v->type == VEH_TRAIN) w = GetNextVehicle(Train::From(w)); |
f020ec6be498
(svn r16527) -Codechange: use static member functions instead of simple casts when converting Vehicle to specialised vehicle types. Includes safety check
smatz <smatz@openttd.org>
parents:
12082
diff
changeset
|
466 } while (v->type == VEH_TRAIN && (v = GetNextVehicle(Train::From(v))) != NULL); |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
467 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
468 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
469 /* |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
470 * Set the orders of the vehicle. Cannot do it earlier as we need |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
471 * the vehicle refitted before doing this, otherwise the moved |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
472 * cargo types might not match (passenger vs non-passenger) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
473 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
474 DoCommand(0, (v_front->index << 16) | w_front->index, p2 & 1 ? CO_SHARE : CO_COPY, flags, CMD_CLONE_ORDER); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
475 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
476 /* Now clone the vehicle's name, if it has one. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
477 if (v_front->name != NULL) CloneVehicleName(v_front, w_front); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
478 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
479 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
480 /* Since we can't estimate the cost of cloning a vehicle accurately we must |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
481 * check whether the company has enough money manually. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
482 if (!CheckCompanyHasMoney(total_cost)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
483 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
484 /* The vehicle has already been bought, so now it must be sold again. */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
485 DoCommand(w_front->tile, w_front->index, 1, flags, GetCmdSellVeh(w_front)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
486 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
487 return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
488 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
489 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
490 return total_cost; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
491 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
492 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
493 /** |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
494 * Send all vehicles of type to depots |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
495 * @param type type of vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
496 * @param flags the flags used for DoCommand() |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
497 * @param service should the vehicles only get service in the depots |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
498 * @param owner owner of the vehicles to send |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
499 * @param vlw_flag tells what kind of list requested the goto depot |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
500 * @return 0 for success and CMD_ERROR if no vehicle is able to go to depot |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
501 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
502 CommandCost SendAllVehiclesToDepot(VehicleType type, DoCommandFlag flags, bool service, Owner owner, uint16 vlw_flag, uint32 id) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
503 { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
504 VehicleList list; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
505 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
506 GenerateVehicleSortList(&list, type, owner, id, vlw_flag); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
507 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
508 /* Send all the vehicles to a depot */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
509 for (uint i = 0; i < list.Length(); i++) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
510 const Vehicle *v = list[i]; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
511 CommandCost ret = DoCommand(v->tile, v->index, (service ? 1 : 0) | DEPOT_DONT_CANCEL, flags, GetCmdSendToDepot(type)); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
512 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
513 /* Return 0 if DC_EXEC is not set this is a valid goto depot command) |
11361
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11354
diff
changeset
|
514 * In this case we know that at least one vehicle can be sent to a depot |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11354
diff
changeset
|
515 * and we will issue the command. We can now safely quit the loop, knowing |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11354
diff
changeset
|
516 * it will succeed at least once. With DC_EXEC we really need to send them to the depot */ |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
517 if (CmdSucceeded(ret) && !(flags & DC_EXEC)) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
518 return CommandCost(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
519 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
520 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
521 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
522 return (flags & DC_EXEC) ? CommandCost() : CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
523 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
524 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
525 /** Give a custom name to your vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
526 * @param tile unused |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
527 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
528 * @param p1 vehicle ID to name |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
529 * @param p2 unused |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
530 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
531 CommandCost CmdRenameVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
532 { |
11949
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
533 Vehicle *v = Vehicle::GetIfValid(p1); |
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
534 if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
535 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
536 bool reset = StrEmpty(text); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
537 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
538 if (!reset) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
539 if (strlen(text) >= MAX_LENGTH_VEHICLE_NAME_BYTES) return CMD_ERROR; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
540 if (!(flags & DC_AUTOREPLACE) && !IsUniqueVehicleName(text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
541 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
542 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
543 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
544 free(v->name); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
545 v->name = reset ? NULL : strdup(text); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
546 InvalidateWindowClassesData(WC_TRAINS_LIST, 1); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
547 MarkWholeScreenDirty(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
548 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
549 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
550 return CommandCost(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
551 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
552 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
553 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
554 /** Change the service interval of a vehicle |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
555 * @param tile unused |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
556 * @param flags type of operation |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
557 * @param p1 vehicle ID that is being service-interval-changed |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
558 * @param p2 new service interval |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
559 */ |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
560 CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
561 { |
11949
c89301974eb8
(svn r16352) -Codechange: use PoolItem::GetIfValid() instead of PoolItem::IsValidID() and PoolItem::Get()
smatz <smatz@openttd.org>
parents:
11924
diff
changeset
|
562 Vehicle *v = Vehicle::GetIfValid(p1); |
12032
2afeb10ae6ba
(svn r16439) -Change: Make the default vehicle servicing settings company-based settings, so in a multiplayer game everyone can change them.
yexo <yexo@openttd.org>
parents:
12015
diff
changeset
|
563 if (v == NULL || !CheckOwnership(v->owner)) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
564 |
12032
2afeb10ae6ba
(svn r16439) -Change: Make the default vehicle servicing settings company-based settings, so in a multiplayer game everyone can change them.
yexo <yexo@openttd.org>
parents:
12015
diff
changeset
|
565 uint16 serv_int = GetServiceIntervalClamped(p2, v->owner); // Double check the service interval from the user-input |
2afeb10ae6ba
(svn r16439) -Change: Make the default vehicle servicing settings company-based settings, so in a multiplayer game everyone can change them.
yexo <yexo@openttd.org>
parents:
12015
diff
changeset
|
566 if (serv_int != p2) return CMD_ERROR; |
11349
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
567 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
568 if (flags & DC_EXEC) { |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
569 v->service_interval = serv_int; |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
570 InvalidateWindow(WC_VEHICLE_DETAILS, v->index); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
571 } |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
572 |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
573 return CommandCost(); |
bf07f69e1221
(svn r15699) -Codechange: split Cmd* from vehicle.cpp to vehicle_cmd.cpp.
rubidium <rubidium@openttd.org>
parents:
diff
changeset
|
574 } |