Files
@ r10081:2e5d80477353
Branch filter:
Location: cpp/openttd-patchpack/source/src/aircraft.h - annotation
r10081:2e5d80477353
4.6 KiB
text/x-c
(svn r14255) -Fix [configure]: remove the requirement to have a recent enough 'grep' which understands -m. Instead, use 'head -n 1' which is more common available
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r9111:983de9c5a848 r6117:d11b4c5c0aea r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r8785:8312063c5ee4 r8144:1432edd15267 r8786:f24a6d1fba34 r9070:e059c65164f3 r5475:3f5cd13d1b63 r6415:0ff8d179f802 r6248:b940b09d7ab8 r6409:8c320ab64062 r6410:c9e7142728ba r6409:8c320ab64062 r6409:8c320ab64062 r6248:b940b09d7ab8 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r6259:e2dba394134b r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r5854:d116ce6001d7 r7683:c8c2a80d3255 r6237:48ff143a04eb r7683:c8c2a80d3255 r7683:c8c2a80d3255 r6237:48ff143a04eb r7683:c8c2a80d3255 r6237:48ff143a04eb r6237:48ff143a04eb r6237:48ff143a04eb r6237:48ff143a04eb r6245:8321bb387e52 r6237:48ff143a04eb r6237:48ff143a04eb r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r7683:c8c2a80d3255 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6410:c9e7142728ba r5475:3f5cd13d1b63 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r5780:df0b8d779b37 r6415:0ff8d179f802 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r5475:3f5cd13d1b63 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r6409:8c320ab64062 r5972:0afe141fca29 r5475:3f5cd13d1b63 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6415:0ff8d179f802 r6087:a13ab75a089f r6087:a13ab75a089f r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r6490:ba88f1f6bfd1 r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r6552:7cade7798fcb r7412:e5f07529a093 r6552:7cade7798fcb r6563:67c636a8e3d4 r6553:04028e73a0f7 r6558:469828caa298 r6563:67c636a8e3d4 r6773:93083dcf60ec r9022:5be8b7703ae9 r7477:f74673aa99bf r7484:76081b2ff48c r7488:e5f4cea230c4 r7490:4e86e893fa7f r7135:3964060426dc r8467:0ea88f22d4aa r8830:3bad3e96d573 r8890:02179c54681e r6552:7cade7798fcb r6552:7cade7798fcb r5475:3f5cd13d1b63 | /* $Id$ */
/** @file aircraft.h Base for aircraft. */
#ifndef AIRCRAFT_H
#define AIRCRAFT_H
#include "station_map.h"
#include "station_base.h"
#include "vehicle_base.h"
#include "engine_func.h"
#include "engine_base.h"
/** An aircraft can be one ot those types */
enum AircraftSubType {
AIR_HELICOPTER = 0, ///< an helicopter
AIR_AIRCRAFT = 2, ///< an airplane
AIR_SHADOW = 4, ///< shadow of the aircraft
AIR_ROTOR = 6 ///< rotor of an helicopter
};
/** Check if the aircraft type is a normal flying device; eg
* not a rotor or a shadow
* @param v vehicle to check
* @return Returns true if the aircraft is a helicopter/airplane and
* false if it is a shadow or a rotor) */
static inline bool IsNormalAircraft(const Vehicle *v)
{
assert(v->type == VEH_AIRCRAFT);
/* To be fully correct the commented out functionality is the proper one,
* but since value can only be 0 or 2, it is sufficient to only check <= 2
* return (v->subtype == AIR_HELICOPTER) || (v->subtype == AIR_AIRCRAFT); */
return v->subtype <= AIR_AIRCRAFT;
}
/** Checks if an aircraft can use the station in question
* @param engine The engine to test
* @param st The station
* @return true if the aircraft can use the station
*/
static inline bool CanAircraftUseStation(EngineID engine, const Station *st)
{
const AirportFTAClass *apc = st->Airport();
const AircraftVehicleInfo *avi = AircraftVehInfo(engine);
return (apc->flags & (avi->subtype & AIR_CTOL ? AirportFTAClass::AIRPLANES : AirportFTAClass::HELICOPTERS)) != 0;
}
/** Checks if an aircraft can use the station at the tile in question
* @param engine The engine to test
* @param tile The tile where the station is
* @return true if the aircraft can use the station
*/
static inline bool CanAircraftUseStation(EngineID engine, TileIndex tile)
{
return CanAircraftUseStation(engine, GetStationByTile(tile));
}
/**
* Calculates cargo capacity based on an aircraft's passenger
* and mail capacities.
* @param cid Which cargo type to calculate a capacity for.
* @param avi Which engine to find a cargo capacity for.
* @return New cargo capacity value.
*/
uint16 AircraftDefaultCargoCapacity(CargoID cid, const AircraftVehicleInfo *avi);
/**
* This is the Callback method after the construction attempt of an aircraft
* @param success indicates completion (or not) of the operation
* @param tile of depot where aircraft is built
* @param p1 unused
* @param p2 unused
*/
void CcBuildAircraft(bool success, TileIndex tile, uint32 p1, uint32 p2);
/** Handle Aircraft specific tasks when a an Aircraft enters a hangar
* @param *v Vehicle that enters the hangar
*/
void HandleAircraftEnterHangar(Vehicle *v);
/** Get the size of the sprite of an aircraft sprite heading west (used for lists)
* @param engine The engine to get the sprite from
* @param width The width of the sprite
* @param height The height of the sprite
*/
void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height);
/**
* Updates the status of the Aircraft heading or in the station
* @param st Station been updated
*/
void UpdateAirplanesOnNewStation(const Station *st);
/** Update cached values of an aircraft.
* Currently caches callback 36 max speed.
* @param v Vehicle
*/
void UpdateAircraftCache(Vehicle *v);
/**
* This class 'wraps' Vehicle; you do not actually instantiate this class.
* You create a Vehicle using AllocateVehicle, so it is added to the pool
* and you reinitialize that to a Train using:
* v = new (v) Aircraft();
*
* As side-effect the vehicle type is set correctly.
*/
struct Aircraft : public Vehicle {
/** Initializes the Vehicle to an aircraft */
Aircraft() { this->type = VEH_AIRCRAFT; }
/** We want to 'destruct' the right class. */
virtual ~Aircraft() { this->PreDestructor(); }
const char *GetTypeString() const { return "aircraft"; }
void MarkDirty();
void UpdateDeltaXY(Direction direction);
ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_AIRCRAFT_INC : EXPENSES_AIRCRAFT_RUN; }
bool IsPrimaryVehicle() const { return IsNormalAircraft(this); }
SpriteID GetImage(Direction direction) const;
int GetDisplaySpeed() const { return this->cur_speed * 10 / 16; }
int GetDisplayMaxSpeed() const { return this->max_speed * 10 / 16; }
Money GetRunningCost() const { return AircraftVehInfo(this->engine_type)->running_cost * _price.aircraft_running; }
bool IsInDepot() const { return (this->vehstatus & VS_HIDDEN) != 0 && IsHangarTile(this->tile); }
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* AIRCRAFT_H */
|