Add non-animated SSSE3 blitter
[openttd/fttd.git] / src / newgrf_airporttiles.h
blobb6ee6c65452fad45dee2184cd8350cc863482111
1 /* $Id$ */
3 /*
4 * This file is part of OpenTTD.
5 * 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.
6 * 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.
7 * 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/>.
8 */
10 /** @file newgrf_airporttiles.h NewGRF handling of airport tiles. */
12 #ifndef NEWGRF_AIRPORTTILES_H
13 #define NEWGRF_AIRPORTTILES_H
15 #include "airport.h"
16 #include "map/station.h"
17 #include "newgrf_animation_type.h"
18 #include "newgrf_commons.h"
19 #include "newgrf_spritegroup.h"
21 /** Scope resolver for handling the tiles of an airport. */
22 struct AirportTileScopeResolver : public ScopeResolver {
23 struct Station *st; ///< %Station of the airport for which the callback is run, or \c NULL for build gui.
24 byte airport_id; ///< Type of airport for which the callback is run.
25 TileIndex tile; ///< Tile for the callback, only valid for airporttile callbacks.
27 AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st);
29 /* virtual */ uint32 GetRandomBits() const;
30 /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const;
33 /** Resolver for tiles of an airport. */
34 struct AirportTileResolverObject : public ResolverObject {
35 AirportTileScopeResolver tiles_scope; ///< Scope resolver for the tiles.
37 AirportTileResolverObject(const AirportTileSpec *ats, TileIndex tile, Station *st,
38 CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0);
40 /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0)
42 switch (scope) {
43 case VSG_SCOPE_SELF: return &tiles_scope;
44 default: return ResolverObject::GetScope(scope, relative);
49 /**
50 * Defines the data structure of each individual tile of an airport.
52 struct AirportTileSpec {
53 AnimationInfo animation; ///< Information about the animation.
54 StringID name; ///< Tile Subname string, land information on this tile will give you "AirportName (TileSubname)"
55 uint8 callback_mask; ///< Bitmask telling which grf callback is set
56 uint8 animation_special_flags; ///< Extra flags to influence the animation
57 bool enabled; ///< entity still available (by default true). newgrf can disable it, though
58 GRFFileProps grf_prop; ///< properties related the the grf file
60 static const AirportTileSpec *Get(StationGfx gfx);
61 static const AirportTileSpec *GetByTile(TileIndex tile);
63 static void ResetAirportTiles();
65 private:
66 static AirportTileSpec tiles[NUM_AIRPORTTILES];
68 friend void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts);
71 StationGfx GetTranslatedAirportTileID(StationGfx gfx);
72 void AnimateAirportTile(TileIndex tile);
73 void AirportTileAnimationTrigger(Station *st, TileIndex tile, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID);
74 void AirportAnimationTrigger(Station *st, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID);
75 bool DrawNewAirportTile(TileInfo *ti, Station *st, StationGfx gfx, const AirportTileSpec *airts);
77 /**
78 * Get the station graphics of this airport tile
79 * @param t the tile to query
80 * @pre IsAirport(t)
81 * @return the station graphics
83 static inline StationGfx GetAirportGfx(TileIndex t)
85 assert(IsAirport(t));
86 return GetTranslatedAirportTileID(GetStationGfx(t));
89 #endif /* NEWGRF_AIRPORTTILES_H */