OpenTTD Source 20241224-master-gf74b0cf984
aircraft.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#ifndef AIRCRAFT_H
11#define AIRCRAFT_H
12
13#include "station_map.h"
14#include "vehicle_base.h"
15
20static constexpr int AIRCRAFT_MIN_FLYING_ALTITUDE = 120;
21static constexpr int AIRCRAFT_MAX_FLYING_ALTITUDE = 360;
22static constexpr int PLANE_HOLD_MAX_FLYING_ALTITUDE = 150;
23static constexpr int HELICOPTER_HOLD_MAX_FLYING_ALTITUDE = 184;
24
25struct Aircraft;
26
34
38
39 /* The next two flags are to prevent stair climbing of the aircraft. The idea is that the aircraft
40 * will ascend or descend multiple flight levels at a time instead of following the contours of the
41 * landscape at a fixed altitude. This only has effect when there are more than 15 height levels. */
44
46};
47
48static const int ROTOR_Z_OFFSET = 5;
49
51void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
53void UpdateAircraftCache(Aircraft *v, bool update_range = false);
54
55void AircraftLeaveHangar(Aircraft *v, Direction exit_dir);
57void SetAircraftPosition(Aircraft *v, int x, int y, int z);
58
59void GetAircraftFlightLevelBounds(const Vehicle *v, int *min, int *max);
60template <class T>
61int GetAircraftFlightLevel(T *v, bool takeoff = false);
62
68
72struct Aircraft final : public SpecializedVehicle<Aircraft, VEH_AIRCRAFT> {
73 uint16_t crashed_counter;
74 uint8_t pos;
75 uint8_t previous_pos;
76 StationID targetairport;
77 uint8_t state;
78 Direction last_direction;
80 uint8_t turn_counter;
81 uint8_t flags;
82
83 AircraftCache acache;
84
88 virtual ~Aircraft() { this->PreDestructor(); }
89
90 void MarkDirty() override;
91 void UpdateDeltaXY() override;
92 ExpensesType GetExpenseType(bool income) const override { return income ? EXPENSES_AIRCRAFT_REVENUE : EXPENSES_AIRCRAFT_RUN; }
93 bool IsPrimaryVehicle() const override { return this->IsNormalAircraft(); }
94 void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override;
95 int GetDisplaySpeed() const override { return this->cur_speed; }
96 int GetDisplayMaxSpeed() const override { return this->vcache.cached_max_speed; }
97 int GetSpeedOldUnits() const { return this->vcache.cached_max_speed * 10 / 128; }
98 int GetCurrentMaxSpeed() const override { return this->GetSpeedOldUnits(); }
99 Money GetRunningCost() const override;
100
101 bool IsInDepot() const override
102 {
103 assert(this->IsPrimaryVehicle());
104 return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile);
105 }
106
107 bool Tick() override;
108 void OnNewCalendarDay() override;
109 void OnNewEconomyDay() override;
110 uint Crash(bool flooded = false) override;
111 TileIndex GetOrderStationLocation(StationID station) override;
112 TileIndex GetCargoTile() const override { return this->First()->tile; }
114
121 inline bool IsNormalAircraft() const
122 {
123 /* To be fully correct the commented out functionality is the proper one,
124 * but since value can only be 0 or 2, it is sufficient to only check <= 2
125 * return (this->subtype == AIR_HELICOPTER) || (this->subtype == AIR_AIRCRAFT); */
126 return this->subtype <= AIR_AIRCRAFT;
127 }
128
133 uint16_t GetRange() const
134 {
135 return this->acache.cached_max_range;
136 }
137};
138
139void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result);
140
142void HandleMissingAircraftOrders(Aircraft *v);
143
144#endif /* AIRCRAFT_H */
AirVehicleFlags
Flags for air vehicles; shared with disaster vehicles.
Definition aircraft.h:36
@ VAF_HELI_DIRECT_DESCENT
The helicopter is descending directly at its destination (helipad or in front of hangar)
Definition aircraft.h:45
@ VAF_DEST_TOO_FAR
Next destination is too far away.
Definition aircraft.h:37
@ VAF_IN_MIN_HEIGHT_CORRECTION
The vehicle is currently raising its altitude because it hit the lower bound.
Definition aircraft.h:43
@ VAF_IN_MAX_HEIGHT_CORRECTION
The vehicle is currently lowering its altitude because it hit the upper bound.
Definition aircraft.h:42
void GetAircraftFlightLevelBounds(const Vehicle *v, int *min, int *max)
Get the 'flight level' bounds, in pixels from 'z_pos' 0 for a particular vehicle for normal flight si...
static constexpr int AIRCRAFT_MIN_FLYING_ALTITUDE
Base values for flight levels above ground level for 'normal' flight and holding patterns.
Definition aircraft.h:20
static constexpr int HELICOPTER_HOLD_MAX_FLYING_ALTITUDE
holding flying altitude above tile of helicopters.
Definition aircraft.h:23
static const int ROTOR_Z_OFFSET
Z Offset between helicopter- and rotorsprite.
Definition aircraft.h:48
static constexpr int PLANE_HOLD_MAX_FLYING_ALTITUDE
holding flying altitude above tile of planes.
Definition aircraft.h:22
void UpdateAirplanesOnNewStation(const Station *st)
Updates the status of the Aircraft heading or in the station.
void AircraftNextAirportPos_and_Order(Aircraft *v)
set the right pos when heading to other airports after takeoff
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type)
Get the size of the sprite of an aircraft sprite heading west (used for lists).
Station * GetTargetAirportIfValid(const Aircraft *v)
Returns aircraft's target station if v->target_airport is a valid station with airport.
void AircraftLeaveHangar(Aircraft *v, Direction exit_dir)
Aircraft is about to leave the hangar.
void SetAircraftPosition(Aircraft *v, int x, int y, int z)
Set aircraft position.
AircraftSubType
An aircraft can be one of those types.
Definition aircraft.h:28
@ AIR_AIRCRAFT
an airplane
Definition aircraft.h:30
@ AIR_ROTOR
rotor of an helicopter
Definition aircraft.h:32
@ AIR_SHADOW
shadow of the aircraft
Definition aircraft.h:31
@ AIR_HELICOPTER
an helicopter
Definition aircraft.h:29
void HandleAircraftEnterHangar(Aircraft *v)
Handle Aircraft specific tasks when an Aircraft enters a hangar.
static constexpr int AIRCRAFT_MAX_FLYING_ALTITUDE
Maximum flying altitude above tile.
Definition aircraft.h:21
void UpdateAircraftCache(Aircraft *v, bool update_range=false)
Update cached values of an aircraft.
Direction
Defines the 8 directions on the map.
ExpensesType
Types of expenses.
@ EXPENSES_AIRCRAFT_REVENUE
Revenue from aircraft.
@ EXPENSES_AIRCRAFT_RUN
Running costs aircraft.
uint16_t EngineID
Unique identification number of an engine.
Definition engine_type.h:21
Maps accessors for stations.
bool IsHangarTile(Tile t)
Is tile t an hangar tile?
Variables that are cached to improve performance and such.
Definition aircraft.h:64
uint32_t cached_max_range_sqr
Cached squared maximum range.
Definition aircraft.h:65
uint16_t cached_max_range
Cached maximum range.
Definition aircraft.h:66
Aircraft, helicopters, rotors and their shadows belong to this class.
Definition aircraft.h:72
bool Tick() override
Calls the tick handler of the vehicle.
Aircraft()
We don't want GCC to zero our struct! It already is zeroed and has an index!
Definition aircraft.h:86
uint8_t pos
Next desired position of the aircraft.
Definition aircraft.h:74
uint8_t state
State of the airport.
Definition aircraft.h:77
int GetDisplayMaxSpeed() const override
Gets the maximum speed in km-ish/h that can be sent into SetDParam for string processing.
Definition aircraft.h:96
uint8_t flags
Aircraft flags.
Definition aircraft.h:81
Money GetRunningCost() const override
Gets the running cost of a vehicle.
virtual ~Aircraft()
We want to 'destruct' the right class.
Definition aircraft.h:88
void UpdateDeltaXY() override
Updates the x and y offsets and the size of the sprite used for this vehicle.
uint8_t number_consecutive_turns
Protection to prevent the aircraft of making a lot of turns in order to reach a specific point.
Definition aircraft.h:79
void OnNewEconomyDay() override
Economy day handler.
uint Crash(bool flooded=false) override
Crash the (whole) vehicle chain.
int GetCurrentMaxSpeed() const override
Calculates the maximum speed of the vehicle under its current conditions.
Definition aircraft.h:98
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override
Gets the sprite to show for the given direction.
void OnNewCalendarDay() override
Calendar day handler.
uint8_t turn_counter
Ticks between each turn to prevent > 45 degree turns.
Definition aircraft.h:80
ExpensesType GetExpenseType(bool income) const override
Sets the expense type associated to this vehicle type.
Definition aircraft.h:92
TileIndex GetOrderStationLocation(StationID station) override
Determine the location for the station where the vehicle goes to next.
bool IsNormalAircraft() const
Check if the aircraft type is a normal flying device; eg not a rotor or a shadow.
Definition aircraft.h:121
void MarkDirty() override
Marks the vehicles to be redrawn and updates cached variables.
bool IsPrimaryVehicle() const override
Whether this is the primary vehicle in the chain.
Definition aircraft.h:93
uint16_t GetRange() const
Get the range of this aircraft.
Definition aircraft.h:133
uint8_t previous_pos
Previous desired position of the aircraft.
Definition aircraft.h:75
int GetDisplaySpeed() const override
Gets the speed in km-ish/h that can be sent into SetDParam for string processing.
Definition aircraft.h:95
bool IsInDepot() const override
Check whether the vehicle is in the depot.
Definition aircraft.h:101
StationID targetairport
Airport to go to next.
Definition aircraft.h:76
ClosestDepot FindClosestDepot() override
Find the closest depot for this vehicle and tell us the location, DestinationID and whether we should...
uint16_t crashed_counter
Timer for handling crash animations.
Definition aircraft.h:73
Structure to return information about the closest depot location, and whether it could be found.
Class defining several overloaded accessors so we don't have to cast vehicle types that often.
Aircraft * First() const
Get the first vehicle in the chain.
Station data structure.
uint16_t cached_max_speed
Maximum speed of the consist (minimum of the max speed of all vehicles in the consist).
Sprite sequence for a vehicle part.
Vehicle data structure.
Direction direction
facing
uint8_t subtype
subtype (Filled with values from AircraftSubType/DisasterSubType/EffectVehicleType/GroundVehicleSubty...
void PreDestructor()
Destroy all stuff that (still) needs the virtual functions to work properly.
Definition vehicle.cpp:826
uint8_t vehstatus
Status.
VehicleCache vcache
Cache of often used vehicle values.
uint16_t cur_speed
current speed
TileIndex tile
Current tile index.
Base class for all vehicles.
@ VS_HIDDEN
Vehicle is not visible.
EngineImageType
Visualisation contexts of vehicles and engines.