Files
@ r23882:d683a0787bc9
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_airport.h - annotation
r23882:d683a0787bc9
5.4 KiB
text/x-c
Codechange: Don't use SDL_CreateRGBSurfaceWithFormat()
This function requires libSDL 2.0.5 or higher. It looks like we don't
need to use it, and can just use the original SDL_CreateRGBSurface(),
with the masks set to 0, to trigger the default 8-bit format, which is
SDL_PIXELFORMAT_INDEX8.
Closes #7785
Note: this code path is activated by using an 8-bit blitter, like:
./bin/openttd -b 8bpp-simple
This function requires libSDL 2.0.5 or higher. It looks like we don't
need to use it, and can just use the original SDL_CreateRGBSurface(),
with the masks set to 0, to trigger the default 8-bit format, which is
SDL_PIXELFORMAT_INDEX8.
Closes #7785
Note: this code path is activated by using an 8-bit blitter, like:
./bin/openttd -b 8bpp-simple
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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r15934:789c54d0000d r14618:a194334b4a3a r15730:99440cf75a72 r14851:b3915c863ff3 r18604:49cb0a019581 r14618:a194334b4a3a r17629:21e9dfd343cd r14618:a194334b4a3a r14618:a194334b4a3a r15656:e21174b90f22 r14618:a194334b4a3a r15656:e21174b90f22 r15656:e21174b90f22 r14618:a194334b4a3a r14618:a194334b4a3a r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18782:6453522c2154 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18796:9773349625e3 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18605:ae5edad1d665 r18605:ae5edad1d665 r18605:ae5edad1d665 r18605:ae5edad1d665 r18605:ae5edad1d665 r18605:ae5edad1d665 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r18604:49cb0a019581 r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14900:c679fdaeebe6 r14727:9ddd9a15dd3b r14705:be9a20100bed r14708:daac455c605a r14705:be9a20100bed r14705:be9a20100bed r14705:be9a20100bed r14705:be9a20100bed r14705:be9a20100bed r14705:be9a20100bed r14859:60ec0ffb536d r14859:60ec0ffb536d r15656:e21174b90f22 r17926:2974cfac001c r20667:47a3e7edbb11 r14859:60ec0ffb536d r14859:60ec0ffb536d r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14755:86b8e81d785d r14618:a194334b4a3a r22687:887d71cc6873 r14756:4a18d12a6593 r14859:60ec0ffb536d r14859:60ec0ffb536d r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14618:a194334b4a3a r14728:03e87eafbf54 r14708:daac455c605a r15725:0c28e29aa5d4 r15693:10940496c385 r19944:25a78576fb5e r14729:e9e99770f7ff r18845:66bf168f1100 r18845:66bf168f1100 r14618:a194334b4a3a r14618:a194334b4a3a r14726:e42b5d6d3c6a r14618:a194334b4a3a r14618:a194334b4a3a r23570:fd1a0734432c r14618:a194334b4a3a r14725:026b6e13b803 r14725:026b6e13b803 r14730:3dabe1009fcf r14730:3dabe1009fcf r14730:3dabe1009fcf r14730:3dabe1009fcf r14730:3dabe1009fcf r14730:3dabe1009fcf r14730:3dabe1009fcf r22687:887d71cc6873 r14725:026b6e13b803 r14725:026b6e13b803 r17629:21e9dfd343cd r14618:a194334b4a3a r14618:a194334b4a3a r14727:9ddd9a15dd3b r15730:99440cf75a72 r14727:9ddd9a15dd3b r14727:9ddd9a15dd3b r14618:a194334b4a3a r15695:b17629bb1837 r15695:b17629bb1837 r14618:a194334b4a3a | /* $Id$ */
/*
* This file is part of OpenTTD.
* 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.
* 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.
* 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/>.
*/
/** @file newgrf_airport.h NewGRF handling of airports. */
#ifndef NEWGRF_AIRPORT_H
#define NEWGRF_AIRPORT_H
#include "airport.h"
#include "date_type.h"
#include "newgrf_class.h"
#include "newgrf_commons.h"
#include "tilearea_type.h"
/** Copy from station_map.h */
typedef byte StationGfx;
/** Tile-offset / AirportTileID pair. */
struct AirportTileTable {
TileIndexDiffC ti; ///< Tile offset from the top-most airport tile.
StationGfx gfx; ///< AirportTile to use for this tile.
};
/** Iterator to iterate over all tiles belonging to an airport spec. */
class AirportTileTableIterator : public TileIterator {
private:
const AirportTileTable *att; ///< The offsets.
TileIndex base_tile; ///< The tile we base the offsets off.
public:
/**
* Construct the iterator.
* @param att The TileTable we want to iterate over.
* @param base_tile The basetile for all offsets.
*/
AirportTileTableIterator(const AirportTileTable *att, TileIndex base_tile) : TileIterator(base_tile + ToTileIndexDiff(att->ti)), att(att), base_tile(base_tile)
{
}
inline TileIterator& operator ++()
{
this->att++;
if (this->att->ti.x == -0x80) {
this->tile = INVALID_TILE;
} else {
this->tile = this->base_tile + ToTileIndexDiff(this->att->ti);
}
return *this;
}
/** Get the StationGfx for the current tile. */
StationGfx GetStationGfx() const
{
return this->att->gfx;
}
virtual AirportTileTableIterator *Clone() const
{
return new AirportTileTableIterator(*this);
}
};
/** List of default airport classes. */
enum AirportClassID {
APC_BEGIN = 0, ///< Lowest valid airport class id
APC_SMALL = 0, ///< id for small airports class
APC_LARGE, ///< id for large airports class
APC_HUB, ///< id for hub airports class
APC_HELIPORT, ///< id for heliports
APC_MAX = 16, ///< maximum number of airport classes
};
/** Allow incrementing of AirportClassID variables */
DECLARE_POSTFIX_INCREMENT(AirportClassID)
/** TTDP airport types. Used to map our types to TTDPatch's */
enum TTDPAirportType {
ATP_TTDP_SMALL, ///< Same as AT_SMALL
ATP_TTDP_LARGE, ///< Same as AT_LARGE
ATP_TTDP_HELIPORT, ///< Same as AT_HELIPORT
ATP_TTDP_OILRIG, ///< Same as AT_OILRIG
};
/** A list of all hangar tiles in an airport */
struct HangarTileTable {
TileIndexDiffC ti; ///< Tile offset from the top-most airport tile.
Direction dir; ///< Direction of the exit.
byte hangar_num; ///< The hangar to which this tile belongs.
};
/**
* Defines the data structure for an airport.
*/
struct AirportSpec {
const struct AirportFTAClass *fsm; ///< the finite statemachine for the default airports
const AirportTileTable * const *table; ///< list of the tiles composing the airport
const Direction *rotation; ///< the rotation of each tiletable
byte num_table; ///< number of elements in the table
const HangarTileTable *depot_table; ///< gives the position of the depots on the airports
byte nof_depots; ///< the number of hangar tiles in this airport
byte size_x; ///< size of airport in x direction
byte size_y; ///< size of airport in y direction
byte noise_level; ///< noise that this airport generates
byte catchment; ///< catchment area of this airport
Year min_year; ///< first year the airport is available
Year max_year; ///< last year the airport is available
StringID name; ///< name of this airport
TTDPAirportType ttd_airport_type; ///< ttdpatch airport type (Small/Large/Helipad/Oilrig)
AirportClassID cls_id; ///< the class to which this airport type belongs
SpriteID preview_sprite; ///< preview sprite for this airport
uint16 maintenance_cost; ///< maintenance cost multiplier
/* Newgrf data */
bool enabled; ///< Entity still available (by default true). Newgrf can disable it, though.
struct GRFFileProps grf_prop; ///< Properties related to the grf file.
static const AirportSpec *Get(byte type);
static AirportSpec *GetWithoutOverride(byte type);
bool IsAvailable() const;
bool IsWithinMapBounds(byte table, TileIndex index) const;
static void ResetAirports();
/** Get the index of this spec. */
byte GetIndex() const
{
assert(this >= specs && this < endof(specs));
return (byte)(this - specs);
}
static const AirportSpec dummy; ///< The dummy airport.
private:
static AirportSpec specs[NUM_AIRPORTS]; ///< Specs of the airports.
};
/** Information related to airport classes. */
typedef NewGRFClass<AirportSpec, AirportClassID, APC_MAX> AirportClass;
void BindAirportSpecs();
StringID GetAirportTextCallback(const AirportSpec *as, byte layout, uint16 callback);
#endif /* NEWGRF_AIRPORT_H */
|