author | frosch |
Sat, 13 Dec 2008 18:25:42 +0000 | |
changeset 10419 | d9a1fa739477 |
parent 10208 | 72c00af5c95d |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
6117
6507b2a7e71d
(svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents:
6100
diff
changeset
|
3 |
/** @file aircraft_cmd.cpp |
6507b2a7e71d
(svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents:
6100
diff
changeset
|
4 |
* This file deals with aircraft and airport movements functionalities */ |
6507b2a7e71d
(svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents:
6100
diff
changeset
|
5 |
|
0 | 6 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1877
diff
changeset
|
7 |
#include "openttd.h" |
3963
6cab57074a9a
(svn r5124) Add IsAircraftInHangar{Stopped,}(), which supersedes CheckStoppedInHangar()
tron
parents:
3955
diff
changeset
|
8 |
#include "aircraft.h" |
1299
39c06aba09aa
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1282
diff
changeset
|
9 |
#include "debug.h" |
6453
226bcddeba32
(svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents:
6415
diff
changeset
|
10 |
#include "landscape.h" |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3186
diff
changeset
|
11 |
#include "station_map.h" |
6980
c7c4f3bf5901
(svn r10236) -Feature: Introduce a form of timetabling for vehicles.
maedhros
parents:
6953
diff
changeset
|
12 |
#include "timetable.h" |
8962
1b263c69799d
(svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents:
8891
diff
changeset
|
13 |
#include "depot_func.h" |
8763
81fadd257f67
(svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents:
8677
diff
changeset
|
14 |
#include "news_func.h" |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
15 |
#include "aircraft.h" |
0 | 16 |
#include "airport.h" |
1752
d65cd19f7117
(svn r2256) - Fix: Trains cannot find a depot when they are in a tunnel. (glx)
matthijs
parents:
1614
diff
changeset
|
17 |
#include "vehicle_gui.h" |
2962
f0a49b646c48
(svn r3524) - Split newgrf features from engine.[ch] into newgrf_engine.[ch], and add the new files to project files.
peter1138
parents:
2952
diff
changeset
|
18 |
#include "newgrf_engine.h" |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
19 |
#include "newgrf_callbacks.h" |
4244
d40c73c55357
(svn r5822) - NewGRF: add support for callback 31, vehicle start/stop check. This allows a set to disallow a vehicle from being started, i.e. to not be able to leave the depot. This is almost a partner to callback 1D.
peter1138
parents:
4242
diff
changeset
|
20 |
#include "newgrf_text.h" |
4656
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
21 |
#include "newgrf_sound.h" |
5972
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
22 |
#include "spritecache.h" |
6340
df75644b9f06
(svn r9352) -Codechange: Use cargo class to determine if an aircraft should carry mail
peter1138
parents:
6334
diff
changeset
|
23 |
#include "cargotype.h" |
8114
dd6d21dc99c1
(svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents:
8108
diff
changeset
|
24 |
#include "strings_func.h" |
8116
8da76dcb3287
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
8114
diff
changeset
|
25 |
#include "command_func.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8116
diff
changeset
|
26 |
#include "window_func.h" |
8140
0d0d8c94f84b
(svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents:
8139
diff
changeset
|
27 |
#include "date_func.h" |
8144
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8140
diff
changeset
|
28 |
#include "vehicle_func.h" |
8157
1505def01945
(svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium
parents:
8145
diff
changeset
|
29 |
#include "sound_func.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8116
diff
changeset
|
30 |
#include "functions.h" |
8211
29a8510dfd62
(svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium
parents:
8157
diff
changeset
|
31 |
#include "variables.h" |
8965
29a591456a2f
(svn r12757) -Codechange: move all cheat related stuff from all over the place to a single location.
rubidium
parents:
8962
diff
changeset
|
32 |
#include "cheat_func.h" |
8212
cf3fce5c7464
(svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location.
rubidium
parents:
8211
diff
changeset
|
33 |
#include "autoreplace_func.h" |
cf3fce5c7464
(svn r11775) -Codechange: move all autoreplace/autorenew functions to a single location.
rubidium
parents:
8211
diff
changeset
|
34 |
#include "autoreplace_gui.h" |
8224
c5a64d87cc54
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents:
8212
diff
changeset
|
35 |
#include "gfx_func.h" |
10208
72c00af5c95d
(svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
rubidium
parents:
10207
diff
changeset
|
36 |
#include "company_func.h" |
8270
e7c342f6b14c
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8264
diff
changeset
|
37 |
#include "settings_type.h" |
8784
c2e9d649a9ce
(svn r12488) -Codechange: split order.h into order_base.h and order_func.h.
rubidium
parents:
8778
diff
changeset
|
38 |
#include "order_func.h" |
9009
6684576ef32b
(svn r12804) -Codechange: move the effect vehicle handling out of vehicle.cpp
rubidium
parents:
9000
diff
changeset
|
39 |
#include "effectvehicle_func.h" |
0 | 40 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
41 |
#include "table/strings.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
42 |
#include "table/sprites.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
43 |
|
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
44 |
void Aircraft::UpdateDeltaXY(Direction direction) |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
45 |
{ |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
46 |
uint32 x; |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
47 |
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0) |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
48 |
switch (this->subtype) { |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
49 |
default: NOT_REACHED(); |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
50 |
case AIR_AIRCRAFT: |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
51 |
case AIR_HELICOPTER: |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
52 |
switch (this->u.air.state) { |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
53 |
case ENDTAKEOFF: |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
54 |
case LANDING: |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
55 |
case HELILANDING: |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
56 |
case FLYING: x = MKIT(24, 24, -1, -1); break; |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
57 |
default: x = MKIT( 2, 2, -1, -1); break; |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
58 |
} |
8793
5e35232593c3
(svn r12531) -Codechange: Rename some variables for consistency.
frosch
parents:
8786
diff
changeset
|
59 |
this->z_extent = 5; |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
60 |
break; |
8793
5e35232593c3
(svn r12531) -Codechange: Rename some variables for consistency.
frosch
parents:
8786
diff
changeset
|
61 |
case AIR_SHADOW: this->z_extent = 1; x = MKIT(2, 2, 0, 0); break; |
5e35232593c3
(svn r12531) -Codechange: Rename some variables for consistency.
frosch
parents:
8786
diff
changeset
|
62 |
case AIR_ROTOR: this->z_extent = 1; x = MKIT(2, 2, -1, -1); break; |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
63 |
} |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
64 |
#undef MKIT |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
65 |
|
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
66 |
this->x_offs = GB(x, 0, 8); |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
67 |
this->y_offs = GB(x, 8, 8); |
8793
5e35232593c3
(svn r12531) -Codechange: Rename some variables for consistency.
frosch
parents:
8786
diff
changeset
|
68 |
this->x_extent = GB(x, 16, 8); |
5e35232593c3
(svn r12531) -Codechange: Rename some variables for consistency.
frosch
parents:
8786
diff
changeset
|
69 |
this->y_extent = GB(x, 24, 8); |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
70 |
} |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
71 |
|
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
72 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
73 |
/** this maps the terminal to its corresponding state and block flag |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
74 |
* currently set for 10 terms, 4 helipads */ |
5754
086187883012
(svn r8305) -Codechange: defining 'static const' in a header is a bit weird.
truelight
parents:
5668
diff
changeset
|
75 |
static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22}; |
086187883012
(svn r8305) -Codechange: defining 'static const' in a header is a bit weird.
truelight
parents:
5668
diff
changeset
|
76 |
static const byte _airport_terminal_flag[] = {0, 1, 2, 3, 4, 5, 22, 23, 0, 0, 6, 7, 24, 25}; |
086187883012
(svn r8305) -Codechange: defining 'static const' in a header is a bit weird.
truelight
parents:
5668
diff
changeset
|
77 |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
78 |
static bool AirportMove(Vehicle *v, const AirportFTAClass *apc); |
6087 | 79 |
static bool AirportSetBlocks(Vehicle *v, const AirportFTA *current_pos, const AirportFTAClass *apc); |
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
80 |
static bool AirportHasBlock(Vehicle *v, const AirportFTA *current_pos, const AirportFTAClass *apc); |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
81 |
static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *apc); |
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
82 |
static bool AirportFindFreeHelipad(Vehicle *v, const AirportFTAClass *apc); |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
83 |
static void CrashAirplane(Vehicle *v); |
0 | 84 |
|
8891
1058c3b69b7f
(svn r12658) -Codechange: unify a vast portion of the CmdSend<VehicleType>ToDepot commands.
rubidium
parents:
8890
diff
changeset
|
85 |
void AircraftNextAirportPos_and_Order(Vehicle *v); |
0 | 86 |
static byte GetAircraftFlyingAltitude(const Vehicle *v); |
87 |
||
88 |
static const SpriteID _aircraft_sprite[] = { |
|
89 |
0x0EB5, 0x0EBD, 0x0EC5, 0x0ECD, |
|
90 |
0x0ED5, 0x0EDD, 0x0E9D, 0x0EA5, |
|
91 |
0x0EAD, 0x0EE5, 0x0F05, 0x0F0D, |
|
92 |
0x0F15, 0x0F1D, 0x0F25, 0x0F2D, |
|
93 |
0x0EED, 0x0EF5, 0x0EFD, 0x0F35, |
|
94 |
0x0E9D, 0x0EA5, 0x0EAD, 0x0EB5, |
|
95 |
0x0EBD, 0x0EC5 |
|
96 |
}; |
|
97 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
98 |
/** Helicopter rotor animation states */ |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
99 |
enum HelicopterRotorStates { |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
100 |
HRS_ROTOR_STOPPED, |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
101 |
HRS_ROTOR_MOVING_1, |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
102 |
HRS_ROTOR_MOVING_2, |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
103 |
HRS_ROTOR_MOVING_3, |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
104 |
}; |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
105 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
106 |
/** Find the nearest hangar to v |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
107 |
* INVALID_STATION is returned, if the company does not have any suitable |
1532
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
108 |
* airports (like helipads only) |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
109 |
* @param v vehicle looking for a hangar |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
110 |
* @return the StationID if one is found, otherwise, INVALID_STATION |
1532
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
111 |
*/ |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
112 |
static StationID FindNearestHangar(const Vehicle *v) |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
113 |
{ |
1532
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
114 |
const Station *st; |
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
115 |
uint best = 0; |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
116 |
StationID index = INVALID_STATION; |
4284
ea9579c54725
(svn r5914) -Fix [FS#235]: Bugfix for errors in FindNearestHangar function in aircraft_cmd.c (mart3p).
Darkvater
parents:
4261
diff
changeset
|
117 |
TileIndex vtile = TileVirtXY(v->x_pos, v->y_pos); |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
118 |
|
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
119 |
FOR_ALL_STATIONS(st) { |
6025 | 120 |
if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue; |
1204
747d1f630eda
(svn r1708) - Fix: FindNearestHangar() will no longer return a hangar where a jet will crash if it is a jet, that is searching
bjarni
parents:
1200
diff
changeset
|
121 |
|
6032 | 122 |
const AirportFTAClass *afc = st->Airport(); |
6025 | 123 |
if (afc->nof_depots == 0 || ( |
124 |
/* don't crash the plane if we know it can't land at the airport */ |
|
125 |
afc->flags & AirportFTAClass::SHORT_STRIP && |
|
126 |
AircraftVehInfo(v->engine_type)->subtype & AIR_FAST && |
|
127 |
!_cheats.no_jetcrash.value |
|
128 |
)) { |
|
129 |
continue; |
|
130 |
} |
|
1532
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
131 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
132 |
/* v->tile can't be used here, when aircraft is flying v->tile is set to 0 */ |
6025 | 133 |
uint distance = DistanceSquare(vtile, st->airport_tile); |
134 |
if (distance < best || index == INVALID_STATION) { |
|
135 |
best = distance; |
|
136 |
index = st->index; |
|
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
137 |
} |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
138 |
} |
1532
a69fdc89b5fc
(svn r2036) Fix FindNearestHanger(), it never worked correctly because 0xFFFF != 65000 and a 16bit number has no 17th bit
tron
parents:
1530
diff
changeset
|
139 |
return index; |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
140 |
} |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
141 |
|
1614
f6f2c918356d
(svn r2118) - Fix: Fix compilation with network disabled, and comment out some of the warnings (unused function)
Darkvater
parents:
1533
diff
changeset
|
142 |
#if 0 |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
143 |
/** Check if given vehicle has a goto hangar in his orders |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
144 |
* @param v vehicle to inquiry |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
145 |
* @return true if vehicle v has an airport in the schedule, that has a hangar */ |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
146 |
static bool HaveHangarInOrderList(Vehicle *v) |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
147 |
{ |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
148 |
const Order *order; |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
149 |
|
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
150 |
FOR_VEHICLE_ORDERS(v, order) { |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
151 |
const Station *st = GetStation(order->station); |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
152 |
if (st->owner == v->owner && st->facilities & FACIL_AIRPORT) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
153 |
/* If an airport doesn't have a hangar, skip it */ |
6032 | 154 |
if (st->Airport()->nof_depots != 0) |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
155 |
return true; |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
156 |
} |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
157 |
} |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
158 |
|
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
159 |
return false; |
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
160 |
} |
1614
f6f2c918356d
(svn r2118) - Fix: Fix compilation with network disabled, and comment out some of the warnings (unused function)
Darkvater
parents:
1533
diff
changeset
|
161 |
#endif |
1194
2b25b1477623
(svn r1698) - Feature [autoreplace] helicopters will now go to the nearest hangar if they are set to autoreplace and don't have any airport with a hangar in
bjarni
parents:
1151
diff
changeset
|
162 |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
163 |
SpriteID Aircraft::GetImage(Direction direction) const |
0 | 164 |
{ |
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
165 |
uint8 spritenum = this->spritenum; |
0 | 166 |
|
167 |
if (is_custom_sprite(spritenum)) { |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
168 |
SpriteID sprite = GetCustomVehicleSprite(this, direction); |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
169 |
if (sprite != 0) return sprite; |
0 | 170 |
|
9070
dd0121143eba
(svn r12924) -Feature: Introducing the so called 'engine pool' which primarily removes the fixed engine type limits and also happens to allow (with the patch option 'dynamic_engines') multiple NewGRF vehicle sets to coexist.
peter1138
parents:
9022
diff
changeset
|
171 |
spritenum = GetEngine(this->engine_type)->image_index; |
0 | 172 |
} |
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
173 |
|
0 | 174 |
return direction + _aircraft_sprite[spritenum]; |
175 |
} |
|
176 |
||
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
177 |
SpriteID GetRotorImage(const Vehicle *v) |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
178 |
{ |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
179 |
assert(v->subtype == AIR_HELICOPTER); |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
180 |
|
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
181 |
const Vehicle *w = v->Next()->Next(); |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
182 |
if (is_custom_sprite(v->spritenum)) { |
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
183 |
SpriteID sprite = GetCustomRotorSprite(v, false); |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
184 |
if (sprite != 0) return sprite; |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
185 |
} |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
186 |
|
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
187 |
/* Return standard rotor sprites if there are no custom sprites for this helicopter */ |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
188 |
return SPR_ROTOR_STOPPED + w->u.air.state; |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
189 |
} |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
190 |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
191 |
static SpriteID GetAircraftIcon(EngineID engine) |
0 | 192 |
{ |
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
193 |
uint8 spritenum = AircraftVehInfo(engine)->image_index; |
0 | 194 |
|
381
527e47c8feec
(svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents:
337
diff
changeset
|
195 |
if (is_custom_sprite(spritenum)) { |
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
196 |
SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W); |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
197 |
if (sprite != 0) return sprite; |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
198 |
|
9070
dd0121143eba
(svn r12924) -Feature: Introducing the so called 'engine pool' which primarily removes the fixed engine type limits and also happens to allow (with the patch option 'dynamic_engines') multiple NewGRF vehicle sets to coexist.
peter1138
parents:
9022
diff
changeset
|
199 |
spritenum = GetEngine(engine)->image_index; |
9012
45ec06d1d831
(svn r12809) -Fix (r1704): Possible out of bounds array access.
peter1138
parents:
9009
diff
changeset
|
200 |
} |
381
527e47c8feec
(svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents:
337
diff
changeset
|
201 |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
202 |
return 6 + _aircraft_sprite[spritenum]; |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
203 |
} |
381
527e47c8feec
(svn r570) -newgrf: Support for custom aircrafts via GRF files. Planeset seems to work :). Also use aircraft_vehinfo() instead of the old tables (pasky).
darkvater
parents:
337
diff
changeset
|
204 |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
205 |
void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal) |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
206 |
{ |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
207 |
DrawSprite(GetAircraftIcon(engine), pal, x, y); |
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
208 |
|
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
209 |
if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) { |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
210 |
SpriteID rotor_sprite = GetCustomRotorIcon(engine); |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
211 |
if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED; |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5651
diff
changeset
|
212 |
DrawSprite(rotor_sprite, PAL_NONE, x, y - 5); |
1200
d5ef134866de
(svn r1704) - Fix: [newgrf] rotors of custom helicopters are displayed correctly in the hangar window
dominik
parents:
1197
diff
changeset
|
213 |
} |
0 | 214 |
} |
215 |
||
5972
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
216 |
/** Get the size of the sprite of an aircraft sprite heading west (used for lists) |
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
217 |
* @param engine The engine to get the sprite from |
6409
2dc181151153
(svn r9545) -Documentation: Some corrections to previous doxygen work
belugas
parents:
6407
diff
changeset
|
218 |
* @param width The width of the sprite |
2dc181151153
(svn r9545) -Documentation: Some corrections to previous doxygen work
belugas
parents:
6407
diff
changeset
|
219 |
* @param height The height of the sprite |
5972
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
220 |
*/ |
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
221 |
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height) |
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
222 |
{ |
10056
48659f7d4fa5
(svn r14223) -Codechange: make GetSprite aware of the 4 different types of sprites: fonts, recolour, mapgen and normal sprites.
rubidium
parents:
9923
diff
changeset
|
223 |
const Sprite *spr = GetSprite(GetAircraftIcon(engine), ST_NORMAL); |
5972
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
224 |
|
9022
8fa9e902b06e
(svn r12824) -Codechange: Standardise routines for drawing vehicle images, using correct types and less duplication.
peter1138
parents:
9019
diff
changeset
|
225 |
width = spr->width; |
5972
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
226 |
height = spr->height; |
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
227 |
} |
59953719a3ff
(svn r8661) -Fix: [depot windows] Enlarge the blocks in the depot window if a sprite is too big to fit (ships and aircraft only)
bjarni
parents:
5952
diff
changeset
|
228 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
229 |
static CommandCost EstimateAircraftCost(EngineID engine, const AircraftVehicleInfo *avi) |
0 | 230 |
{ |
9923
3056bf623139
(svn r14078) -Codechange: Rename *VehicleInfo::base_cost to cost_factor, indicating what it actually is.
peter1138
parents:
9921
diff
changeset
|
231 |
return CommandCost(EXPENSES_NEW_VEHICLES, GetEngineProperty(engine, 0x0B, avi->cost_factor) * (_price.aircraft_base >> 3) >> 5); |
0 | 232 |
} |
233 |
||
234 |
||
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
235 |
/** |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
236 |
* Calculates cargo capacity based on an aircraft's passenger |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
237 |
* and mail capacities. |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
238 |
* @param cid Which cargo type to calculate a capacity for. |
6409
2dc181151153
(svn r9545) -Documentation: Some corrections to previous doxygen work
belugas
parents:
6407
diff
changeset
|
239 |
* @param avi Which engine to find a cargo capacity for. |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
240 |
* @return New cargo capacity value. |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
241 |
*/ |
6087 | 242 |
uint16 AircraftDefaultCargoCapacity(CargoID cid, const AircraftVehicleInfo *avi) |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
243 |
{ |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
244 |
assert(cid != CT_INVALID); |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
245 |
|
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
246 |
/* An aircraft can carry twice as much goods as normal cargo, |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
247 |
* and four times as many passengers. */ |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
248 |
switch (cid) { |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
249 |
case CT_PASSENGERS: |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
250 |
return avi->passenger_capacity; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
251 |
case CT_MAIL: |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
252 |
return avi->passenger_capacity + avi->mail_capacity; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
253 |
case CT_GOODS: |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
254 |
return (avi->passenger_capacity + avi->mail_capacity) / 2; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
255 |
default: |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
256 |
return (avi->passenger_capacity + avi->mail_capacity) / 4; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
257 |
} |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
258 |
} |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
259 |
|
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
260 |
/** Build an aircraft. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3421
diff
changeset
|
261 |
* @param tile tile of depot where aircraft is built |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
262 |
* @param flags for command |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
263 |
* @param p1 aircraft type being built (engine) |
9628
981ba3800c35
(svn r13691) -Codechange: make it easier to determine whether a command is ran in the context of autoreplace or not
smatz
parents:
9413
diff
changeset
|
264 |
* @param p2 unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
265 |
* return result of operation. Could be cost, error |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
266 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
267 |
CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 268 |
{ |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
269 |
if (!IsEngineBuildable(p1, VEH_AIRCRAFT, _current_company)) return_cmd_error(STR_AIRCRAFT_NOT_AVAILABLE); |
1196
67f7f3017d99
(svn r1700) - Fix: Hacked clients can no longer be used to build vehicles that are not available yet (Hackykid)
bjarni
parents:
1195
diff
changeset
|
270 |
|
5920 | 271 |
const AircraftVehicleInfo *avi = AircraftVehInfo(p1); |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
272 |
CommandCost value = EstimateAircraftCost(p1, avi); |
1226
f0cb2c427b84
(svn r1730) - Fix: Ships and Aircrafts have to be build in depots owned by _current_player (hacked client protection)
bjarni
parents:
1209
diff
changeset
|
273 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
274 |
/* to just query the cost, it is not neccessary to have a valid tile (automation/AI) */ |
2423
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
275 |
if (flags & DC_QUERY_COST) return value; |
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
276 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
277 |
if (!IsHangarTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR; |
1226
f0cb2c427b84
(svn r1730) - Fix: Ships and Aircrafts have to be build in depots owned by _current_player (hacked client protection)
bjarni
parents:
1209
diff
changeset
|
278 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
279 |
/* Prevent building aircraft types at places which can't handle them */ |
7683
13e6fb7baa57
(svn r11214) -Fix [FS#1296]: planes can't use heliports so refuse these orders
glx
parents:
7642
diff
changeset
|
280 |
if (!CanAircraftUseStation(p1, tile)) return CMD_ERROR; |
4161
60e38778d90b
(svn r5594) Be more strict what's allowed to be built in a hangar: if the airport can't handle planes/helicopters don't present and disallow building planes/helicopters - the latter case wasn't covered yet.
tron
parents:
4111
diff
changeset
|
281 |
|
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
282 |
/* Allocate 2 or 3 vehicle structs, depending on type |
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
283 |
* vl[0] = aircraft, vl[1] = shadow, [vl[2] = rotor] */ |
6087 | 284 |
Vehicle *vl[3]; |
7398
b933416cf32b
(svn r10770) -Codechange: use the pool item class as super class for the vehicle struct.
rubidium
parents:
7266
diff
changeset
|
285 |
if (!Vehicle::AllocateList(vl, avi->subtype & AIR_CTOL ? 2 : 3)) { |
2639 | 286 |
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME); |
287 |
} |
|
0 | 288 |
|
9628
981ba3800c35
(svn r13691) -Codechange: make it easier to determine whether a command is ran in the context of autoreplace or not
smatz
parents:
9413
diff
changeset
|
289 |
UnitID unit_num = (flags & DC_AUTOREPLACE) ? 0 : GetFreeUnitNumber(VEH_AIRCRAFT); |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
290 |
if (unit_num > _settings_game.vehicle.max_aircraft) |
0 | 291 |
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME); |
292 |
||
293 |
if (flags & DC_EXEC) { |
|
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
294 |
Vehicle *v = vl[0]; // aircraft |
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
295 |
Vehicle *u = vl[1]; // shadow |
0 | 296 |
|
6552
d87268e08799
(svn r9754) -Codechange: make classes for all vehicle types, so we can make nicer/better maintainable code, i.e. virtual methods instead of switches.
rubidium
parents:
6550
diff
changeset
|
297 |
v = new (v) Aircraft(); |
d87268e08799
(svn r9754) -Codechange: make classes for all vehicle types, so we can make nicer/better maintainable code, i.e. virtual methods instead of switches.
rubidium
parents:
6550
diff
changeset
|
298 |
u = new (u) Aircraft(); |
7782
e2999b5fcfad
(svn r11332) -Fix: vehicles getting a value of 0 on construction.
rubidium
parents:
7700
diff
changeset
|
299 |
v->unitnumber = unit_num; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5585
diff
changeset
|
300 |
v->direction = DIR_SE; |
0 | 301 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
302 |
v->owner = u->owner = _current_company; |
0 | 303 |
|
304 |
v->tile = tile; |
|
305 |
// u->tile = 0; |
|
306 |
||
6087 | 307 |
uint x = TileX(tile) * TILE_SIZE + 5; |
308 |
uint y = TileY(tile) * TILE_SIZE + 3; |
|
0 | 309 |
|
310 |
v->x_pos = u->x_pos = x; |
|
311 |
v->y_pos = u->y_pos = y; |
|
312 |
||
313 |
u->z_pos = GetSlopeZ(x, y); |
|
314 |
v->z_pos = u->z_pos + 1; |
|
315 |
||
8556
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
316 |
v->running_ticks = 0; |
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
317 |
|
0 | 318 |
// u->delta_x = u->delta_y = 0; |
319 |
||
320 |
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL; |
|
4175
b79ec8a94d4e
(svn r5613) Rename VS_DISASTER to VS_SHADOW, because this is what this flag actually means
tron
parents:
4161
diff
changeset
|
321 |
u->vehstatus = VS_HIDDEN | VS_UNCLICKABLE | VS_SHADOW; |
0 | 322 |
|
538
24fdb517fbe5
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
534
diff
changeset
|
323 |
v->spritenum = avi->image_index; |
0 | 324 |
// v->cargo_count = u->number_of_pieces = 0; |
325 |
||
922
10035216cbaf
(svn r1410) Replaced all occurences of 'passanger' by 'passenger' in the code
celestar
parents:
919
diff
changeset
|
326 |
v->cargo_cap = avi->passenger_capacity; |
538
24fdb517fbe5
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
534
diff
changeset
|
327 |
u->cargo_cap = avi->mail_capacity; |
0 | 328 |
|
329 |
v->cargo_type = CT_PASSENGERS; |
|
330 |
u->cargo_type = CT_MAIL; |
|
331 |
||
3870
d9ebc4ea750a
(svn r4910) - NewGRF: add and initialize cargo subtype for vehicle visual variations
peter1138
parents:
3816
diff
changeset
|
332 |
v->cargo_subtype = 0; |
d9ebc4ea750a
(svn r4910) - NewGRF: add and initialize cargo subtype for vehicle visual variations
peter1138
parents:
3816
diff
changeset
|
333 |
|
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
334 |
v->name = NULL; |
0 | 335 |
// v->next_order_param = v->next_order = 0; |
336 |
||
337 |
// v->load_unload_time_rem = 0; |
|
338 |
// v->progress = 0; |
|
1266
eccd576e322f
(svn r1770) -Fix: Hopefully last pieces of code that are containing a station-id
truelight
parents:
1263
diff
changeset
|
339 |
v->last_station_visited = INVALID_STATION; |
0 | 340 |
// v->destination_coords = 0; |
341 |
||
538
24fdb517fbe5
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
534
diff
changeset
|
342 |
v->max_speed = avi->max_speed; |
24fdb517fbe5
(svn r920) Replace vehicle info macros with inline functions and add asserts to check limits
tron
parents:
534
diff
changeset
|
343 |
v->acceleration = avi->acceleration; |
2477
225b2916fe2a
(svn r3003) Change int, uint, uin16 and byte to EngineID where appropriate, plus some related changes (mostly casts)
tron
parents:
2475
diff
changeset
|
344 |
v->engine_type = p1; |
10419
d9a1fa739477
(svn r14672) -Fix [FS#2444]: Property 7 and callback 12 were broken for aircraft.
frosch
parents:
10208
diff
changeset
|
345 |
u->engine_type = p1; |
0 | 346 |
|
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
347 |
v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER); |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
348 |
v->UpdateDeltaXY(INVALID_DIR); |
6990
136a08baf0ed
(svn r10246) -Fix (r10297): some forgotten money conversions and truncation issues. Thanks to benc for providing the patch.
rubidium
parents:
6980
diff
changeset
|
349 |
v->value = value.GetCost(); |
0 | 350 |
|
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
351 |
u->subtype = AIR_SHADOW; |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
352 |
u->UpdateDeltaXY(INVALID_DIR); |
0 | 353 |
|
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
354 |
/* Danger, Will Robinson! |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
355 |
* If the aircraft is refittable, but cannot be refitted to |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
356 |
* passengers, we select the cargo type from the refit mask. |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
357 |
* This is a fairly nasty hack to get around the fact that TTD |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
358 |
* has no default cargo type specifier for planes... */ |
6087 | 359 |
CargoID cargo = FindFirstRefittableCargo(p1); |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
360 |
if (cargo != CT_INVALID && cargo != CT_PASSENGERS) { |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
361 |
uint16 callback = CALLBACK_FAILED; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
362 |
|
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
363 |
v->cargo_type = cargo; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
364 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7923
diff
changeset
|
365 |
if (HasBit(EngInfo(p1)->callbackmask, CBM_VEHICLE_REFIT_CAPACITY)) { |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
366 |
callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v); |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
367 |
} |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
368 |
|
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
369 |
if (callback == CALLBACK_FAILED) { |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
370 |
/* Callback failed, or not executed; use the default cargo capacity */ |
6087 | 371 |
v->cargo_cap = AircraftDefaultCargoCapacity(v->cargo_type, avi); |
3973
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
372 |
} else { |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
373 |
v->cargo_cap = callback; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
374 |
} |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
375 |
|
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
376 |
/* Set the 'second compartent' capacity to none */ |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
377 |
u->cargo_cap = 0; |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
378 |
} |
9d3cd1ed6ac0
(svn r5146) - NewGRF: Support selection of aircraft default cargo type by checking its refit mask. If aircraft can be refitted to passengers, no change happens, else the first refittable type is chosen. Also use refit capacity to determine the default capacity.
peter1138
parents:
3963
diff
changeset
|
379 |
|
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
380 |
const Engine *e = GetEngine(p1); |
0 | 381 |
v->reliability = e->reliability; |
382 |
v->reliability_spd_dec = e->reliability_spd_dec; |
|
383 |
v->max_age = e->lifelength * 366; |
|
384 |
||
2564 | 385 |
_new_vehicle_id = v->index; |
0 | 386 |
|
2423
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
387 |
/* When we click on hangar we know the tile it is on. By that we know |
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
388 |
* its position in the array of depots the airport has.....we can search |
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
389 |
* layout for #th position of depot. Since layout must start with a listing |
4266590b549d
(svn r2949) The AI no longer needs to 'cheat' to build aircraft; eg it builds them now from a hangar. Also, to query the price of a new aircraft tile information is not needed
Darkvater
parents:
2422
diff
changeset
|
390 |
* of all depots, it is simple */ |
5921 | 391 |
for (uint i = 0;; i++) { |
6237
69427b23257f
(svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents:
6193
diff
changeset
|
392 |
const Station *st = GetStationByTile(tile); |
69427b23257f
(svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents:
6193
diff
changeset
|
393 |
const AirportFTAClass *apc = st->Airport(); |
69427b23257f
(svn r9040) -Codechange: the build window and CmdBuildAircraft() now shares the code to figure out if an aircraft is buildable in the hangar in question
bjarni
parents:
6193
diff
changeset
|
394 |
|
5921 | 395 |
assert(i != apc->nof_depots); |
396 |
if (st->airport_tile + ToTileIndexDiff(apc->airport_depots[i]) == tile) { |
|
397 |
assert(apc->layout[i].heading == HANGAR); |
|
398 |
v->u.air.pos = apc->layout[i].position; |
|
399 |
break; |
|
0 | 400 |
} |
401 |
} |
|
402 |
||
403 |
v->u.air.state = HANGAR; |
|
404 |
v->u.air.previous_pos = v->u.air.pos; |
|
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3186
diff
changeset
|
405 |
v->u.air.targetairport = GetStationIndex(tile); |
7493
07944c9e005f
(svn r11004) -Codechange: some reworks of the saveload mechanism to be able to save and load private and protected variables in the vehicle struct.
rubidium
parents:
7492
diff
changeset
|
406 |
v->SetNext(u); |
0 | 407 |
|
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
408 |
v->service_interval = _settings_game.vehicle.servint_aircraft; |
0 | 409 |
|
410 |
v->date_of_last_service = _date; |
|
4329
0e6e689f66e7
(svn r6002) -Cleanup: remove the now redundant BASE_YEAR constant.
rubidium
parents:
4293
diff
changeset
|
411 |
v->build_year = u->build_year = _cur_year; |
0 | 412 |
|
413 |
v->cur_image = u->cur_image = 0xEA0; |
|
414 |
||
2804
ea4080819175
(svn r3352) - NewGRF: Move initialization of vehicle random_bits to DC_EXEC blocks to allow use of Random() instead of InteractiveRandom(), which will alleviate some possible network desyncs.
peter1138
parents:
2752
diff
changeset
|
415 |
v->random_bits = VehicleRandomBits(); |
ea4080819175
(svn r3352) - NewGRF: Move initialization of vehicle random_bits to DC_EXEC blocks to allow use of Random() instead of InteractiveRandom(), which will alleviate some possible network desyncs.
peter1138
parents:
2752
diff
changeset
|
416 |
u->random_bits = VehicleRandomBits(); |
ea4080819175
(svn r3352) - NewGRF: Move initialization of vehicle random_bits to DC_EXEC blocks to allow use of Random() instead of InteractiveRandom(), which will alleviate some possible network desyncs.
peter1138
parents:
2752
diff
changeset
|
417 |
|
6176
153f0f24dc1b
(svn r8946) -Feature: [NewGRF] Add support for vehicle variables 0xFE and 0xFF bit 10,
maedhros
parents:
6175
diff
changeset
|
418 |
v->vehicle_flags = 0; |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
419 |
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE); |
6176
153f0f24dc1b
(svn r8946) -Feature: [NewGRF] Add support for vehicle variables 0xFE and 0xFF bit 10,
maedhros
parents:
6175
diff
changeset
|
420 |
|
6490
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
421 |
UpdateAircraftCache(v); |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
422 |
|
0 | 423 |
VehiclePositionChanged(v); |
424 |
VehiclePositionChanged(u); |
|
425 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
426 |
/* Aircraft with 3 vehicles (chopper)? */ |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
427 |
if (v->subtype == AIR_HELICOPTER) { |
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
428 |
Vehicle *w = vl[2]; |
0 | 429 |
|
6552
d87268e08799
(svn r9754) -Codechange: make classes for all vehicle types, so we can make nicer/better maintainable code, i.e. virtual methods instead of switches.
rubidium
parents:
6550
diff
changeset
|
430 |
w = new (w) Aircraft(); |
10419
d9a1fa739477
(svn r14672) -Fix [FS#2444]: Property 7 and callback 12 were broken for aircraft.
frosch
parents:
10208
diff
changeset
|
431 |
w->engine_type = p1; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5585
diff
changeset
|
432 |
w->direction = DIR_N; |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
433 |
w->owner = _current_company; |
0 | 434 |
w->x_pos = v->x_pos; |
435 |
w->y_pos = v->y_pos; |
|
436 |
w->z_pos = v->z_pos + 5; |
|
437 |
w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE; |
|
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
438 |
w->spritenum = 0xFF; |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
439 |
w->subtype = AIR_ROTOR; |
2517
6e3832ddd0f6
(svn r3046) Replace some numbers with sprite names and fix a typo in the sprite list
tron
parents:
2504
diff
changeset
|
440 |
w->cur_image = SPR_ROTOR_STOPPED; |
2804
ea4080819175
(svn r3352) - NewGRF: Move initialization of vehicle random_bits to DC_EXEC blocks to allow use of Random() instead of InteractiveRandom(), which will alleviate some possible network desyncs.
peter1138
parents:
2752
diff
changeset
|
441 |
w->random_bits = VehicleRandomBits(); |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
442 |
/* Use rotor's air.state to store the rotor animation frame */ |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
443 |
w->u.air.state = HRS_ROTOR_STOPPED; |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
444 |
w->UpdateDeltaXY(INVALID_DIR); |
7493
07944c9e005f
(svn r11004) -Codechange: some reworks of the saveload mechanism to be able to save and load private and protected variables in the vehicle struct.
rubidium
parents:
7492
diff
changeset
|
445 |
|
07944c9e005f
(svn r11004) -Codechange: some reworks of the saveload mechanism to be able to save and load private and protected variables in the vehicle struct.
rubidium
parents:
7492
diff
changeset
|
446 |
u->SetNext(w); |
0 | 447 |
VehiclePositionChanged(w); |
448 |
} |
|
449 |
||
4739
e626ef1b522e
(svn r6651) -Coding feature: added the windowevent WE_INVALIDATE_DATA
bjarni
parents:
4732
diff
changeset
|
450 |
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
451 |
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0); |
0 | 452 |
InvalidateWindow(WC_COMPANY, v->owner); |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
453 |
if (IsLocalCompany()) |
7425
d9bc116f2f54
(svn r10823) -Fix r8610 [FS#1097]: the autoreplace window vehicle count didn't always update correctly) (Matthias)
bjarni
parents:
7398
diff
changeset
|
454 |
InvalidateAutoreplaceWindow(v->engine_type, v->group_id); //updates the replace Aircraft window |
5944
6d059cc8662b
(svn r8610) -Codechange/Feature: rewrote the list handling in the autoreplace window
bjarni
parents:
5924
diff
changeset
|
455 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
456 |
GetCompany(_current_company)->num_engines[p1]++; |
0 | 457 |
} |
458 |
||
459 |
return value; |
|
460 |
} |
|
461 |
||
462 |
||
410 | 463 |
static void DoDeleteAircraft(Vehicle *v) |
0 | 464 |
{ |
465 |
DeleteWindowById(WC_VEHICLE_VIEW, v->index); |
|
466 |
InvalidateWindow(WC_COMPANY, v->owner); |
|
5256
9056fd4b30f4
(svn r7386) -Codechange r7385: moved deletion of the vehicle highlight from DeleteVehicle to the sell commands as they are not called as often
bjarni
parents:
5215
diff
changeset
|
467 |
DeleteDepotHighlightOfVehicle(v); |
0 | 468 |
DeleteVehicleChain(v); |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
469 |
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0); |
0 | 470 |
} |
471 |
||
1786
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1752
diff
changeset
|
472 |
/** Sell an aircraft. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3421
diff
changeset
|
473 |
* @param tile unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
474 |
* @param flags for command type |
1786
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1752
diff
changeset
|
475 |
* @param p1 vehicle ID to be sold |
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1752
diff
changeset
|
476 |
* @param p2 unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
477 |
* @return result of operation. Error or sold value |
1786
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1752
diff
changeset
|
478 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
479 |
CommandCost CmdSellAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 480 |
{ |
4352
6703cd8d39e0
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
481 |
if (!IsValidVehicleID(p1)) return CMD_ERROR; |
0 | 482 |
|
6087 | 483 |
Vehicle *v = GetVehicle(p1); |
0 | 484 |
|
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6247
diff
changeset
|
485 |
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR; |
7490
bb27d92565d3
(svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents:
7425
diff
changeset
|
486 |
if (!v->IsStoppedInDepot()) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED); |
0 | 487 |
|
7695
4b27fd86b318
(svn r11229) -Fix [FS#1307]: one could sell vehicles that were crashed in a depot, which would still yield money.
rubidium
parents:
7683
diff
changeset
|
488 |
if (HASBITS(v->vehstatus, VS_CRASHED)) return_cmd_error(STR_CAN_T_SELL_DESTROYED_VEHICLE); |
4b27fd86b318
(svn r11229) -Fix [FS#1307]: one could sell vehicles that were crashed in a depot, which would still yield money.
rubidium
parents:
7683
diff
changeset
|
489 |
|
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8226
diff
changeset
|
490 |
CommandCost ret(EXPENSES_NEW_VEHICLES, -v->value); |
7782
e2999b5fcfad
(svn r11332) -Fix: vehicles getting a value of 0 on construction.
rubidium
parents:
7700
diff
changeset
|
491 |
|
0 | 492 |
if (flags & DC_EXEC) { |
493 |
// Invalidate depot |
|
494 |
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); |
|
495 |
DoDeleteAircraft(v); |
|
496 |
} |
|
497 |
||
7782
e2999b5fcfad
(svn r11332) -Fix: vehicles getting a value of 0 on construction.
rubidium
parents:
7700
diff
changeset
|
498 |
return ret; |
0 | 499 |
} |
500 |
||
8890
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
501 |
bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
502 |
{ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
503 |
const Station *st = GetTargetAirportIfValid(this); |
8890
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
504 |
/* If the station is not a valid airport or if it has no hangars */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
505 |
if (st == NULL || st->Airport()->nof_depots == 0) { |
8890
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
506 |
/* the aircraft has to search for a hangar on its own */ |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
507 |
StationID station = FindNearestHangar(this); |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
508 |
|
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
509 |
if (station == INVALID_STATION) return false; |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
510 |
|
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
511 |
st = GetStation(station); |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
512 |
} |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
513 |
|
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
514 |
if (location != NULL) *location = st->xy; |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
515 |
if (destination != NULL) *destination = st->index; |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
516 |
|
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
517 |
return true; |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
518 |
} |
8a0fa7ff70a0
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
rubidium
parents:
8864
diff
changeset
|
519 |
|
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
520 |
/** Send an aircraft to the hangar. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3421
diff
changeset
|
521 |
* @param tile unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
522 |
* @param flags for command type |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
523 |
* @param p1 vehicle ID to send to the hangar |
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
524 |
* @param p2 various bitmasked elements |
4506
e6a56518135c
(svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents:
4463
diff
changeset
|
525 |
* - p2 bit 0-3 - DEPOT_ flags (see vehicle.h) |
e6a56518135c
(svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents:
4463
diff
changeset
|
526 |
* - p2 bit 8-10 - VLW flag (for mass goto depot) |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
527 |
* @return o if everything went well |
1793
b9a37c98b468
(svn r2297) - CodeChange: server-check the next batch of commands.
Darkvater
parents:
1790
diff
changeset
|
528 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
529 |
CommandCost CmdSendAircraftToHangar(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 530 |
{ |
4506
e6a56518135c
(svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents:
4463
diff
changeset
|
531 |
if (p2 & DEPOT_MASS_SEND) { |
e6a56518135c
(svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents:
4463
diff
changeset
|
532 |
/* Mass goto depot requested */ |
4546
507b7d9bd834
(svn r6378) -Codechange: Rename VLW_FLAGS to VLW_MASK as it is a mask
Darkvater
parents:
4544
diff
changeset
|
533 |
if (!ValidVLWFlags(p2 & VLW_MASK)) return CMD_ERROR; |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
534 |
return SendAllVehiclesToDepot(VEH_AIRCRAFT, flags, p2 & DEPOT_SERVICE, _current_company, (p2 & VLW_MASK), p1); |
4463
4d67d3a36fc5
(svn r6246) -Feature: added the many times requested "send all vehicle to depot" button
bjarni
parents:
4451
diff
changeset
|
535 |
} |
4d67d3a36fc5
(svn r6246) -Feature: added the many times requested "send all vehicle to depot" button
bjarni
parents:
4451
diff
changeset
|
536 |
|
4506
e6a56518135c
(svn r6291) -Feature: Vehicle lists from the station window now also got the goto depot button
bjarni
parents:
4463
diff
changeset
|
537 |
if (!IsValidVehicleID(p1)) return CMD_ERROR; |
1237
1c7a3f9c94b9
(svn r1741) - Fix: added IsVehicleIndex() so it's possible to protect GetVehicle() from reading an invalid vehicle index
bjarni
parents:
1235
diff
changeset
|
538 |
|
6087 | 539 |
Vehicle *v = GetVehicle(p1); |
0 | 540 |
|
8891
1058c3b69b7f
(svn r12658) -Codechange: unify a vast portion of the CmdSend<VehicleType>ToDepot commands.
rubidium
parents:
8890
diff
changeset
|
541 |
if (v->type != VEH_AIRCRAFT) return CMD_ERROR; |
8843
45fdf630deaa
(svn r12593) -Codechange: hide Order's flags in most of the code.
rubidium
parents:
8842
diff
changeset
|
542 |
|
8891
1058c3b69b7f
(svn r12658) -Codechange: unify a vast portion of the CmdSend<VehicleType>ToDepot commands.
rubidium
parents:
8890
diff
changeset
|
543 |
return v->SendToDepot(flags, (DepotCommand)(p2 & DEPOT_COMMAND_MASK)); |
0 | 544 |
} |
545 |
||
546 |
||
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
547 |
/** Refits an aircraft to the specified cargo type. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3421
diff
changeset
|
548 |
* @param tile unused |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
549 |
* @param flags for command type |
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
550 |
* @param p1 vehicle ID of the aircraft to refit |
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
551 |
* @param p2 various bitstuffed elements |
2635 | 552 |
* - p2 = (bit 0-7) - the new cargo type to refit to |
3954
7b51d0046efb
(svn r5103) - Add cargo subtype parameter to refit commands (mart3p)
peter1138
parents:
3948
diff
changeset
|
553 |
* - p2 = (bit 8-15) - the new cargo subtype to refit to |
6546
4c6d90bde803
(svn r9742) -Fix (r9689) [FS#739]: Fix cloning with refit costs again, hopefully for good this time.
maedhros
parents:
6502
diff
changeset
|
554 |
* - p2 = (bit 16) - refit only this vehicle (ignored) |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
555 |
* @return cost of refit or error |
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
556 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6643
diff
changeset
|
557 |
CommandCost CmdRefitAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 558 |
{ |
3954
7b51d0046efb
(svn r5103) - Add cargo subtype parameter to refit commands (mart3p)
peter1138
parents:
3948
diff
changeset
|
559 |
byte new_subtype = GB(p2, 8, 8); |
0 | 560 |
|
4352
6703cd8d39e0
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
561 |
if (!IsValidVehicleID(p1)) return CMD_ERROR; |
0 | 562 |
|
6087 | 563 |
Vehicle *v = GetVehicle(p1); |
1237
1c7a3f9c94b9
(svn r1741) - Fix: added IsVehicleIndex() so it's possible to protect GetVehicle() from reading an invalid vehicle index
bjarni
parents:
1235
diff
changeset
|
564 |
|
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6247
diff
changeset
|
565 |
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR; |
7490
bb27d92565d3
(svn r11001) -Codechange: unify the way to determine whether a vehicle is in a depot.
rubidium
parents:
7425
diff
changeset
|
566 |
if (!v->IsStoppedInDepot()) return_cmd_error(STR_A01B_AIRCRAFT_MUST_BE_STOPPED); |
8145
2116aa2c6263
(svn r11707) -Fix: do not allow refitting flooded (destroyed) vehicles
smatz
parents:
8144
diff
changeset
|
567 |
if (v->vehstatus & VS_CRASHED) return_cmd_error(STR_CAN_T_REFIT_DESTROYED_VEHICLE); |
1237
1c7a3f9c94b9
(svn r1741) - Fix: added IsVehicleIndex() so it's possible to protect GetVehicle() from reading an invalid vehicle index
bjarni
parents:
1235
diff
changeset
|
568 |
|
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
569 |
/* Check cargo */ |
6087 | 570 |
CargoID new_cid = GB(p2, 0, 8); |
6316
d2b70e10f106
(svn r9259) -Codechange: NUM_CARGO isn't a valid cargo type...
peter1138
parents:
6263
diff
changeset
|
571 |
if (new_cid >= NUM_CARGO || !CanRefitTo(v->engine_type, new_cid)) return CMD_ERROR; |
0 | 572 |
|
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
573 |
/* Check the refit capacity callback */ |
6087 | 574 |
uint16 callback = CALLBACK_FAILED; |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7923
diff
changeset
|
575 |
if (HasBit(EngInfo(v->engine_type)->callbackmask, CBM_VEHICLE_REFIT_CAPACITY)) { |
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
576 |
/* Back up the existing cargo type */ |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
577 |
CargoID temp_cid = v->cargo_type; |
3988
fcb1549e4d4c
(svn r5187) - NewGRF: temporarily change a vehicle's cargo subtype when calling the refit capacity callback.
peter1138
parents:
3987
diff
changeset
|
578 |
byte temp_subtype = v->cargo_subtype; |
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
579 |
v->cargo_type = new_cid; |
3988
fcb1549e4d4c
(svn r5187) - NewGRF: temporarily change a vehicle's cargo subtype when calling the refit capacity callback.
peter1138
parents:
3987
diff
changeset
|
580 |
v->cargo_subtype = new_subtype; |
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
581 |
|
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
582 |
callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v); |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
583 |
|
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
584 |
/* Restore the cargo type */ |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
585 |
v->cargo_type = temp_cid; |
3988
fcb1549e4d4c
(svn r5187) - NewGRF: temporarily change a vehicle's cargo subtype when calling the refit capacity callback.
peter1138
parents:
3987
diff
changeset
|
586 |
v->cargo_subtype = temp_subtype; |
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
587 |
} |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
588 |
|
6087 | 589 |
const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type); |
590 |
||
591 |
uint pass; |
|
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
592 |
if (callback == CALLBACK_FAILED) { |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
593 |
/* If the callback failed, or wasn't executed, use the aircraft's |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
594 |
* default cargo capacity */ |
6087 | 595 |
pass = AircraftDefaultCargoCapacity(new_cid, avi); |
3974
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
596 |
} else { |
08b438ca3429
(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
peter1138
parents:
3973
diff
changeset
|
597 |
pass = callback; |
0 | 598 |
} |
3008
cef26520c91e
(svn r3588) - Refit: Use only one global to return the refit capacity rather than one per vehicle type.
peter1138
parents:
3005
diff
changeset
|
599 |
_returned_refit_capacity = pass; |
0 | 600 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6943
diff
changeset
|
601 |
CommandCost cost; |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
602 |
if (IsHumanCompany(v->owner) && new_cid != v->cargo_type) { |
4544
69f1248a2d97
(svn r6376) -Codechange: [vehicle refit] moved all refit cost calculations into GetRefitCost()
bjarni
parents:
4529
diff
changeset
|
603 |
cost = GetRefitCost(v->engine_type); |
0 | 604 |
} |
605 |
||
606 |
if (flags & DC_EXEC) { |
|
607 |
v->cargo_cap = pass; |
|
608 |
||
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
609 |
Vehicle *u = v->Next(); |
6340
df75644b9f06
(svn r9352) -Codechange: Use cargo class to determine if an aircraft should carry mail
peter1138
parents:
6334
diff
changeset
|
610 |
uint mail = IsCargoInClass(new_cid, CC_PASSENGERS) ? avi->mail_capacity : 0; |
0 | 611 |
u->cargo_cap = mail; |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
612 |
v->cargo.Truncate(v->cargo_type == new_cid ? pass : 0); |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
613 |
u->cargo.Truncate(v->cargo_type == new_cid ? mail : 0); |
1802
da61740cc1e7
(svn r2306) - CodeChange: Check the last commands; refits. This needed an extensive rewrite and global/local-cargo ID juggling and bitmasking. However with this done it looks better as well and is compatible with newgrf handling. Big thanks to HackyKid for doing most of the work. This also closes patch "[ 1199277 ] Command checks"
Darkvater
parents:
1793
diff
changeset
|
614 |
v->cargo_type = new_cid; |
3954
7b51d0046efb
(svn r5103) - Add cargo subtype parameter to refit commands (mart3p)
peter1138
parents:
3948
diff
changeset
|
615 |
v->cargo_subtype = new_subtype; |
0 | 616 |
InvalidateWindow(WC_VEHICLE_DETAILS, v->index); |
3722
0984901a2744
(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
peter1138
parents:
3710
diff
changeset
|
617 |
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
618 |
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0); |
0 | 619 |
} |
620 |
||
621 |
return cost; |
|
622 |
} |
|
623 |
||
624 |
||
625 |
static void CheckIfAircraftNeedsService(Vehicle *v) |
|
626 |
{ |
|
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
627 |
if (_settings_game.vehicle.servint_aircraft == 0 || !v->NeedsAutomaticServicing()) return; |
7502
f821f134ec5a
(svn r11017) -Codechange: unify determining whether a vehicle needs/can be service a little more.
rubidium
parents:
7493
diff
changeset
|
628 |
if (v->IsInDepot()) { |
4529
18bd5e7e35aa
(svn r6356) -Fix: FS#263 planes come out of hangar and drive back into hangar
bjarni
parents:
4527
diff
changeset
|
629 |
VehicleServiceInDepot(v); |
18bd5e7e35aa
(svn r6356) -Fix: FS#263 planes come out of hangar and drive back into hangar
bjarni
parents:
4527
diff
changeset
|
630 |
return; |
18bd5e7e35aa
(svn r6356) -Fix: FS#263 planes come out of hangar and drive back into hangar
bjarni
parents:
4527
diff
changeset
|
631 |
} |
18bd5e7e35aa
(svn r6356) -Fix: FS#263 planes come out of hangar and drive back into hangar
bjarni
parents:
4527
diff
changeset
|
632 |
|
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
633 |
const Station *st = GetStation(v->current_order.GetDestination()); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
634 |
/* only goto depot if the target airport has terminals (eg. it is airport) */ |
6032 | 635 |
if (st->IsValid() && st->airport_tile != 0 && st->Airport()->terminals != NULL) { |
0 | 636 |
// printf("targetairport = %d, st->index = %d\n", v->u.air.targetairport, st->index); |
637 |
// v->u.air.targetairport = st->index; |
|
8864
76e142d103e9
(svn r12631) -Fix [FS#1911]: sometimes aircraft couldn't find their way to their depot.
rubidium
parents:
8862
diff
changeset
|
638 |
v->current_order.MakeGoToDepot(st->index, ODTFB_SERVICE); |
8350
8979cccdbed2
(svn r11916) -Codechange: use enums from VehicleViewWindowWidgets instead of constants
smatz
parents:
8329
diff
changeset
|
639 |
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH); |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
640 |
} else if (v->current_order.IsType(OT_GOTO_DEPOT)) { |
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
641 |
v->current_order.MakeDummy(); |
8350
8979cccdbed2
(svn r11916) -Codechange: use enums from VehicleViewWindowWidgets instead of constants
smatz
parents:
8329
diff
changeset
|
642 |
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH); |
0 | 643 |
} |
644 |
} |
|
645 |
||
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
646 |
void Aircraft::OnNewDay() |
0 | 647 |
{ |
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
648 |
if (!IsNormalAircraft(this)) return; |
19
6080d2b6a959
(svn r20) Feature: warning when a vehicle has invalid orders (celestar)
dominik
parents:
11
diff
changeset
|
649 |
|
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
650 |
if ((++this->day_counter & 7) == 0) DecreaseVehicleValue(this); |
0 | 651 |
|
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
652 |
CheckOrders(this); |
0 | 653 |
|
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
654 |
CheckVehicleBreakdown(this); |
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
655 |
AgeVehicle(this); |
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
656 |
CheckIfAircraftNeedsService(this); |
0 | 657 |
|
8556
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
658 |
if (this->running_ticks == 0) return; |
0 | 659 |
|
8556
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
660 |
CommandCost cost(EXPENSES_AIRCRAFT_RUN, GetVehicleProperty(this, 0x0E, AircraftVehInfo(this->engine_type)->running_cost) * _price.aircraft_running * this->running_ticks / (364 * DAY_TICKS)); |
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
661 |
|
8556
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
662 |
this->profit_this_year -= cost.GetCost(); |
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
663 |
this->running_ticks = 0; |
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
664 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
665 |
SubtractMoneyFromCompanyFract(this->owner, cost); |
8467
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
666 |
|
605661f3a91c
(svn r12037) -Codechange: replace OnNewDay_(Aircraft|RoadVeh|Ship|Train) with an OnNewDay method in the Vehicle class
glx
parents:
8369
diff
changeset
|
667 |
InvalidateWindow(WC_VEHICLE_DETAILS, this->index); |
1055
cc4f60cc9102
(svn r1556) -Fix: Vehicle list updates should now really work
Celestar
parents:
1053
diff
changeset
|
668 |
InvalidateWindowClasses(WC_AIRCRAFT_LIST); |
0 | 669 |
} |
670 |
||
6247 | 671 |
void AircraftYearlyLoop() |
0 | 672 |
{ |
673 |
Vehicle *v; |
|
674 |
||
675 |
FOR_ALL_VEHICLES(v) { |
|
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6247
diff
changeset
|
676 |
if (v->type == VEH_AIRCRAFT && IsNormalAircraft(v)) { |
0 | 677 |
v->profit_last_year = v->profit_this_year; |
678 |
v->profit_this_year = 0; |
|
679 |
InvalidateWindow(WC_VEHICLE_DETAILS, v->index); |
|
680 |
} |
|
681 |
} |
|
682 |
} |
|
683 |
||
684 |
static void AgeAircraftCargo(Vehicle *v) |
|
685 |
{ |
|
2639 | 686 |
if (_age_cargo_skip_counter != 0) return; |
0 | 687 |
|
688 |
do { |
|
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
689 |
v->cargo.AgeCargo(); |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
690 |
v = v->Next(); |
2639 | 691 |
} while (v != NULL); |
0 | 692 |
} |
693 |
||
694 |
static void HelicopterTickHandler(Vehicle *v) |
|
695 |
{ |
|
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
696 |
Vehicle *u = v->Next()->Next(); |
0 | 697 |
|
2639 | 698 |
if (u->vehstatus & VS_HIDDEN) return; |
0 | 699 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
700 |
/* if true, helicopter rotors do not rotate. This should only be the case if a helicopter is |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
701 |
* loading/unloading at a terminal or stopped */ |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
702 |
if (v->current_order.IsType(OT_LOADING) || (v->vehstatus & VS_STOPPED)) { |
0 | 703 |
if (u->cur_speed != 0) { |
704 |
u->cur_speed++; |
|
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
705 |
if (u->cur_speed >= 0x80 && u->u.air.state == HRS_ROTOR_MOVING_3) { |
0 | 706 |
u->cur_speed = 0; |
707 |
} |
|
708 |
} |
|
709 |
} else { |
|
710 |
if (u->cur_speed == 0) |
|
711 |
u->cur_speed = 0x70; |
|
712 |
||
713 |
if (u->cur_speed >= 0x50) |
|
714 |
u->cur_speed--; |
|
715 |
} |
|
716 |
||
6087 | 717 |
int tick = ++u->tick_counter; |
718 |
int spd = u->cur_speed >> 4; |
|
0 | 719 |
|
6087 | 720 |
SpriteID img; |
0 | 721 |
if (spd == 0) { |
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
722 |
u->u.air.state = HRS_ROTOR_STOPPED; |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
723 |
img = GetRotorImage(v); |
2549 | 724 |
if (u->cur_image == img) return; |
0 | 725 |
} else if (tick >= spd) { |
726 |
u->tick_counter = 0; |
|
3710
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
727 |
u->u.air.state++; |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
728 |
if (u->u.air.state > HRS_ROTOR_MOVING_3) u->u.air.state = HRS_ROTOR_MOVING_1; |
44cf97e29c18
(svn r4653) - NewGRF: enable use of custom helicopter rotors in game (but not GUI windows yet) (mart3p)
peter1138
parents:
3701
diff
changeset
|
729 |
img = GetRotorImage(v); |
2549 | 730 |
} else { |
0 | 731 |
return; |
2549 | 732 |
} |
0 | 733 |
|
2549 | 734 |
u->cur_image = img; |
0 | 735 |
|
736 |
BeginVehicleMove(u); |
|
737 |
VehiclePositionChanged(u); |
|
738 |
EndVehicleMove(u); |
|
739 |
} |
|
740 |
||
741 |
static void SetAircraftPosition(Vehicle *v, int x, int y, int z) |
|
742 |
{ |
|
743 |
v->x_pos = x; |
|
744 |
v->y_pos = y; |
|
745 |
v->z_pos = z; |
|
746 |
||
7134
5b2d47128d05
(svn r10408) -Codechange: make GetImage a class method of Vehicle instead of Get(Aircraft|RoadVeh|Ship|Train)Image.
rubidium
parents:
7096
diff
changeset
|
747 |
v->cur_image = v->GetImage(v->direction); |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
748 |
if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v); |
0 | 749 |
|
750 |
BeginVehicleMove(v); |
|
751 |
VehiclePositionChanged(v); |
|
752 |
EndVehicleMove(v); |
|
753 |
||
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
754 |
Vehicle *u = v->Next(); |
0 | 755 |
|
7922
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7900
diff
changeset
|
756 |
int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE); |
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7900
diff
changeset
|
757 |
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE); |
0 | 758 |
u->x_pos = x; |
4259
422724d8c66a
(svn r5883) -Fix [FS#272]: use the height of the edge of the map for shadows of aircrafts that are outside the map; similar to r5841, caused by r5794.
rubidium
parents:
4244
diff
changeset
|
759 |
u->y_pos = y - ((v->z_pos-GetSlopeZ(safe_x, safe_y)) >> 3);; |
422724d8c66a
(svn r5883) -Fix [FS#272]: use the height of the edge of the map for shadows of aircrafts that are outside the map; similar to r5841, caused by r5794.
rubidium
parents:
4244
diff
changeset
|
760 |
|
7922
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7900
diff
changeset
|
761 |
safe_y = Clamp(u->y_pos, 0, MapMaxY() * TILE_SIZE); |
4259
422724d8c66a
(svn r5883) -Fix [FS#272]: use the height of the edge of the map for shadows of aircrafts that are outside the map; similar to r5841, caused by r5794.
rubidium
parents:
4244
diff
changeset
|
762 |
u->z_pos = GetSlopeZ(safe_x, safe_y); |
0 | 763 |
u->cur_image = v->cur_image; |
764 |
||
765 |
BeginVehicleMove(u); |
|
766 |
VehiclePositionChanged(u); |
|
767 |
EndVehicleMove(u); |
|
768 |
||
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
769 |
u = u->Next(); |
2639 | 770 |
if (u != NULL) { |
0 | 771 |
u->x_pos = x; |
772 |
u->y_pos = y; |
|
773 |
u->z_pos = z + 5; |
|
774 |
||
775 |
BeginVehicleMove(u); |
|
776 |
VehiclePositionChanged(u); |
|
777 |
EndVehicleMove(u); |
|
778 |
} |
|
779 |
} |
|
780 |
||
4725
40cccaaa042c
(svn r6637) -Codechange: merged all (vehicle type)EnterDepot into VehicleEnterDepot()
bjarni
parents:
4712
diff
changeset
|
781 |
/** Handle Aircraft specific tasks when a an Aircraft enters a hangar |
40cccaaa042c
(svn r6637) -Codechange: merged all (vehicle type)EnterDepot into VehicleEnterDepot()
bjarni
parents:
4712
diff
changeset
|
782 |
* @param *v Vehicle that enters the hangar |
40cccaaa042c
(svn r6637) -Codechange: merged all (vehicle type)EnterDepot into VehicleEnterDepot()
bjarni
parents:
4712
diff
changeset
|
783 |
*/ |
4732
4f1c405ac96e
(svn r6644) -Fix(r6637): remove inline to allow MSVC compilation
belugas
parents:
4725
diff
changeset
|
784 |
void HandleAircraftEnterHangar(Vehicle *v) |
0 | 785 |
{ |
786 |
v->subspeed = 0; |
|
787 |
v->progress = 0; |
|
788 |
||
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
789 |
Vehicle *u = v->Next(); |
0 | 790 |
u->vehstatus |= VS_HIDDEN; |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
791 |
u = u->Next(); |
2639 | 792 |
if (u != NULL) { |
0 | 793 |
u->vehstatus |= VS_HIDDEN; |
794 |
u->cur_speed = 0; |
|
795 |
} |
|
796 |
||
797 |
SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); |
|
798 |
} |
|
799 |
||
2549 | 800 |
static void PlayAircraftSound(const Vehicle* v) |
0 | 801 |
{ |
4656
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
802 |
if (!PlayVehicleSound(v, VSE_START)) { |
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
803 |
SndPlayVehicleFx(AircraftVehInfo(v->engine_type)->sfx, v); |
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
804 |
} |
0 | 805 |
} |
806 |
||
6490
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
807 |
|
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
808 |
void UpdateAircraftCache(Vehicle *v) |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
809 |
{ |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
810 |
uint max_speed = GetVehicleProperty(v, 0x0C, 0); |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
811 |
if (max_speed != 0) { |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
812 |
/* Convert from original units to (approx) km/h */ |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
813 |
max_speed = (max_speed * 129) / 10; |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
814 |
|
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
815 |
v->u.air.cached_max_speed = max_speed; |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
816 |
} else { |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
817 |
v->u.air.cached_max_speed = 0xFFFF; |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
818 |
} |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
819 |
} |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
820 |
|
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
821 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
822 |
/** |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
823 |
* Special velocities for aircraft |
5945
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
824 |
*/ |
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
825 |
enum AircraftSpeedLimits { |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
826 |
SPEED_LIMIT_TAXI = 50, ///< Maximum speed of an aircraft while taxiing |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
827 |
SPEED_LIMIT_APPROACH = 230, ///< Maximum speed of an aircraft on finals |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
828 |
SPEED_LIMIT_BROKEN = 320, ///< Maximum speed of an aircraft that is broken |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
829 |
SPEED_LIMIT_HOLD = 425, ///< Maximum speed of an aircraft that flies the holding pattern |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
830 |
SPEED_LIMIT_NONE = 0xFFFF ///< No environmental speed limit. Speed limit is type dependent |
5945
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
831 |
}; |
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
832 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
833 |
/** |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
834 |
* Sets the new speed for an aircraft |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
835 |
* @param v The vehicle for which the speed should be obtained |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
836 |
* @param speed_limit The maximum speed the vehicle may have. |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
837 |
* @param hard_limit If true, the limit is directly enforced, otherwise the plane is slowed down gradually |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
838 |
* @return The number of position updates needed within the tick |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
839 |
*/ |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
840 |
static int UpdateAircraftSpeed(Vehicle *v, uint speed_limit = SPEED_LIMIT_NONE, bool hard_limit = true) |
0 | 841 |
{ |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
842 |
uint spd = v->acceleration * 16; |
0 | 843 |
byte t; |
844 |
||
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
845 |
/* Adjust speed limits by plane speed factor to prevent taxiing |
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
846 |
* and take-off speeds being too low. */ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
847 |
speed_limit *= _settings_game.vehicle.plane_speed; |
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
848 |
|
6490
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
849 |
if (v->u.air.cached_max_speed < speed_limit) { |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
850 |
if (v->cur_speed < speed_limit) hard_limit = false; |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
851 |
speed_limit = v->u.air.cached_max_speed; |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
852 |
} |
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
853 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
854 |
speed_limit = min(speed_limit, v->max_speed); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
855 |
|
0 | 856 |
v->subspeed = (t=v->subspeed) + (byte)spd; |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
857 |
|
8566
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
858 |
/* Aircraft's current speed is used twice so that very fast planes are |
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
859 |
* forced to slow down rapidly in the short distance needed. The magic |
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
860 |
* value 16384 was determined to give similar results to the old speed/48 |
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
861 |
* method at slower speeds. This also results in less reduction at slow |
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
862 |
* speeds to that aircraft do not get to taxi speed straight after |
e81f60ee6a59
(svn r12144) -Codechange: Adjust aircraft slowing algorithm so that very fast
peter1138
parents:
8556
diff
changeset
|
863 |
* touchdown. */ |
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
864 |
if (!hard_limit && v->cur_speed > speed_limit) { |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
865 |
speed_limit = v->cur_speed - max(1, ((v->cur_speed * v->cur_speed) / 16384) / _settings_game.vehicle.plane_speed); |
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
866 |
} |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
867 |
|
5945
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
868 |
spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
164
diff
changeset
|
869 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
870 |
/* adjust speed for broken vehicles */ |
5945
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
871 |
if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, SPEED_LIMIT_BROKEN); |
0 | 872 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
873 |
/* updates statusbar only if speed have changed to save CPU time */ |
0 | 874 |
if (spd != v->cur_speed) { |
875 |
v->cur_speed = spd; |
|
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
876 |
if (_settings_client.gui.vehicle_speed) |
8350
8979cccdbed2
(svn r11916) -Codechange: use enums from VehicleViewWindowWidgets instead of constants
smatz
parents:
8329
diff
changeset
|
877 |
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH); |
0 | 878 |
} |
879 |
||
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
880 |
/* Adjust distance moved by plane speed setting */ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
881 |
if (_settings_game.vehicle.plane_speed > 1) spd /= _settings_game.vehicle.plane_speed; |
8648
dcd755910009
(svn r12293) -Feature: Ability to change aircraft speed factor, from so
peter1138
parents:
8628
diff
changeset
|
882 |
|
2639 | 883 |
if (!(v->direction & 1)) spd = spd * 3 / 4; |
0 | 884 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
885 |
spd += v->progress; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
886 |
v->progress = (byte)spd; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
887 |
return spd >> 8; |
0 | 888 |
} |
889 |
||
5908
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
890 |
/** |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
891 |
* Gets the cruise altitude of an aircraft. |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
892 |
* The cruise altitude is determined by the velocity of the vehicle |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
893 |
* and the direction it is moving |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
894 |
* @param v The vehicle. Should be an aircraft |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
895 |
* @returns Altitude in pixel units |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
896 |
*/ |
0 | 897 |
static byte GetAircraftFlyingAltitude(const Vehicle *v) |
898 |
{ |
|
5908
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
899 |
/* Make sure Aircraft fly no lower so that they don't conduct |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
900 |
* CFITs (controlled flight into terrain) |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
901 |
*/ |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
902 |
byte base_altitude = 150; |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
903 |
|
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
904 |
/* Make sure eastbound and westbound planes do not "crash" into each |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
905 |
* other by providing them with vertical seperation |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
906 |
*/ |
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
907 |
switch (v->direction) { |
6087 | 908 |
case DIR_N: |
909 |
case DIR_NE: |
|
910 |
case DIR_E: |
|
911 |
case DIR_SE: |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
912 |
base_altitude += 10; |
6087 | 913 |
break; |
914 |
||
5908
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
915 |
default: break; |
0 | 916 |
} |
5908
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
917 |
|
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
918 |
/* Make faster planes fly higher so that they can overtake slower ones */ |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
919 |
base_altitude += min(20 * (v->max_speed / 200), 90); |
5908
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
920 |
|
5ff4fe308285
(svn r8534) -Feature/Codechange: Provide aircraft with vertical separation depending on their altitude and velocity
celestar
parents:
5886
diff
changeset
|
921 |
return base_altitude; |
0 | 922 |
} |
923 |
||
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
924 |
/** |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
925 |
* Find the entry point to an airport depending on direction which |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
926 |
* the airport is being approached from. Each airport can have up to |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
927 |
* four entry points for its approach system so that approaching |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
928 |
* aircraft do not fly through each other or are forced to do 180 |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
929 |
* degree turns during the approach. The arrivals are grouped into |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
930 |
* four sectors dependent on the DiagDirection from which the airport |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
931 |
* is approached. |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
932 |
* |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
933 |
* @param v The vehicle that is approaching the airport |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
934 |
* @param apc The Airport Class being approached. |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
935 |
* @returns The index of the entry point |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
936 |
*/ |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
937 |
static byte AircraftGetEntryPoint(const Vehicle *v, const AirportFTAClass *apc) |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
938 |
{ |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
939 |
assert(v != NULL); |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
940 |
assert(apc != NULL); |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
941 |
|
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
942 |
/* In the case the station doesn't exit anymore, set target tile 0. |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
943 |
* It doesn't hurt much, aircraft will go to next order, nearest hangar |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
944 |
* or it will simply crash in next tick */ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
945 |
TileIndex tile = 0; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
946 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
947 |
if (IsValidStationID(v->u.air.targetairport)) { |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
948 |
const Station *st = GetStation(v->u.air.targetairport); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
949 |
/* Make sure we don't go to 0,0 if the airport has been removed. */ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
950 |
tile = (st->airport_tile != 0) ? st->airport_tile : st->xy; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
951 |
} |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
952 |
|
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
953 |
int delta_x = v->x_pos - TileX(tile) * TILE_SIZE; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
954 |
int delta_y = v->y_pos - TileY(tile) * TILE_SIZE; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
955 |
|
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
956 |
DiagDirection dir; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
957 |
if (abs(delta_y) < abs(delta_x)) { |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
958 |
/* We are northeast or southwest of the airport */ |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
959 |
dir = delta_x < 0 ? DIAGDIR_NE : DIAGDIR_SW; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
960 |
} else { |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
961 |
/* We are northwest or southeast of the airport */ |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
962 |
dir = delta_y < 0 ? DIAGDIR_NW : DIAGDIR_SE; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
963 |
} |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
964 |
return apc->entry_points[dir]; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
965 |
} |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
966 |
|
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
967 |
/** |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
968 |
* Controls the movement of an aircraft. This function actually moves the vehicle |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
969 |
* on the map and takes care of minor things like sound playback. |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
970 |
* @todo De-mystify the cur_speed values for helicopter rotors. |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
971 |
* @param v The vehicle that is moved. Must be the first vehicle of the chain |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
972 |
* @return Whether the position requested by the State Machine has been reached |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
973 |
*/ |
1401
44a7e0f04d28
(svn r1905) - Fix: [ 1118810 ] openttd: ship_cmd.c:642 ... Assertion failed. Mapwrap fixed in ship_cmd.c (was implicitely ok before biggermaps).
Darkvater
parents:
1359
diff
changeset
|
974 |
static bool AircraftController(Vehicle *v) |
0 | 975 |
{ |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
976 |
int count; |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
977 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
978 |
/* NULL if station is invalid */ |
10177
41ce7529a331
(svn r14383) -Fix [FS#2316](r14343): handle invalid 'v->u.air.targetairport' in the NewGRF code, too
smatz
parents:
10154
diff
changeset
|
979 |
const Station *st = IsValidStationID(v->u.air.targetairport) ? GetStation(v->u.air.targetairport) : NULL; |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
980 |
/* 0 if there is no station */ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
981 |
TileIndex tile = 0; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
982 |
if (st != NULL) { |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
983 |
tile = st->airport_tile; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
984 |
if (tile == 0) tile = st->xy; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
985 |
} |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
986 |
/* DUMMY if there is no station or no airport */ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
987 |
const AirportFTAClass *afc = tile == 0 ? GetAirport(AT_DUMMY) : st->Airport(); |
0 | 988 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
989 |
/* prevent going to 0,0 if airport is deleted. */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
990 |
if (st == NULL || st->airport_tile == 0) { |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
991 |
/* Jump into our "holding pattern" state machine if possible */ |
7990
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
992 |
if (v->u.air.pos >= afc->nofelements) { |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
993 |
v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, afc); |
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
994 |
} else if (v->u.air.targetairport != v->current_order.GetDestination()) { |
7990
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
995 |
/* If not possible, just get out of here fast */ |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
996 |
v->u.air.state = FLYING; |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
997 |
UpdateAircraftCache(v); |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
998 |
AircraftNextAirportPos_and_Order(v); |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
999 |
/* get aircraft back on running altitude */ |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
1000 |
SetAircraftPosition(v, v->x_pos, v->y_pos, GetAircraftFlyingAltitude(v)); |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
1001 |
return false; |
63211992f5c1
(svn r11546) -Fix[FS#1496]: If ever the air/heli port is suddenly not available while the "chopper" is descending, just go back into flying.
belugas
parents:
7967
diff
changeset
|
1002 |
} |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
1003 |
} |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
1004 |
|
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
1005 |
/* get airport moving data */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1006 |
const AirportMovingData *amd = afc->MovingData(v->u.air.pos); |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6350
diff
changeset
|
1007 |
|
6087 | 1008 |
int x = TileX(tile) * TILE_SIZE; |
1009 |
int y = TileY(tile) * TILE_SIZE; |
|
0 | 1010 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1011 |
/* Helicopter raise */ |
0 | 1012 |
if (amd->flag & AMED_HELI_RAISE) { |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
1013 |
Vehicle *u = v->Next()->Next(); |
0 | 1014 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1015 |
/* Make sure the rotors don't rotate too fast */ |
0 | 1016 |
if (u->cur_speed > 32) { |
1017 |
v->cur_speed = 0; |
|
2639 | 1018 |
if (--u->cur_speed == 32) SndPlayVehicleFx(SND_18_HELICOPTER, v); |
0 | 1019 |
} else { |
1020 |
u->cur_speed = 32; |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1021 |
count = UpdateAircraftSpeed(v); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1022 |
if (count > 0) { |
0 | 1023 |
v->tile = 0; |
1024 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1025 |
/* Reached altitude? */ |
0 | 1026 |
if (v->z_pos >= 184) { |
1027 |
v->cur_speed = 0; |
|
1028 |
return true; |
|
1029 |
} |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1030 |
SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, 184)); |
0 | 1031 |
} |
1032 |
} |
|
1033 |
return false; |
|
1034 |
} |
|
1035 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1036 |
/* Helicopter landing. */ |
0 | 1037 |
if (amd->flag & AMED_HELI_LOWER) { |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1038 |
if (st == NULL) { |
8677
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1039 |
/* FIXME - AircraftController -> if station no longer exists, do not land |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1040 |
* helicopter will circle until sign disappears, then go to next order |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1041 |
* what to do when it is the only order left, right now it just stays in 1 place */ |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1042 |
v->u.air.state = FLYING; |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1043 |
UpdateAircraftCache(v); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1044 |
AircraftNextAirportPos_and_Order(v); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1045 |
return false; |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1046 |
} |
0 | 1047 |
|
8677
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1048 |
/* Vehicle is now at the airport. */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1049 |
v->tile = tile; |
0 | 1050 |
|
8677
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1051 |
/* Find altitude of landing position. */ |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1052 |
int z = GetSlopeZ(x, y) + 1 + afc->delta_z; |
0 | 1053 |
|
8677
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1054 |
if (z == v->z_pos) { |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1055 |
Vehicle *u = v->Next()->Next(); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1056 |
|
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1057 |
/* Increase speed of rotors. When speed is 80, we've landed. */ |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1058 |
if (u->cur_speed >= 80) return true; |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1059 |
u->cur_speed += 4; |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1060 |
} else { |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1061 |
count = UpdateAircraftSpeed(v); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1062 |
if (count > 0) { |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1063 |
if (v->z_pos > z) { |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1064 |
SetAircraftPosition(v, v->x_pos, v->y_pos, max(v->z_pos - count, z)); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1065 |
} else { |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1066 |
SetAircraftPosition(v, v->x_pos, v->y_pos, min(v->z_pos + count, z)); |
189ce57a33ef
(svn r12343) -Fix (r12293): Slow helicopters never got the 'chance' to finish the landing routine.
peter1138
parents:
8648
diff
changeset
|
1067 |
} |
0 | 1068 |
} |
1069 |
} |
|
1070 |
return false; |
|
1071 |
} |
|
1072 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1073 |
/* Get distance from destination pos to current pos. */ |
7923
91982bd3c549
(svn r11476) -Codechange: rename the function myabs to abs to get rid of an unneeded define
skidd13
parents:
7922
diff
changeset
|
1074 |
uint dist = abs(x + amd->x - v->x_pos) + abs(y + amd->y - v->y_pos); |
0 | 1075 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1076 |
/* Need exact position? */ |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1077 |
if (!(amd->flag & AMED_EXACTPOS) && dist <= (amd->flag & AMED_SLOWTURN ? 8U : 4U)) return true; |
0 | 1078 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1079 |
/* At final pos? */ |
0 | 1080 |
if (dist == 0) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1081 |
/* Change direction smoothly to final direction. */ |
6087 | 1082 |
DirDiff dirdiff = DirDifference(amd->direction, v->direction); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1083 |
/* if distance is 0, and plane points in right direction, no point in calling |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1084 |
* UpdateAircraftSpeed(). So do it only afterwards */ |
3158
696a6ca0bfa9
(svn r3784) Add a type and functions to handle direction changes
tron
parents:
3157
diff
changeset
|
1085 |
if (dirdiff == DIRDIFF_SAME) { |
0 | 1086 |
v->cur_speed = 0; |
1087 |
return true; |
|
1088 |
} |
|
1089 |
||
5945
fabc2fee32b3
(svn r8611) -Fix: Moved the aircraft speed limiting into UpdateAircraftSpeed and enummed some speed limits. This should give a more steady display in the status bar during taxiing
celestar
parents:
5944
diff
changeset
|
1090 |
if (!UpdateAircraftSpeed(v, SPEED_LIMIT_TAXI)) return false; |
0 | 1091 |
|
3158
696a6ca0bfa9
(svn r3784) Add a type and functions to handle direction changes
tron
parents:
3157
diff
changeset
|
1092 |
v->direction = ChangeDir(v->direction, dirdiff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT); |
0 | 1093 |
v->cur_speed >>= 1; |
1094 |
||
1095 |
SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); |
|
1096 |
return false; |
|
1097 |
} |
|
1098 |
||
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1099 |
uint speed_limit = SPEED_LIMIT_TAXI; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1100 |
bool hard_limit = true; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1101 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1102 |
if (amd->flag & AMED_NOSPDCLAMP) speed_limit = SPEED_LIMIT_NONE; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1103 |
if (amd->flag & AMED_HOLD) { speed_limit = SPEED_LIMIT_HOLD; hard_limit = false; } |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1104 |
if (amd->flag & AMED_LAND) { speed_limit = SPEED_LIMIT_APPROACH; hard_limit = false; } |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1105 |
if (amd->flag & AMED_BRAKE) { speed_limit = SPEED_LIMIT_TAXI; hard_limit = false; } |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1106 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1107 |
count = UpdateAircraftSpeed(v, speed_limit, hard_limit); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1108 |
if (count == 0) return false; |
0 | 1109 |
|
2639 | 1110 |
if (v->load_unload_time_rem != 0) v->load_unload_time_rem--; |
0 | 1111 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1112 |
do { |
6327
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1113 |
|
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1114 |
GetNewVehiclePosResult gp; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1115 |
|
7900
534a7cc99597
(svn r11451) -Fix [FS#1287]: very fast aircraft would sometimes abruptly stop at the begin of the landing runway, turn a few times and then drive slowly to the end of the runway.
rubidium
parents:
7815
diff
changeset
|
1116 |
if (dist < 4 || amd->flag & AMED_LAND) { |
6327
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1117 |
/* move vehicle one pixel towards target */ |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1118 |
gp.x = (v->x_pos != (x + amd->x)) ? |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1119 |
v->x_pos + ((x + amd->x > v->x_pos) ? 1 : -1) : |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1120 |
v->x_pos; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1121 |
gp.y = (v->y_pos != (y + amd->y)) ? |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1122 |
v->y_pos + ((y + amd->y > v->y_pos) ? 1 : -1) : |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1123 |
v->y_pos; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1124 |
|
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1125 |
/* Oilrigs must keep v->tile as st->airport_tile, since the landing pad is in a non-airport tile */ |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1126 |
gp.new_tile = (st->airport_type == AT_OILRIG) ? st->airport_tile : TileVirtXY(gp.x, gp.y); |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1127 |
|
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1128 |
} else { |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1129 |
|
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1130 |
/* Turn. Do it slowly if in the air. */ |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1131 |
Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y); |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1132 |
if (newdir != v->direction) { |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1133 |
v->direction = newdir; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1134 |
if (amd->flag & AMED_SLOWTURN) { |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1135 |
if (v->load_unload_time_rem == 0) v->load_unload_time_rem = 8; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1136 |
} else { |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1137 |
v->cur_speed >>= 1; |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1138 |
} |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1139 |
} |
6327
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1140 |
|
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1141 |
/* Move vehicle. */ |
1c98317eba09
(svn r9299) -Fix (FS#675,FS#660): Small micro-movements on airports (of <4 pixels) caused odd aircraft movements. On oilrigs, this caused a full crash as movement would take helicopter out of airport/station tile.
richk
parents:
6316
diff
changeset
|
1142 |
gp = GetNewVehiclePos(v); |
0 | 1143 |
} |
1144 |
||
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1145 |
v->tile = gp.new_tile; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1146 |
/* If vehicle is in the air, use tile coordinate 0. */ |
8534
5d05519d1c50
(svn r12109) -Fix [FS#1745](r8973): use tile index 0 for planes in the air, so it cannot have an invalid tile index
smatz
parents:
8467
diff
changeset
|
1147 |
if (amd->flag & (AMED_TAKEOFF | AMED_SLOWTURN | AMED_LAND)) v->tile = 0; |
0 | 1148 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1149 |
/* Adjust Z for land or takeoff? */ |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1150 |
uint z = v->z_pos; |
0 | 1151 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1152 |
if (amd->flag & AMED_TAKEOFF) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1153 |
z = min(z + 2, GetAircraftFlyingAltitude(v)); |
2639 | 1154 |
} |
0 | 1155 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1156 |
if ((amd->flag & AMED_HOLD) && (z > 150)) z--; |
0 | 1157 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1158 |
if (amd->flag & AMED_LAND) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1159 |
if (st->airport_tile == 0) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1160 |
/* Airport has been removed, abort the landing procedure */ |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1161 |
v->u.air.state = FLYING; |
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
1162 |
UpdateAircraftCache(v); |
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1163 |
AircraftNextAirportPos_and_Order(v); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1164 |
/* get aircraft back on running altitude */ |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1165 |
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v)); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1166 |
continue; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1167 |
} |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1168 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1169 |
uint curz = GetSlopeZ(x, y) + 1; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1170 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1171 |
if (curz > z) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1172 |
z++; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1173 |
} else { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1174 |
int t = max(1U, dist - 4); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1175 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1176 |
z -= ((z - curz) + t - 1) / t; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1177 |
if (z < curz) z = curz; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1178 |
} |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1179 |
} |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1180 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1181 |
/* We've landed. Decrase speed when we're reaching end of runway. */ |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1182 |
if (amd->flag & AMED_BRAKE) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1183 |
uint curz = GetSlopeZ(x, y) + 1; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1184 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1185 |
if (z > curz) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1186 |
z--; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1187 |
} else if (z < curz) { |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1188 |
z++; |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1189 |
} |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1190 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1191 |
} |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1192 |
|
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1193 |
SetAircraftPosition(v, gp.x, gp.y, z); |
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
1194 |
} while (--count != 0); |
0 | 1195 |
return false; |
1196 |
} |
|
1197 |
||
1198 |
||
1199 |
static void HandleCrashedAircraft(Vehicle *v) |
|
1200 |
{ |
|
1201 |
v->u.air.crashed_counter++; |
|
1202 |
||
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1203 |
Station *st = GetTargetAirportIfValid(v); |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1204 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1205 |
/* make aircraft crash down to the ground */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1206 |
if (v->u.air.crashed_counter < 500 && st == NULL && ((v->u.air.crashed_counter % 3) == 0) ) { |
6087 | 1207 |
uint z = GetSlopeZ(v->x_pos, v->y_pos); |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1208 |
v->z_pos -= 1; |
1150
7b5946a53372
(svn r1651) Fix: [ 1098696 ] Airport shadow remains after crashing
dominik
parents:
1139
diff
changeset
|
1209 |
if (v->z_pos == z) { |
7b5946a53372
(svn r1651) Fix: [ 1098696 ] Airport shadow remains after crashing
dominik
parents:
1139
diff
changeset
|
1210 |
v->u.air.crashed_counter = 500; |
7b5946a53372
(svn r1651) Fix: [ 1098696 ] Airport shadow remains after crashing
dominik
parents:
1139
diff
changeset
|
1211 |
v->z_pos++; |
7b5946a53372
(svn r1651) Fix: [ 1098696 ] Airport shadow remains after crashing
dominik
parents:
1139
diff
changeset
|
1212 |
} |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1213 |
} |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1214 |
|
0 | 1215 |
if (v->u.air.crashed_counter < 650) { |
6087 | 1216 |
uint32 r; |
7967
a230c063a672
(svn r11523) -Codechange: Move the CHANCE macros to core/random_func.cpp cause they depend on Random()
skidd13
parents:
7932
diff
changeset
|
1217 |
if (Chance16R(1,32,r)) { |
3160 | 1218 |
static const DirDiff delta[] = { |
1219 |
DIRDIFF_45LEFT, DIRDIFF_SAME, DIRDIFF_SAME, DIRDIFF_45RIGHT |
|
1220 |
}; |
|
1221 |
||
1222 |
v->direction = ChangeDir(v->direction, delta[GB(r, 16, 2)]); |
|
0 | 1223 |
SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); |
1224 |
r = Random(); |
|
1225 |
CreateEffectVehicleRel(v, |
|
7700
11fcc2bbbf0f
(svn r11234) -Fix [FS#1312]: the explosion vehicles were placed too far to the south.
rubidium
parents:
7695
diff
changeset
|
1226 |
GB(r, 0, 4) - 4, |
11fcc2bbbf0f
(svn r11234) -Fix [FS#1312]: the explosion vehicles were placed too far to the south.
rubidium
parents:
7695
diff
changeset
|
1227 |
GB(r, 4, 4) - 4, |
2140
a04d0142ad65
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2133
diff
changeset
|
1228 |
GB(r, 8, 4), |
1359
52782e5cf7c9
(svn r1863) Give the effect vehicle type enums more descriptive names and use the enum as parameter type for CreateEffectVehicle*()
tron
parents:
1299
diff
changeset
|
1229 |
EV_EXPLOSION_SMALL); |
0 | 1230 |
} |
1231 |
} else if (v->u.air.crashed_counter >= 10000) { |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1232 |
/* remove rubble of crashed airplane */ |
0 | 1233 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1234 |
/* clear runway-in on all airports, set by crashing plane |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1235 |
* small airports use AIRPORT_BUSY, city airports use RUNWAY_IN_OUT_block, etc. |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1236 |
* but they all share the same number */ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1237 |
if (st != NULL) { |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1238 |
CLRBITS(st->airport_flags, RUNWAY_IN_block); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1239 |
CLRBITS(st->airport_flags, RUNWAY_IN_OUT_block); // commuter airport |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1240 |
CLRBITS(st->airport_flags, RUNWAY_IN2_block); // intercontinental |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1241 |
} |
0 | 1242 |
|
8317
539038de35cb
(svn r11882) -Codechange: introduce MarkSingleVehicleDirty() and simplify the code at some places
smatz
parents:
8310
diff
changeset
|
1243 |
MarkSingleVehicleDirty(v); |
0 | 1244 |
|
1245 |
DoDeleteAircraft(v); |
|
1246 |
} |
|
1247 |
} |
|
1248 |
||
1249 |
static void HandleBrokenAircraft(Vehicle *v) |
|
1250 |
{ |
|
1251 |
if (v->breakdown_ctr != 1) { |
|
1252 |
v->breakdown_ctr = 1; |
|
1253 |
v->vehstatus |= VS_AIRCRAFT_BROKEN; |
|
1254 |
||
1255 |
if (v->breakdowns_since_last_service != 255) |
|
1256 |
v->breakdowns_since_last_service++; |
|
1257 |
InvalidateWindow(WC_VEHICLE_VIEW, v->index); |
|
1258 |
InvalidateWindow(WC_VEHICLE_DETAILS, v->index); |
|
1259 |
} |
|
1260 |
} |
|
1261 |
||
1262 |
||
1263 |
static void HandleAircraftSmoke(Vehicle *v) |
|
1264 |
{ |
|
2654
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1265 |
static const struct { |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1266 |
int8 x; |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1267 |
int8 y; |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1268 |
} smoke_pos[] = { |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1269 |
{ 5, 5 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1270 |
{ 6, 0 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1271 |
{ 5, -5 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1272 |
{ 0, -6 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1273 |
{ -5, -5 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1274 |
{ -6, 0 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1275 |
{ -5, 5 }, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1276 |
{ 0, 6 } |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1277 |
}; |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1278 |
|
2639 | 1279 |
if (!(v->vehstatus & VS_AIRCRAFT_BROKEN)) return; |
0 | 1280 |
|
1281 |
if (v->cur_speed < 10) { |
|
1282 |
v->vehstatus &= ~VS_AIRCRAFT_BROKEN; |
|
1283 |
v->breakdown_ctr = 0; |
|
1284 |
return; |
|
1285 |
} |
|
1286 |
||
1287 |
if ((v->tick_counter & 0x1F) == 0) { |
|
1288 |
CreateEffectVehicleRel(v, |
|
2654
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1289 |
smoke_pos[v->direction].x, |
1370de8783d3
(svn r3196) Use structs instead of magic offsets into arrays
tron
parents:
2639
diff
changeset
|
1290 |
smoke_pos[v->direction].y, |
0 | 1291 |
2, |
1359
52782e5cf7c9
(svn r1863) Give the effect vehicle type enums more descriptive names and use the enum as parameter type for CreateEffectVehicle*()
tron
parents:
1299
diff
changeset
|
1292 |
EV_SMOKE |
0 | 1293 |
); |
1294 |
} |
|
1295 |
} |
|
1296 |
||
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1297 |
void HandleMissingAircraftOrders(Vehicle *v) |
0 | 1298 |
{ |
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1299 |
/* |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1300 |
* We do not have an order. This can be divided into two cases: |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1301 |
* 1) we are heading to an invalid station. In this case we must |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1302 |
* find another airport to go to. If there is nowhere to go, |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1303 |
* we will destroy the aircraft as it otherwise will enter |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1304 |
* the holding pattern for the first airport, which can cause |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1305 |
* the plane to go into an undefined state when building an |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1306 |
* airport with the same StationID. |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1307 |
* 2) we are (still) heading to a (still) valid airport, then we |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1308 |
* can continue going there. This can happen when you are |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1309 |
* changing the aircraft's orders while in-flight or in for |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1310 |
* example a depot. However, when we have a current order to |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1311 |
* go to a depot, we have to keep that order so the aircraft |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1312 |
* actually stops. |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1313 |
*/ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1314 |
const Station *st = GetTargetAirportIfValid(v); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1315 |
if (st == NULL) { |
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1316 |
CommandCost ret; |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1317 |
CompanyID old_company = _current_company; |
3005
2590b9b4823b
(svn r3585) Similar changes to the order handlers of the other vehicle types like r3584
tron
parents:
2989
diff
changeset
|
1318 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1319 |
_current_company = v->owner; |
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1320 |
ret = DoCommand(v->tile, v->index, 0, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR); |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1321 |
_current_company = old_company; |
4351
c9799dd53eec
(svn r6052) -Codechange: change OrderType (order->type) in a typedef
truelight
parents:
4346
diff
changeset
|
1322 |
|
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1323 |
if (CmdFailed(ret)) CrashAirplane(v); |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1324 |
} else if (!v->current_order.IsType(OT_GOTO_DEPOT)) { |
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1325 |
v->current_order.Free(); |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1326 |
} |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1327 |
} |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1328 |
|
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1329 |
|
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1330 |
TileIndex Aircraft::GetOrderStationLocation(StationID station) |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1331 |
{ |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1332 |
/* Orders are changed in flight, ensure going to the right station. */ |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1333 |
if (this->u.air.state == FLYING) { |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1334 |
AircraftNextAirportPos_and_Order(this); |
1151
06c115ce7b7a
(svn r1652) Fix: train and road vehicle lists are now redrawn when vehicles enters/leaves a depot (Hackykid)
bjarni
parents:
1150
diff
changeset
|
1335 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
164
diff
changeset
|
1336 |
|
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1337 |
/* Aircraft do not use dest-tile */ |
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
1338 |
return 0; |
0 | 1339 |
} |
1340 |
||
6553
976a684212ad
(svn r9755) -Codechange: refactor some more of the begin loading stuff.
rubidium
parents:
6552
diff
changeset
|
1341 |
void Aircraft::MarkDirty() |
3722
0984901a2744
(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
peter1138
parents:
3710
diff
changeset
|
1342 |
{ |
7134
5b2d47128d05
(svn r10408) -Codechange: make GetImage a class method of Vehicle instead of Get(Aircraft|RoadVeh|Ship|Train)Image.
rubidium
parents:
7096
diff
changeset
|
1343 |
this->cur_image = this->GetImage(this->direction); |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
1344 |
if (this->subtype == AIR_HELICOPTER) this->Next()->Next()->cur_image = GetRotorImage(this); |
8317
539038de35cb
(svn r11882) -Codechange: introduce MarkSingleVehicleDirty() and simplify the code at some places
smatz
parents:
8310
diff
changeset
|
1345 |
MarkSingleVehicleDirty(this); |
3722
0984901a2744
(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
peter1138
parents:
3710
diff
changeset
|
1346 |
} |
0984901a2744
(svn r4693) - NewGRF: invalidate aircraft in viewports during loading stages so that graphic changes are visible. (mart3p)
peter1138
parents:
3710
diff
changeset
|
1347 |
|
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1348 |
static void CrashAirplane(Vehicle *v) |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1349 |
{ |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1350 |
v->vehstatus |= VS_CRASHED; |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1351 |
v->u.air.crashed_counter = 0; |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1352 |
|
1359
52782e5cf7c9
(svn r1863) Give the effect vehicle type enums more descriptive names and use the enum as parameter type for CreateEffectVehicle*()
tron
parents:
1299
diff
changeset
|
1353 |
CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE); |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1354 |
|
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1355 |
InvalidateWindow(WC_VEHICLE_VIEW, v->index); |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1356 |
|
6087 | 1357 |
uint amt = 2; |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
1358 |
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo.Count(); |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1359 |
SetDParam(0, amt); |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1360 |
|
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
1361 |
v->cargo.Truncate(0); |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
1362 |
v->Next()->cargo.Truncate(0); |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1363 |
const Station *st = GetTargetAirportIfValid(v); |
6087 | 1364 |
StringID newsitem; |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1365 |
if (st == NULL) { |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1366 |
newsitem = STR_PLANE_CRASH_OUT_OF_FUEL; |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1367 |
} else { |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1368 |
SetDParam(1, st->index); |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1369 |
newsitem = STR_A034_PLANE_CRASH_DIE_IN_FIREBALL; |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1370 |
} |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1371 |
|
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1372 |
AddNewsItem(newsitem, |
9234
bfc9d27d3d0d
(svn r13100) -Codechange: reduce the amount of parameters passed via AddNewsMessage as there is (for each news message type) a tuple of 4 parameters that is the same for all calls.
rubidium
parents:
9070
diff
changeset
|
1373 |
NS_ACCIDENT_VEHICLE, |
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1374 |
v->index, |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1375 |
0); |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1376 |
|
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1377 |
SndPlayVehicleFx(SND_12_EXPLOSION, v); |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1378 |
} |
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1379 |
|
0 | 1380 |
static void MaybeCrashAirplane(Vehicle *v) |
1381 |
{ |
|
6087 | 1382 |
Station *st = GetStation(v->u.air.targetairport); |
0 | 1383 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1384 |
/* FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports */ |
6087 | 1385 |
uint16 prob = 0x10000 / 1500; |
6032 | 1386 |
if (st->Airport()->flags & AirportFTAClass::SHORT_STRIP && |
6025 | 1387 |
AircraftVehInfo(v->engine_type)->subtype & AIR_FAST && |
1388 |
!_cheats.no_jetcrash.value) { |
|
0 | 1389 |
prob = 0x10000 / 20; |
1390 |
} |
|
1391 |
||
2484
0e45d70ae908
(svn r3010) Get rid of quite some dubious casts, either by using GB(), proper types or just removing them
tron
parents:
2477
diff
changeset
|
1392 |
if (GB(Random(), 0, 16) > prob) return; |
0 | 1393 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1394 |
/* Crash the airplane. Remove all goods stored at the station. */ |
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6340
diff
changeset
|
1395 |
for (CargoID i = 0; i < NUM_CARGO; i++) { |
0 | 1396 |
st->goods[i].rating = 1; |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6990
diff
changeset
|
1397 |
st->goods[i].cargo.Truncate(0); |
0 | 1398 |
} |
1399 |
||
899
69db9cb6bc9d
(svn r1385) Fix: [ 1095020 ] When all stations in an aircraft's order list are demolished, the plane eventually crashes (running out of fuel)
dominik
parents:
842
diff
changeset
|
1400 |
CrashAirplane(v); |
0 | 1401 |
} |
1402 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1403 |
/** we've landed and just arrived at a terminal */ |
0 | 1404 |
static void AircraftEntersTerminal(Vehicle *v) |
1405 |
{ |
|
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1406 |
if (v->current_order.IsType(OT_GOTO_DEPOT)) return; |
0 | 1407 |
|
6087 | 1408 |
Station *st = GetStation(v->u.air.targetairport); |
0 | 1409 |
v->last_station_visited = v->u.air.targetairport; |
1410 |
||
1411 |
/* Check if station was ever visited before */ |
|
1412 |
if (!(st->had_vehicle_of_type & HVOT_AIRCRAFT)) { |
|
1413 |
st->had_vehicle_of_type |= HVOT_AIRCRAFT; |
|
534
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
1414 |
SetDParam(0, st->index); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1415 |
/* show newsitem of celebrating citizens */ |
0 | 1416 |
AddNewsItem( |
1417 |
STR_A033_CITIZENS_CELEBRATE_FIRST, |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1418 |
(v->owner == _local_company) ? NS_ARRIVAL_COMPANY : NS_ARRIVAL_OTHER, |
0 | 1419 |
v->index, |
10123
f73d96619303
(svn r14307) -Fix: when deleting a station, remove news items regarding it
smatz
parents:
10056
diff
changeset
|
1420 |
st->index |
f73d96619303
(svn r14307) -Fix: when deleting a station, remove news items regarding it
smatz
parents:
10056
diff
changeset
|
1421 |
); |
0 | 1422 |
} |
1423 |
||
5651
79496e6d8a56
(svn r8110) -Codechange: direct Vehicle::current_order.type changes (to OT_LOADING and OT_LEAVESTATION) replaced by v->BeginLoading() and v->LeaveStation() calls. This should allow easy hooking of those state transitions in order to maintain vehicle loading queue.
KUDr
parents:
5601
diff
changeset
|
1424 |
v->BeginLoading(); |
0 | 1425 |
} |
1426 |
||
1427 |
static void AircraftLandAirplane(Vehicle *v) |
|
1428 |
{ |
|
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1429 |
v->UpdateDeltaXY(INVALID_DIR); |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1430 |
|
4656
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
1431 |
if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) { |
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
1432 |
SndPlayVehicleFx(SND_17_SKID_PLANE, v); |
9c1d8c4d3e60
(svn r6532) - Feature: Add support for NewGRF sound effects. Currently sound priority isn't supported.
peter1138
parents:
4574
diff
changeset
|
1433 |
} |
0 | 1434 |
MaybeCrashAirplane(v); |
1435 |
} |
|
1436 |
||
6036
333637e97400
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6032
diff
changeset
|
1437 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1438 |
/** set the right pos when heading to other airports after takeoff */ |
8891
1058c3b69b7f
(svn r12658) -Codechange: unify a vast portion of the CmdSend<VehicleType>ToDepot commands.
rubidium
parents:
8890
diff
changeset
|
1439 |
void AircraftNextAirportPos_and_Order(Vehicle *v) |
0 | 1440 |
{ |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1441 |
if (v->current_order.IsType(OT_GOTO_STATION) || v->current_order.IsType(OT_GOTO_DEPOT)) { |
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
1442 |
v->u.air.targetairport = v->current_order.GetDestination(); |
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1443 |
} |
0 | 1444 |
|
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1445 |
const Station *st = GetTargetAirportIfValid(v); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
1446 |
const AirportFTAClass *apc = st == NULL ? GetAirport(AT_DUMMY) : st->Airport(); |
6036
333637e97400
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6032
diff
changeset
|
1447 |
v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, apc); |
0 | 1448 |
} |
1449 |
||
1450 |
static void AircraftLeaveHangar(Vehicle *v) |
|
1451 |
{ |
|
1452 |
v->cur_speed = 0; |
|
1453 |
v->subspeed = 0; |
|
1454 |
v->progress = 0; |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5585
diff
changeset
|
1455 |
v->direction = DIR_SE; |
0 | 1456 |
v->vehstatus &= ~VS_HIDDEN; |
1457 |
{ |
|
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
1458 |
Vehicle *u = v->Next(); |
0 | 1459 |
u->vehstatus &= ~VS_HIDDEN; |
1460 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1461 |
/* Rotor blades */ |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
1462 |
u = u->Next(); |
2639 | 1463 |
if (u != NULL) { |
0 | 1464 |
u->vehstatus &= ~VS_HIDDEN; |
1465 |
u->cur_speed = 80; |
|
1466 |
} |
|
1467 |
} |
|
1468 |
||
578
1e66514eb621
(svn r998) now vehicles are serviced both when entering and when leaving depots to prevent that vehicles might need service when leaving after a long stay (ln--)
bjarni
parents:
555
diff
changeset
|
1469 |
VehicleServiceInDepot(v); |
0 | 1470 |
SetAircraftPosition(v, v->x_pos, v->y_pos, v->z_pos); |
4739
e626ef1b522e
(svn r6651) -Coding feature: added the windowevent WE_INVALIDATE_DATA
bjarni
parents:
4732
diff
changeset
|
1471 |
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); |
1055
cc4f60cc9102
(svn r1556) -Fix: Vehicle list updates should now really work
Celestar
parents:
1053
diff
changeset
|
1472 |
InvalidateWindowClasses(WC_AIRCRAFT_LIST); |
0 | 1473 |
} |
1474 |
||
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1475 |
/** Checks if an aircraft should head towards a hangar because it needs replacement |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1476 |
* @param *v the vehicle to test |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1477 |
* @return true if the aircraft should head towards a hangar |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1478 |
*/ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1479 |
static inline bool CheckSendAircraftToHangarForReplacement(const Vehicle *v) |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1480 |
{ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1481 |
EngineID new_engine; |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1482 |
Company *c = GetCompany(v->owner); |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1483 |
|
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1484 |
if (VehicleHasDepotOrders(v)) return false; // The aircraft will end up in the hangar eventually on it's own |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1485 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1486 |
new_engine = EngineReplacementForCompany(c, v->engine_type, v->group_id); |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1487 |
|
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1488 |
if (new_engine == INVALID_ENGINE) { |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1489 |
/* There is no autoreplace assigned to this EngineID so we will set it to renew to the same type if needed */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1490 |
new_engine = v->engine_type; |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1491 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1492 |
if (!v->NeedsAutorenewing(c)) { |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1493 |
/* No need to replace the aircraft */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1494 |
return false; |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1495 |
} |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1496 |
} |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1497 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1498 |
if (!HasBit(GetEngine(new_engine)->company_avail, v->owner)) { |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1499 |
/* Engine is not buildable anymore */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1500 |
return false; |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1501 |
} |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1502 |
|
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1503 |
if (c->money < (c->engine_renew_money + (2 * DoCommand(0, new_engine, 0, DC_QUERY_COST, CMD_BUILD_AIRCRAFT).GetCost()))) { |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1504 |
/* We lack enough money to request the replacement right away. |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1505 |
* We want 2*(the price of the new vehicle) and not looking at the value of the vehicle we are going to sell. |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1506 |
* The reason is that we don't want to send a whole lot of vehicles to the hangars when we only have enough money to replace a single one. |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1507 |
* Remember this happens in the background so the user can't stop this. */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1508 |
return false; |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1509 |
} |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1510 |
|
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1511 |
/* We found no reason NOT to send the aircraft to a hangar so we will send it there at once */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1512 |
return true; |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1513 |
} |
0 | 1514 |
|
1515 |
//////////////////////////////////////////////////////////////////////////////// |
|
1516 |
/////////////////// AIRCRAFT MOVEMENT SCHEME //////////////////////////////// |
|
1517 |
//////////////////////////////////////////////////////////////////////////////// |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1518 |
static void AircraftEventHandler_EnterTerminal(Vehicle *v, const AirportFTAClass *apc) |
0 | 1519 |
{ |
1520 |
AircraftEntersTerminal(v); |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1521 |
v->u.air.state = apc->layout[v->u.air.pos].heading; |
0 | 1522 |
} |
1523 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1524 |
static void AircraftEventHandler_EnterHangar(Vehicle *v, const AirportFTAClass *apc) |
0 | 1525 |
{ |
4725
40cccaaa042c
(svn r6637) -Codechange: merged all (vehicle type)EnterDepot into VehicleEnterDepot()
bjarni
parents:
4712
diff
changeset
|
1526 |
VehicleEnterDepot(v); |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1527 |
v->u.air.state = apc->layout[v->u.air.pos].heading; |
0 | 1528 |
} |
1529 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1530 |
/** In an Airport Hangar */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1531 |
static void AircraftEventHandler_InHangar(Vehicle *v, const AirportFTAClass *apc) |
0 | 1532 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1533 |
/* if we just arrived, execute EnterHangar first */ |
0 | 1534 |
if (v->u.air.previous_pos != v->u.air.pos) { |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1535 |
AircraftEventHandler_EnterHangar(v, apc); |
0 | 1536 |
return; |
1537 |
} |
|
1538 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1539 |
/* if we were sent to the depot, stay there */ |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1540 |
if (v->current_order.IsType(OT_GOTO_DEPOT) && (v->vehstatus & VS_STOPPED)) { |
6263
6bd0726c74e2
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6259
diff
changeset
|
1541 |
v->current_order.Free(); |
0 | 1542 |
return; |
1543 |
} |
|
1544 |
||
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1545 |
if (!v->current_order.IsType(OT_GOTO_STATION) && |
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1546 |
!v->current_order.IsType(OT_GOTO_DEPOT)) |
0 | 1547 |
return; |
1548 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1549 |
/* if the block of the next position is busy, stay put */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1550 |
if (AirportHasBlock(v, &apc->layout[v->u.air.pos], apc)) return; |
0 | 1551 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1552 |
/* We are already at the target airport, we need to find a terminal */ |
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
1553 |
if (v->current_order.GetDestination() == v->u.air.targetairport) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1554 |
/* FindFreeTerminal: |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1555 |
* 1. Find a free terminal, 2. Occupy it, 3. Set the vehicle's state to that terminal */ |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
1556 |
if (v->subtype == AIR_HELICOPTER) { |
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
1557 |
if (!AirportFindFreeHelipad(v, apc)) return; // helicopter |
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
1558 |
} else { |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1559 |
if (!AirportFindFreeTerminal(v, apc)) return; // airplane |
2549 | 1560 |
} |
1561 |
} else { // Else prepare for launch. |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1562 |
/* airplane goto state takeoff, helicopter to helitakeoff */ |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
1563 |
v->u.air.state = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : TAKEOFF; |
0 | 1564 |
} |
1565 |
AircraftLeaveHangar(v); |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1566 |
AirportMove(v, apc); |
0 | 1567 |
} |
1568 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1569 |
/** At one of the Airport's Terminals */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1570 |
static void AircraftEventHandler_AtTerminal(Vehicle *v, const AirportFTAClass *apc) |
0 | 1571 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1572 |
/* if we just arrived, execute EnterTerminal first */ |
0 | 1573 |
if (v->u.air.previous_pos != v->u.air.pos) { |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1574 |
AircraftEventHandler_EnterTerminal(v, apc); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1575 |
/* on an airport with helipads, a helicopter will always land there |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1576 |
* and get serviced at the same time - patch setting */ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
1577 |
if (_settings_game.order.serviceathelipad) { |
5854
9eee280920f0
(svn r8428) -Codechange: Add proper names to aircraft subtypes instead of magic numbers and add a function IsNormalAircraft() which tells us whether the aircraft is in fact some flying device or a rotor/shadow.
Darkvater
parents:
5754
diff
changeset
|
1578 |
if (v->subtype == AIR_HELICOPTER && apc->helipads != NULL) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1579 |
/* an exerpt of ServiceAircraft, without the invisibility stuff */ |
0 | 1580 |
v->date_of_last_service = _date; |
1581 |
v->breakdowns_since_last_service = 0; |
|
1926
530480d14685
(svn r2432) Use GetEngine() instead of DEREF_ENGINE() or even _engines[]
tron
parents:
1901
diff
changeset
|
1582 |
v->reliability = GetEngine(v->engine_type)->reliability; |
0 | 1583 |
InvalidateWindow(WC_VEHICLE_DETAILS, v->index); |
1584 |
} |
|
1585 |
} |
|
1586 |
return; |
|
1587 |
} |
|
1588 |
||
6263
6bd0726c74e2
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6259
diff
changeset
|
1589 |
if (!v->current_order.IsValid()) return; |
0 | 1590 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1591 |
/* if the block of the next position is busy, stay put */ |
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1592 |
if (AirportHasBlock(v, &apc->layout[v->u.air.pos], apc)) return; |
0 | 1593 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1594 |
/* airport-road is free. We either have to go to another airport, or to the hangar |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1595 |
* ---> start moving */ |
0 | 1596 |
|
10125
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1597 |
bool go_to_hangar = false; |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1598 |
switch (v->current_order.GetType()) { |
0 | 1599 |
case OT_GOTO_STATION: // ready to fly to another airport |
1600 |
break; |
|
1601 |
case OT_GOTO_DEPOT: // visit hangar for serivicing, sale, etc. |
|
10125
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1602 |
go_to_hangar = v->current_order.GetDestination() == v->u.air.targetairport; |
0 | 1603 |
break; |
9688
c3e4766447ed
(svn r13794) -Fix: helicopters leaving a heliport could get stuck after processing conditional orders.
rubidium
parents:
9628
diff
changeset
|
1604 |
case OT_CONDITIONAL: |
c3e4766447ed
(svn r13794) -Fix: helicopters leaving a heliport could get stuck after processing conditional orders.
rubidium
parents:
9628
diff
changeset
|
1605 |
/* In case of a conditional order we just have to wait a tick |
c3e4766447ed
(svn r13794) -Fix: helicopters leaving a heliport could get stuck after processing conditional orders.
rubidium
parents:
9628
diff
changeset
|
1606 |
* longer, so the conditional order can actually be processed; |
c3e4766447ed
(svn r13794) -Fix: helicopters leaving a heliport could get stuck after processing conditional orders.
rubidium
parents:
9628
diff
changeset
|
1607 |
* we should not clear the order as that makes us go nowhere. */ |
c3e4766447ed
(svn r13794) -Fix: helicopters leaving a heliport could get stuck after processing conditional orders.
rubidium
parents:
9628
diff
changeset
|
1608 |
return; |
0 | 1609 |
default: // orders have been deleted (no orders), goto depot and don't bother us |
6263
6bd0726c74e2
(svn r9072) -Codechange: [Orders] added methods to orders to free them and check if they are in use
bjarni
parents:
6259
diff
changeset
|
1610 |
v->current_order.Free(); |
10125
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1611 |
go_to_hangar = GetStation(v->u.air.targetairport)->Airport()->nof_depots != 0; |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1612 |
} |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1613 |
|
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1614 |
if (go_to_hangar) { |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1615 |
v->u.air.state = HANGAR; |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1616 |
} else { |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1617 |
/* airplane goto state takeoff, helicopter to helitakeoff */ |
8f12703df400
(svn r14309) -Fix [FS#2244]: aircraft frozen above oil rig when the next order is invalid.
rubidium
parents:
10123
diff
changeset
|
1618 |
v->u.air.state = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : TAKEOFF; |
0 | 1619 |
} |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1620 |
AirportMove(v, apc); |
0 | 1621 |
} |
1622 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1623 |
static void AircraftEventHandler_General(Vehicle *v, const AirportFTAClass *apc) |
0 | 1624 |
{ |
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5259
diff
changeset
|
1625 |
assert("OK, you shouldn't be here, check your Airport Scheme!" && 0); |
0 | 1626 |
} |
1627 |
||
6087 | 1628 |
static void AircraftEventHandler_TakeOff(Vehicle *v, const AirportFTAClass *apc) |
1629 |
{ |
|
0 | 1630 |
PlayAircraftSound(v); // play takeoffsound for airplanes |
1631 |
v->u.air.state = STARTTAKEOFF; |
|
1632 |
} |
|
1633 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1634 |
static void AircraftEventHandler_StartTakeOff(Vehicle *v, const AirportFTAClass *apc) |
0 | 1635 |
{ |
1636 |
v->u.air.state = ENDTAKEOFF; |
|
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1637 |
v->UpdateDeltaXY(INVALID_DIR); |
0 | 1638 |
} |
1639 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1640 |
static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *apc) |
0 | 1641 |
{ |
1642 |
v->u.air.state = FLYING; |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1643 |
/* get the next position to go to, differs per airport */ |
0 | 1644 |
AircraftNextAirportPos_and_Order(v); |
1645 |
} |
|
1646 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1647 |
static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass *apc) |
0 | 1648 |
{ |
1649 |
v->u.air.state = FLYING; |
|
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1650 |
v->UpdateDeltaXY(INVALID_DIR); |
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1651 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1652 |
/* get the next position to go to, differs per airport */ |
0 | 1653 |
AircraftNextAirportPos_and_Order(v); |
1135
6c3b6e855c98
(svn r1636) fix: helicopters now go to a hangar if they are set for replacement or needs to be renewed
bjarni
parents:
1128
diff
changeset
|
1654 |
|
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1655 |
/* Send the helicopter to a hangar if needed for replacement */ |
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1656 |
if (CheckSendAircraftToHangarForReplacement(v)) { |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1657 |
_current_company = v->owner; |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1658 |
DoCommand(v->tile, v->index, DEPOT_SERVICE | DEPOT_LOCATE_HANGAR, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR); |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1659 |
_current_company = OWNER_NONE; |
1135
6c3b6e855c98
(svn r1636) fix: helicopters now go to a hangar if they are set for replacement or needs to be renewed
bjarni
parents:
1128
diff
changeset
|
1660 |
} |
0 | 1661 |
} |
1662 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1663 |
static void AircraftEventHandler_Flying(Vehicle *v, const AirportFTAClass *apc) |
0 | 1664 |
{ |
6087 | 1665 |
Station *st = GetStation(v->u.air.targetairport); |
0 | 1666 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1667 |
/* runway busy or not allowed to use this airstation, circle */ |
6027
ff15b8c7c087
(svn r8750) -Fix (r8747): PLANES defined in wingdi.h caused compilation error under Win32. Changed to AIRPLANES
KUDr
parents:
6025
diff
changeset
|
1668 |
if (apc->flags & (v->subtype == AIR_HELICOPTER ? AirportFTAClass::HELICOPTERS : AirportFTAClass::AIRPLANES) && |
2639 | 1669 |
st->airport_tile != 0 && |
1670 |
(st->owner == OWNER_NONE || st->owner == v->owner)) { |
|
0 | 1671 |
// {32,FLYING,NOTHING_block,37}, {32,LANDING,N,33}, {32,HELILANDING,N,41}, |
1672 |
// if it is an airplane, look for LANDING, for helicopter HELILANDING |
|
1673 |
// it is possible to choose from multiple landing runways, so loop until a free one is found |
|
6087 | 1674 |
byte landingtype = (v->subtype == AIR_HELICOPTER) ? HELILANDING : LANDING; |
1675 |
const AirportFTA *current = apc->layout[v->u.air.pos].next; |
|
0 | 1676 |
while (current != NULL) { |
1677 |
if (current->heading == landingtype) { |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1678 |
/* save speed before, since if AirportHasBlock is false, it resets them to 0 |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1679 |
* we don't want that for plane in air |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1680 |
* hack for speed thingie */ |
6087 | 1681 |
uint16 tcur_speed = v->cur_speed; |
1682 |
uint16 tsubspeed = v->subspeed; |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1683 |
if (!AirportHasBlock(v, current, apc)) { |
0 | 1684 |
v->u.air.state = landingtype; // LANDING / HELILANDING |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1685 |
/* it's a bit dirty, but I need to set position to next position, otherwise |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1686 |
* if there are multiple runways, plane won't know which one it took (because |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1687 |
* they all have heading LANDING). And also occupy that block! */ |
0 | 1688 |
v->u.air.pos = current->next_position; |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1689 |
SETBITS(st->airport_flags, apc->layout[v->u.air.pos].block); |
0 | 1690 |
return; |
1691 |
} |
|
1692 |
v->cur_speed = tcur_speed; |
|
1693 |
v->subspeed = tsubspeed; |
|
1694 |
} |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1695 |
current = current->next; |
0 | 1696 |
} |
1697 |
} |
|
1698 |
v->u.air.state = FLYING; |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1699 |
v->u.air.pos = apc->layout[v->u.air.pos].next_position; |
0 | 1700 |
} |
1701 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1702 |
static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc) |
0 | 1703 |
{ |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1704 |
v->u.air.state = ENDLANDING; |
0 | 1705 |
AircraftLandAirplane(v); // maybe crash airplane |
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1706 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1707 |
/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */ |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1708 |
if (CheckSendAircraftToHangarForReplacement(v)) { |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1709 |
_current_company = v->owner; |
8310
917cddd4b2c8
(svn r11875) -Fix: automatically sending aircraft to depot for autoreplace/renew is now triggered by the correct conditions
bjarni
parents:
8302
diff
changeset
|
1710 |
DoCommand(v->tile, v->index, DEPOT_SERVICE, DC_EXEC, CMD_SEND_AIRCRAFT_TO_HANGAR); |
10207
c291a21b304e
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium
parents:
10177
diff
changeset
|
1711 |
_current_company = OWNER_NONE; |
1195
54d50ac3311a
(svn r1699) - Feature [autoreplace] a plane will now go to the hangar right after landing if it needs to be replaced
bjarni
parents:
1194
diff
changeset
|
1712 |
} |
0 | 1713 |
} |
1714 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1715 |
static void AircraftEventHandler_HeliLanding(Vehicle *v, const AirportFTAClass *apc) |
0 | 1716 |
{ |
1717 |
v->u.air.state = HELIENDLANDING; |
|
6558
c88e142f896e
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
rubidium
parents:
6553
diff
changeset
|
1718 |
v->UpdateDeltaXY(INVALID_DIR); |
0 | 1719 |
} |
1720 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1721 |
static void AircraftEventHandler_EndLanding(Vehicle *v, const AirportFTAClass *apc) |
0 | 1722 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1723 |
/* next block busy, don't do a thing, just wait */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1724 |
if (AirportHasBlock(v, &apc->layout[v->u.air.pos], apc)) return; |
0 | 1725 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1726 |
/* if going to terminal (OT_GOTO_STATION) choose one |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1727 |
* 1. in case all terminals are busy AirportFindFreeTerminal() returns false or |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1728 |
* 2. not going for terminal (but depot, no order), |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1729 |
* --> get out of the way to the hangar. */ |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1730 |
if (v->current_order.IsType(OT_GOTO_STATION)) { |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1731 |
if (AirportFindFreeTerminal(v, apc)) return; |
0 | 1732 |
} |
1733 |
v->u.air.state = HANGAR; |
|
1734 |
||
1735 |
} |
|
1736 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1737 |
static void AircraftEventHandler_HeliEndLanding(Vehicle *v, const AirportFTAClass *apc) |
0 | 1738 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1739 |
/* next block busy, don't do a thing, just wait */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1740 |
if (AirportHasBlock(v, &apc->layout[v->u.air.pos], apc)) return; |
0 | 1741 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1742 |
/* if going to helipad (OT_GOTO_STATION) choose one. If airport doesn't have helipads, choose terminal |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1743 |
* 1. in case all terminals/helipads are busy (AirportFindFreeHelipad() returns false) or |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1744 |
* 2. not going for terminal (but depot, no order), |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1745 |
* --> get out of the way to the hangar IF there are terminals on the airport. |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1746 |
* --> else TAKEOFF |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1747 |
* the reason behind this is that if an airport has a terminal, it also has a hangar. Airplanes |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1748 |
* must go to a hangar. */ |
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
1749 |
if (v->current_order.IsType(OT_GOTO_STATION)) { |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1750 |
if (AirportFindFreeHelipad(v, apc)) return; |
0 | 1751 |
} |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1752 |
v->u.air.state = (apc->nof_depots != 0) ? HANGAR : HELITAKEOFF; |
0 | 1753 |
} |
1754 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1755 |
typedef void AircraftStateHandler(Vehicle *v, const AirportFTAClass *apc); |
0 | 1756 |
static AircraftStateHandler * const _aircraft_state_handlers[] = { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1757 |
AircraftEventHandler_General, // TO_ALL = 0 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1758 |
AircraftEventHandler_InHangar, // HANGAR = 1 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1759 |
AircraftEventHandler_AtTerminal, // TERM1 = 2 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1760 |
AircraftEventHandler_AtTerminal, // TERM2 = 3 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1761 |
AircraftEventHandler_AtTerminal, // TERM3 = 4 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1762 |
AircraftEventHandler_AtTerminal, // TERM4 = 5 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1763 |
AircraftEventHandler_AtTerminal, // TERM5 = 6 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1764 |
AircraftEventHandler_AtTerminal, // TERM6 = 7 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1765 |
AircraftEventHandler_AtTerminal, // HELIPAD1 = 8 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1766 |
AircraftEventHandler_AtTerminal, // HELIPAD2 = 9 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1767 |
AircraftEventHandler_TakeOff, // TAKEOFF = 10 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1768 |
AircraftEventHandler_StartTakeOff, // STARTTAKEOFF = 11 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1769 |
AircraftEventHandler_EndTakeOff, // ENDTAKEOFF = 12 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1770 |
AircraftEventHandler_HeliTakeOff, // HELITAKEOFF = 13 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1771 |
AircraftEventHandler_Flying, // FLYING = 14 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1772 |
AircraftEventHandler_Landing, // LANDING = 15 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1773 |
AircraftEventHandler_EndLanding, // ENDLANDING = 16 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1774 |
AircraftEventHandler_HeliLanding, // HELILANDING = 17 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1775 |
AircraftEventHandler_HeliEndLanding, // HELIENDLANDING = 18 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1776 |
AircraftEventHandler_AtTerminal, // TERM7 = 19 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1777 |
AircraftEventHandler_AtTerminal, // TERM8 = 20 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1778 |
AircraftEventHandler_AtTerminal, // HELIPAD3 = 21 |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1779 |
AircraftEventHandler_AtTerminal, // HELIPAD4 = 22 |
0 | 1780 |
}; |
1781 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1782 |
static void AirportClearBlock(const Vehicle *v, const AirportFTAClass *apc) |
0 | 1783 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1784 |
/* we have left the previous block, and entered the new one. Free the previous block */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1785 |
if (apc->layout[v->u.air.previous_pos].block != apc->layout[v->u.air.pos].block) { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4338
diff
changeset
|
1786 |
Station *st = GetStation(v->u.air.targetairport); |
2639 | 1787 |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1788 |
CLRBITS(st->airport_flags, apc->layout[v->u.air.previous_pos].block); |
0 | 1789 |
} |
1790 |
} |
|
1791 |
||
6099 | 1792 |
static void AirportGoToNextPosition(Vehicle *v) |
0 | 1793 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1794 |
/* if aircraft is not in position, wait until it is */ |
2549 | 1795 |
if (!AircraftController(v)) return; |
0 | 1796 |
|
6099 | 1797 |
const AirportFTAClass *apc = GetStation(v->u.air.targetairport)->Airport(); |
1798 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1799 |
AirportClearBlock(v, apc); |
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1800 |
AirportMove(v, apc); // move aircraft to next position |
0 | 1801 |
} |
1802 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1803 |
/* gets pos from vehicle and next orders */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1804 |
static bool AirportMove(Vehicle *v, const AirportFTAClass *apc) |
0 | 1805 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1806 |
/* error handling */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1807 |
if (v->u.air.pos >= apc->nofelements) { |
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5259
diff
changeset
|
1808 |
DEBUG(misc, 0, "[Ap] position %d is not valid for current airport. Max position is %d", v->u.air.pos, apc->nofelements-1); |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1809 |
assert(v->u.air.pos < apc->nofelements); |
0 | 1810 |
} |
1811 |
||
6087 | 1812 |
const AirportFTA *current = &apc->layout[v->u.air.pos]; |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1813 |
/* we have arrived in an important state (eg terminal, hangar, etc.) */ |
0 | 1814 |
if (current->heading == v->u.air.state) { |
6087 | 1815 |
byte prev_pos = v->u.air.pos; // location could be changed in state, so save it before-hand |
6490
fe4443fba5e3
(svn r9671) -Codechange: Implement NewGRF callback 36, which allows changing of various properties which were previously static. Vehicle max speed and train power/te/running costs are adjustable.
peter1138
parents:
6453
diff
changeset
|
1816 |
byte prev_state = v->u.air.state; |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1817 |
_aircraft_state_handlers[v->u.air.state](v, apc); |
2549 | 1818 |
if (v->u.air.state != FLYING) v->u.air.previous_pos = prev_pos; |
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
1819 |
if (v->u.air.state != prev_state || v->u.air.pos != prev_pos) UpdateAircraftCache(v); |
0 | 1820 |
return true; |
1821 |
} |
|
1822 |
||
1823 |
v->u.air.previous_pos = v->u.air.pos; // save previous location |
|
1824 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1825 |
/* there is only one choice to move to */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1826 |
if (current->next == NULL) { |
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1827 |
if (AirportSetBlocks(v, current, apc)) { |
0 | 1828 |
v->u.air.pos = current->next_position; |
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
1829 |
UpdateAircraftCache(v); |
0 | 1830 |
} // move to next position |
3579
4a55e8ce3087
(svn r4465) -Codechange (FS#60): Remove a variable no one really needs. (DaleStan)
celestar
parents:
3491
diff
changeset
|
1831 |
return false; |
0 | 1832 |
} |
1833 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1834 |
/* there are more choices to choose from, choose the one that |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1835 |
* matches our heading */ |
0 | 1836 |
do { |
1837 |
if (v->u.air.state == current->heading || current->heading == TO_ALL) { |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1838 |
if (AirportSetBlocks(v, current, apc)) { |
2639 | 1839 |
v->u.air.pos = current->next_position; |
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
1840 |
UpdateAircraftCache(v); |
2639 | 1841 |
} // move to next position |
3579
4a55e8ce3087
(svn r4465) -Codechange (FS#60): Remove a variable no one really needs. (DaleStan)
celestar
parents:
3491
diff
changeset
|
1842 |
return false; |
0 | 1843 |
} |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1844 |
current = current->next; |
0 | 1845 |
} while (current != NULL); |
1846 |
||
6036
333637e97400
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6032
diff
changeset
|
1847 |
DEBUG(misc, 0, "[Ap] cannot move further on Airport! (pos %d state %d) for vehicle %d", v->u.air.pos, v->u.air.state, v->index); |
0 | 1848 |
assert(0); |
1849 |
return false; |
|
1850 |
} |
|
1851 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1852 |
/* returns true if the road ahead is busy, eg. you must wait before proceeding */ |
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1853 |
static bool AirportHasBlock(Vehicle *v, const AirportFTA *current_pos, const AirportFTAClass *apc) |
0 | 1854 |
{ |
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1855 |
const AirportFTA *reference = &apc->layout[v->u.air.pos]; |
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1856 |
const AirportFTA *next = &apc->layout[current_pos->next_position]; |
0 | 1857 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1858 |
/* same block, then of course we can move */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1859 |
if (apc->layout[current_pos->position].block != next->block) { |
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1860 |
const Station *st = GetStation(v->u.air.targetairport); |
6011
04cd7c7f1d64
(svn r8733) -Fix(r8705): Forgot to change some more places where airport blocks are stored
celestar
parents:
5996
diff
changeset
|
1861 |
uint64 airport_flags = next->block; |
2630 | 1862 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1863 |
/* check additional possible extra blocks */ |
0 | 1864 |
if (current_pos != reference && current_pos->block != NOTHING_block) { |
1865 |
airport_flags |= current_pos->block; |
|
1866 |
} |
|
1867 |
||
1868 |
if (HASBITS(st->airport_flags, airport_flags)) { |
|
1869 |
v->cur_speed = 0; |
|
1870 |
v->subspeed = 0; |
|
1871 |
return true; |
|
1872 |
} |
|
1873 |
} |
|
1874 |
return false; |
|
1875 |
} |
|
1876 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1877 |
/** |
6409
2dc181151153
(svn r9545) -Documentation: Some corrections to previous doxygen work
belugas
parents:
6407
diff
changeset
|
1878 |
* "reserve" a block for the plane |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1879 |
* @param v airplane that requires the operation |
6409
2dc181151153
(svn r9545) -Documentation: Some corrections to previous doxygen work
belugas
parents:
6407
diff
changeset
|
1880 |
* @param current_pos of the vehicle in the list of blocks |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1881 |
* @param apc airport on which block is requsted to be set |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1882 |
* @returns true on success. Eg, next block was free and we have occupied it |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1883 |
*/ |
6087 | 1884 |
static bool AirportSetBlocks(Vehicle *v, const AirportFTA *current_pos, const AirportFTAClass *apc) |
0 | 1885 |
{ |
6087 | 1886 |
const AirportFTA *next = &apc->layout[current_pos->next_position]; |
1887 |
const AirportFTA *reference = &apc->layout[v->u.air.pos]; |
|
0 | 1888 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1889 |
/* if the next position is in another block, check it and wait until it is free */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1890 |
if ((apc->layout[current_pos->position].block & next->block) != next->block) { |
6011
04cd7c7f1d64
(svn r8733) -Fix(r8705): Forgot to change some more places where airport blocks are stored
celestar
parents:
5996
diff
changeset
|
1891 |
uint64 airport_flags = next->block; |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1892 |
/* search for all all elements in the list with the same state, and blocks != N |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1893 |
* this means more blocks should be checked/set */ |
6087 | 1894 |
const AirportFTA *current = current_pos; |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1895 |
if (current == reference) current = current->next; |
0 | 1896 |
while (current != NULL) { |
1897 |
if (current->heading == current_pos->heading && current->block != 0) { |
|
1898 |
airport_flags |= current->block; |
|
1899 |
break; |
|
1900 |
} |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1901 |
current = current->next; |
0 | 1902 |
}; |
1903 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1904 |
/* if the block to be checked is in the next position, then exclude that from |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1905 |
* checking, because it has been set by the airplane before */ |
2549 | 1906 |
if (current_pos->block == next->block) airport_flags ^= next->block; |
0 | 1907 |
|
6087 | 1908 |
Station* st = GetStation(v->u.air.targetairport); |
0 | 1909 |
if (HASBITS(st->airport_flags, airport_flags)) { |
1910 |
v->cur_speed = 0; |
|
1911 |
v->subspeed = 0; |
|
1912 |
return false; |
|
1913 |
} |
|
1914 |
||
1915 |
if (next->block != NOTHING_block) { |
|
1916 |
SETBITS(st->airport_flags, airport_flags); // occupy next block |
|
1917 |
} |
|
1918 |
} |
|
1919 |
return true; |
|
1920 |
} |
|
1921 |
||
1922 |
static bool FreeTerminal(Vehicle *v, byte i, byte last_terminal) |
|
1923 |
{ |
|
919
544f374ee392
(svn r1407) -Codechange: changed a lot around _stations, _vehicles, _towns and _industries
truelight
parents:
909
diff
changeset
|
1924 |
Station *st = GetStation(v->u.air.targetairport); |
0 | 1925 |
for (; i < last_terminal; i++) { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7923
diff
changeset
|
1926 |
if (!HasBit(st->airport_flags, _airport_terminal_flag[i])) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1927 |
/* TERMINAL# HELIPAD# */ |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4056
diff
changeset
|
1928 |
v->u.air.state = _airport_terminal_state[i]; // start moving to that terminal/helipad |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
1929 |
SetBit(st->airport_flags, _airport_terminal_flag[i]); // occupy terminal/helipad |
0 | 1930 |
return true; |
1931 |
} |
|
1932 |
} |
|
1933 |
return false; |
|
1934 |
} |
|
1935 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1936 |
static uint GetNumTerminals(const AirportFTAClass *apc) |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1937 |
{ |
2639 | 1938 |
uint num = 0; |
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
1018
diff
changeset
|
1939 |
|
6087 | 1940 |
for (uint i = apc->terminals[0]; i > 0; i--) num += apc->terminals[i]; |
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
1018
diff
changeset
|
1941 |
|
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1942 |
return num; |
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1943 |
} |
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1944 |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1945 |
static bool AirportFindFreeTerminal(Vehicle *v, const AirportFTAClass *apc) |
0 | 1946 |
{ |
1947 |
/* example of more terminalgroups |
|
4549
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1948 |
* {0,HANGAR,NOTHING_block,1}, {0,255,TERM_GROUP1_block,0}, {0,255,TERM_GROUP2_ENTER_block,1}, {0,0,N,1}, |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1949 |
* Heading 255 denotes a group. We see 2 groups here: |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1950 |
* 1. group 0 -- TERM_GROUP1_block (check block) |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1951 |
* 2. group 1 -- TERM_GROUP2_ENTER_block (check block) |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1952 |
* First in line is checked first, group 0. If the block (TERM_GROUP1_block) is free, it |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1953 |
* looks at the corresponding terminals of that group. If no free ones are found, other |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1954 |
* possible groups are checked (in this case group 1, since that is after group 0). If that |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1955 |
* fails, then attempt fails and plane waits |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4546
diff
changeset
|
1956 |
*/ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1957 |
if (apc->terminals[0] > 1) { |
6087 | 1958 |
const Station *st = GetStation(v->u.air.targetairport); |
1959 |
const AirportFTA *temp = apc->layout[v->u.air.pos].next; |
|
4843
4bef85baee3f
(svn r6769) -Codechange: Minor syntax, const correctness, variable localization, coding
Darkvater
parents:
4842
diff
changeset
|
1960 |
|
0 | 1961 |
while (temp != NULL) { |
1962 |
if (temp->heading == 255) { |
|
1963 |
if (!HASBITS(st->airport_flags, temp->block)) { |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1964 |
/* read which group do we want to go to? |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1965 |
* (the first free group) */ |
6087 | 1966 |
uint target_group = temp->next_position + 1; |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1967 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1968 |
/* at what terminal does the group start? |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1969 |
* that means, sum up all terminals of |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1970 |
* groups with lower number */ |
6087 | 1971 |
uint group_start = 0; |
1972 |
for (uint i = 1; i < target_group; i++) { |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1973 |
group_start += apc->terminals[i]; |
6087 | 1974 |
} |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1975 |
|
6087 | 1976 |
uint group_end = group_start + apc->terminals[target_group]; |
2549 | 1977 |
if (FreeTerminal(v, group_start, group_end)) return true; |
0 | 1978 |
} |
2549 | 1979 |
} else { |
1980 |
/* once the heading isn't 255, we've exhausted the possible blocks. |
|
1981 |
* So we cannot move */ |
|
1982 |
return false; |
|
0 | 1983 |
} |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1984 |
temp = temp->next; |
0 | 1985 |
} |
1986 |
} |
|
1987 |
||
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
1988 |
/* if there is only 1 terminalgroup, all terminals are checked (starting from 0 to max) */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1989 |
return FreeTerminal(v, 0, GetNumTerminals(apc)); |
0 | 1990 |
} |
1991 |
||
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
1992 |
static uint GetNumHelipads(const AirportFTAClass *apc) |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1993 |
{ |
2639 | 1994 |
uint num = 0; |
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
1018
diff
changeset
|
1995 |
|
6087 | 1996 |
for (uint i = apc->helipads[0]; i > 0; i--) num += apc->helipads[i]; |
1019
6bae6c11e865
(svn r1520) Trim 134 (!) lines with trailing whitespace ):
tron
parents:
1018
diff
changeset
|
1997 |
|
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1998 |
return num; |
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
1999 |
} |
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2000 |
|
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2001 |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2002 |
static bool AirportFindFreeHelipad(Vehicle *v, const AirportFTAClass *apc) |
0 | 2003 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2004 |
/* if an airport doesn't have helipads, use terminals */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2005 |
if (apc->helipads == NULL) return AirportFindFreeTerminal(v, apc); |
0 | 2006 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2007 |
/* if there are more helicoptergroups, pick one, just as in AirportFindFreeTerminal() */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2008 |
if (apc->helipads[0] > 1) { |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4072
diff
changeset
|
2009 |
const Station* st = GetStation(v->u.air.targetairport); |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2010 |
const AirportFTA* temp = apc->layout[v->u.air.pos].next; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4072
diff
changeset
|
2011 |
|
0 | 2012 |
while (temp != NULL) { |
2013 |
if (temp->heading == 255) { |
|
2014 |
if (!HASBITS(st->airport_flags, temp->block)) { |
|
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2015 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2016 |
/* read which group do we want to go to? |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2017 |
* (the first free group) */ |
6087 | 2018 |
uint target_group = temp->next_position + 1; |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2019 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2020 |
/* at what terminal does the group start? |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2021 |
* that means, sum up all terminals of |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2022 |
* groups with lower number */ |
6087 | 2023 |
uint group_start = 0; |
2024 |
for (uint i = 1; i < target_group; i++) { |
|
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2025 |
group_start += apc->helipads[i]; |
6087 | 2026 |
} |
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2027 |
|
6087 | 2028 |
uint group_end = group_start + apc->helipads[target_group]; |
2549 | 2029 |
if (FreeTerminal(v, group_start, group_end)) return true; |
0 | 2030 |
} |
2549 | 2031 |
} else { |
2032 |
/* once the heading isn't 255, we've exhausted the possible blocks. |
|
2033 |
* So we cannot move */ |
|
2034 |
return false; |
|
0 | 2035 |
} |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2036 |
temp = temp->next; |
0 | 2037 |
} |
2549 | 2038 |
} else { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2039 |
/* only 1 helicoptergroup, check all helipads |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2040 |
* The blocks for helipads start after the last terminal (MAX_TERMINALS) */ |
4842
79c4c9167d93
(svn r6768) -Cleanup: For airports change *Airport to *apc (variable naming coding style
Darkvater
parents:
4739
diff
changeset
|
2041 |
return FreeTerminal(v, MAX_TERMINALS, GetNumHelipads(apc) + MAX_TERMINALS); |
0 | 2042 |
} |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4412
diff
changeset
|
2043 |
return false; // it shouldn't get here anytime, but just to be sure |
0 | 2044 |
} |
2045 |
||
2046 |
static void AircraftEventHandler(Vehicle *v, int loop) |
|
2047 |
{ |
|
2048 |
v->tick_counter++; |
|
2049 |
||
2050 |
if (v->vehstatus & VS_CRASHED) { |
|
2051 |
HandleCrashedAircraft(v); |
|
2052 |
return; |
|
2053 |
} |
|
2054 |
||
2639 | 2055 |
if (v->vehstatus & VS_STOPPED) return; |
0 | 2056 |
|
2057 |
/* aircraft is broken down? */ |
|
2058 |
if (v->breakdown_ctr != 0) { |
|
2059 |
if (v->breakdown_ctr <= 2) { |
|
2060 |
HandleBrokenAircraft(v); |
|
2061 |
} else { |
|
9000
0eee16b3074d
(svn r12795) -Fix [FS#1938]: vehicles could break down during loading and keep loading. The intention of the break down code is not to break down when having zero speed, therefor break downs now do not happen when loading.
rubidium
parents:
8965
diff
changeset
|
2062 |
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--; |
0 | 2063 |
} |
2064 |
} |
|
2065 |
||
2066 |
HandleAircraftSmoke(v); |
|
8830
b288359ab100
(svn r12578) -Codechange: merge the aircrafts ProcessOrder too into the 'unified' ProcessOrder.
rubidium
parents:
8793
diff
changeset
|
2067 |
ProcessOrders(v); |
6594
9673331eb174
(svn r9808) -Codechange: unify the Handle<VehicleType>Loading functions.
rubidium
parents:
6592
diff
changeset
|
2068 |
v->HandleLoading(loop != 0); |
0 | 2069 |
|
8836
f6f1ea3d7e93
(svn r12584) -Codechange: do not access the order type directly.
rubidium
parents:
8830
diff
changeset
|
2070 |
if (v->current_order.IsType(OT_LOADING) || v->current_order.IsType(OT_LEAVESTATION)) return; |
0 | 2071 |
|
6099 | 2072 |
AirportGoToNextPosition(v); |
0 | 2073 |
} |
2074 |
||
7135
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2075 |
void Aircraft::Tick() |
0 | 2076 |
{ |
7135
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2077 |
if (!IsNormalAircraft(this)) return; |
0 | 2078 |
|
8556
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
2079 |
if (!(this->vehstatus & VS_STOPPED)) this->running_ticks++; |
ce8d86cc14d2
(svn r12134) -Change: count the number of ticks a vehicle was running this day to calculate running cost
smatz
parents:
8534
diff
changeset
|
2080 |
|
7135
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2081 |
if (this->subtype == AIR_HELICOPTER) HelicopterTickHandler(this); |
0 | 2082 |
|
7135
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2083 |
AgeAircraftCargo(this); |
0 | 2084 |
|
8778
f93ca9afacbf
(svn r12477) -Fix [FS#1883]: timetable times for aircraft were always doubled.
rubidium
parents:
8763
diff
changeset
|
2085 |
this->current_order_time++; |
f93ca9afacbf
(svn r12477) -Fix [FS#1883]: timetable times for aircraft were always doubled.
rubidium
parents:
8763
diff
changeset
|
2086 |
|
6193
6f20de9e4f1b
(svn r8973) -Feature/Codechange: Changed the internal unit for aircraft velocities to from 8mph to 1km/h (peter1138), also give aircraft realsitic velocities (so that 1km/h is 1km/h independent of vehicle type) (peter1138). Introduce a flag to reduce aircraft speed in holding patterns to some realistic velocity. Use this flag for the city airport for the time being and make use of the different entry points for this airport type.
celestar
parents:
6176
diff
changeset
|
2087 |
for (uint i = 0; i != 2; i++) { |
7135
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2088 |
AircraftEventHandler(this, i); |
3c1bcca0d6bb
(svn r10409) -Codechange: replace (Aircraft|RoadVeh|Ship|Train)_Tick with a Tick method in the Vehicle class.
rubidium
parents:
7134
diff
changeset
|
2089 |
if (this->type != VEH_AIRCRAFT) // In case it was deleted |
0 | 2090 |
break; |
2091 |
} |
|
2092 |
} |
|
2093 |
||
950
165341d74973
(svn r1440) -Feature: Allows more flexible airport layouts now, as the number of
celestar
parents:
926
diff
changeset
|
2094 |
|
10154
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2095 |
/** Returns aircraft's target station if v->u.air.target_airport |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2096 |
* is a valid station with airport. |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2097 |
* @param v vehicle to get target airport for |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2098 |
* @return pointer to target station, NULL if invalid |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2099 |
*/ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2100 |
Station *GetTargetAirportIfValid(const Vehicle *v) |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2101 |
{ |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2102 |
assert(v->type == VEH_AIRCRAFT); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2103 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2104 |
StationID sid = v->u.air.targetairport; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2105 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2106 |
if (!IsValidStationID(sid)) return NULL; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2107 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2108 |
Station *st = GetStation(sid); |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2109 |
|
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2110 |
return st->airport_tile == 0 ? NULL : st; |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2111 |
} |
5ae6e5fe6c71
(svn r14343) -Fix [FS#2300]: invalid v->u.air.targetairport could cause crashes at several places when the station pool got smaller
smatz
parents:
10125
diff
changeset
|
2112 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2113 |
/** need to be called to load aircraft from old version */ |
6247 | 2114 |
void UpdateOldAircraft() |
0 | 2115 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2116 |
/* set airport_flags to 0 for all airports just to be sure */ |
0 | 2117 |
Station *st; |
2118 |
FOR_ALL_STATIONS(st) { |
|
2119 |
st->airport_flags = 0; // reset airport |
|
2120 |
} |
|
2121 |
||
6087 | 2122 |
Vehicle *v_oldstyle; |
0 | 2123 |
FOR_ALL_VEHICLES(v_oldstyle) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2124 |
/* airplane has another vehicle with subtype 4 (shadow), helicopter also has 3 (rotor) |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2125 |
* skip those */ |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6247
diff
changeset
|
2126 |
if (v_oldstyle->type == VEH_AIRCRAFT && IsNormalAircraft(v_oldstyle)) { |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2127 |
/* airplane in terminal stopped doesn't hurt anyone, so goto next */ |
2639 | 2128 |
if (v_oldstyle->vehstatus & VS_STOPPED && v_oldstyle->u.air.state == 0) { |
0 | 2129 |
v_oldstyle->u.air.state = HANGAR; |
2130 |
continue; |
|
2131 |
} |
|
2132 |
||
2133 |
AircraftLeaveHangar(v_oldstyle); // make airplane visible if it was in a depot for example |
|
2134 |
v_oldstyle->vehstatus &= ~VS_STOPPED; // make airplane moving |
|
2135 |
v_oldstyle->u.air.state = FLYING; |
|
2136 |
AircraftNextAirportPos_and_Order(v_oldstyle); // move it to the entry point of the airport |
|
6153 | 2137 |
GetNewVehiclePosResult gp = GetNewVehiclePos(v_oldstyle); |
0 | 2138 |
v_oldstyle->tile = 0; // aircraft in air is tile=0 |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
164
diff
changeset
|
2139 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2140 |
/* correct speed of helicopter-rotors */ |
7492
35acee076719
(svn r11003) -Codechange: replace Vehicle->next to Vehicle->Next() and Vehicle->SetNext() so we can trap instances that change a next pointer and (in the future) update the first/previous pointers based on that.
rubidium
parents:
7490
diff
changeset
|
2141 |
if (v_oldstyle->subtype == AIR_HELICOPTER) v_oldstyle->Next()->Next()->cur_speed = 32; |
0 | 2142 |
|
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2143 |
/* set new position x,y,z */ |
0 | 2144 |
SetAircraftPosition(v_oldstyle, gp.x, gp.y, GetAircraftFlyingAltitude(v_oldstyle)); |
2145 |
} |
|
2146 |
} |
|
2147 |
} |
|
2148 |
||
6415
cb61e1346600
(svn r9551) -Documentation: Some more doxygen work
belugas
parents:
6409
diff
changeset
|
2149 |
/** |
cb61e1346600
(svn r9551) -Documentation: Some more doxygen work
belugas
parents:
6409
diff
changeset
|
2150 |
* Updates the status of the Aircraft heading or in the station |
cb61e1346600
(svn r9551) -Documentation: Some more doxygen work
belugas
parents:
6409
diff
changeset
|
2151 |
* @param st Station been updated |
cb61e1346600
(svn r9551) -Documentation: Some more doxygen work
belugas
parents:
6409
diff
changeset
|
2152 |
*/ |
6087 | 2153 |
void UpdateAirplanesOnNewStation(const Station *st) |
0 | 2154 |
{ |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2155 |
/* only 1 station is updated per function call, so it is enough to get entry_point once */ |
6032 | 2156 |
const AirportFTAClass *ap = st->Airport(); |
6087 | 2157 |
|
2158 |
Vehicle *v; |
|
0 | 2159 |
FOR_ALL_VEHICLES(v) { |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6247
diff
changeset
|
2160 |
if (v->type == VEH_AIRCRAFT && IsNormalAircraft(v)) { |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4412
diff
changeset
|
2161 |
if (v->u.air.targetairport == st->index) { // if heading to this airport |
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4412
diff
changeset
|
2162 |
/* update position of airplane. If plane is not flying, landing, or taking off |
6415
cb61e1346600
(svn r9551) -Documentation: Some more doxygen work
belugas
parents:
6409
diff
changeset
|
2163 |
* you cannot delete airport, so it doesn't matter */ |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4412
diff
changeset
|
2164 |
if (v->u.air.state >= FLYING) { // circle around |
6036
333637e97400
(svn r8759) -Feature: Allow airports to have up to 4 entry points depending on approach direction. Note: they're not yet used, but will be soon
celestar
parents:
6032
diff
changeset
|
2165 |
v->u.air.pos = v->u.air.previous_pos = AircraftGetEntryPoint(v, ap); |
0 | 2166 |
v->u.air.state = FLYING; |
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
2167 |
UpdateAircraftCache(v); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2168 |
/* landing plane needs to be reset to flying height (only if in pause mode upgrade, |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2169 |
* in normal mode, plane is reset in AircraftController. It doesn't hurt for FLYING */ |
6153 | 2170 |
GetNewVehiclePosResult gp = GetNewVehiclePos(v); |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2171 |
/* set new position x,y,z */ |
0 | 2172 |
SetAircraftPosition(v, gp.x, gp.y, GetAircraftFlyingAltitude(v)); |
2549 | 2173 |
} else { |
0 | 2174 |
assert(v->u.air.state == ENDTAKEOFF || v->u.air.state == HELITAKEOFF); |
6087 | 2175 |
byte takeofftype = (v->subtype == AIR_HELICOPTER) ? HELITAKEOFF : ENDTAKEOFF; |
6123
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2176 |
/* search in airportdata for that heading |
04eb770ec17e
(svn r8859) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents:
6117
diff
changeset
|
2177 |
* easiest to do, since this doesn't happen a lot */ |
6087 | 2178 |
for (uint cnt = 0; cnt < ap->nofelements; cnt++) { |
0 | 2179 |
if (ap->layout[cnt].heading == takeofftype) { |
2180 |
v->u.air.pos = ap->layout[cnt].position; |
|
6590
256bc777b83c
(svn r9804) -Fix (r9761): Update aircraft cached information when its 'pos' changes, as well as 'state'. (Thanks to bulb)
peter1138
parents:
6580
diff
changeset
|
2181 |
UpdateAircraftCache(v); |
0 | 2182 |
break; |
2183 |
} |
|
2184 |
} |
|
2185 |
} |
|
2186 |
} |
|
2187 |
} |
|
2188 |
} |
|
2189 |
} |