Files @ r28403:d4cdcb69255f
Branch filter:

Location: cpp/openttd-patchpack/source/src/newgrf_airporttiles.h - annotation

Patric Stout
Fix: race-condition when quitting the game with libcurl (#11688)

There could be a callback in _new_http_callbacks that is not
processed yet. All callbacks in _http_callbacks were cancelled,
but not the ones in _new_http_callbacks
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14605:d6985df0e36b
r14607:4bad45b6a4eb
r14605:d6985df0e36b
r15925:9a7fe46227a0
r14606:2cf1bcd611f7
r19731:a67265494366
r22756:8ffd1846f871
r19731:a67265494366
r19738:837a139219f0
r19731:a67265494366
r23607:36c15679007d
r19731:a67265494366
r19731:a67265494366
r24069:49625df81342
r19731:a67265494366
r22756:8ffd1846f871
r22756:8ffd1846f871
r22756:8ffd1846f871
r22756:8ffd1846f871
r23607:36c15679007d
r22756:8ffd1846f871
r22756:8ffd1846f871
r24069:49625df81342
r22756:8ffd1846f871
r23607:36c15679007d
r22756:8ffd1846f871
r22756:8ffd1846f871
r19731:a67265494366
r27737:728d55b97775
r27942:f7389062d120
r19731:a67265494366
r19731:a67265494366
r19738:837a139219f0
r19731:a67265494366
r19738:837a139219f0
r27888:73e8956ac824
r19731:a67265494366
r19731:a67265494366
r27737:728d55b97775
r19731:a67265494366
r23497:a0ab44ebd2fa
r19731:a67265494366
r19731:a67265494366
r19731:a67265494366
r27888:73e8956ac824
r19737:d7c69e3b4bd4
r19731:a67265494366
r19731:a67265494366
r24069:49625df81342
r24069:49625df81342
r27737:728d55b97775
r19731:a67265494366
r14605:d6985df0e36b
r14605:d6985df0e36b
r19944:25a78576fb5e
r14605:d6985df0e36b
r14605:d6985df0e36b
r15925:9a7fe46227a0
r14612:34835c8eb396
r27737:728d55b97775
r27737:728d55b97775
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14605:d6985df0e36b
r15927:e47dbd2576e2
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14606:2cf1bcd611f7
r14605:d6985df0e36b
r14605:d6985df0e36b
r14610:ca137edec6fe
r14610:ca137edec6fe
r14610:ca137edec6fe
r27944:a5c70dad53db
r14608:a81032019c31
r14605:d6985df0e36b
/*
 * 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_airporttiles.h NewGRF handling of airport tiles. */

#ifndef NEWGRF_AIRPORTTILES_H
#define NEWGRF_AIRPORTTILES_H

#include "airport.h"
#include "station_map.h"
#include "newgrf_animation_type.h"
#include "newgrf_commons.h"
#include "newgrf_spritegroup.h"
#include "station_base.h"

/** Scope resolver for handling the tiles of an airport. */
struct AirportTileScopeResolver : public ScopeResolver {
	struct Station *st;  ///< %Station of the airport for which the callback is run, or \c nullptr for build gui.
	byte airport_id;     ///< Type of airport for which the callback is run.
	TileIndex tile;      ///< Tile for the callback, only valid for airporttile callbacks.
	const AirportTileSpec *ats;

	/**
	 * Constructor of the scope resolver specific for airport tiles.
	 * @param ats Specification of the airport tiles.
	 * @param tile %Tile for the callback, only valid for airporttile callbacks.
	 * @param st Station of the airport for which the callback is run, or \c nullptr for build gui.
	 */
	AirportTileScopeResolver(ResolverObject &ro, const AirportTileSpec *ats, TileIndex tile, Station *st)
		: ScopeResolver(ro), st(st), tile(tile), ats(ats)
	{
		assert(st != nullptr);
		this->airport_id = st->airport.type;
	}

	uint32_t GetRandomBits() const override;
	uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override;
};

/** Resolver for tiles of an airport. */
struct AirportTileResolverObject : public ResolverObject {
	AirportTileScopeResolver tiles_scope; ///< Scope resolver for the tiles.
	AirportScopeResolver airport_scope;   ///< Scope resolver for the airport owning the tile.

	AirportTileResolverObject(const AirportTileSpec *ats, TileIndex tile, Station *st,
			CallbackID callback = CBID_NO_CALLBACK, uint32_t callback_param1 = 0, uint32_t callback_param2 = 0);

	ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override
	{
		switch (scope) {
			case VSG_SCOPE_SELF: return &tiles_scope;
			case VSG_SCOPE_PARENT: return &airport_scope;
			default: return ResolverObject::GetScope(scope, relative);
		}
	}

	GrfSpecFeature GetFeature() const override;
	uint32_t GetDebugID() const override;
};

/**
 * Defines the data structure of each individual tile of an airport.
 */
struct AirportTileSpec {
	AnimationInfo animation;              ///< Information about the animation.
	StringID name;                        ///< Tile Subname string, land information on this tile will give you "AirportName (TileSubname)"
	uint8_t callback_mask;                  ///< Bitmask telling which grf callback is set
	uint8_t animation_special_flags;        ///< Extra flags to influence the animation
	bool enabled;                         ///< entity still available (by default true). newgrf can disable it, though
	GRFFileProps grf_prop;                ///< properties related the the grf file

	static const AirportTileSpec *Get(StationGfx gfx);
	static const AirportTileSpec *GetByTile(TileIndex tile);

	static void ResetAirportTiles();

private:
	static AirportTileSpec tiles[NUM_AIRPORTTILES];

	friend void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts);
};

void AnimateAirportTile(TileIndex tile);
void AirportTileAnimationTrigger(Station *st, TileIndex tile, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID);
void AirportAnimationTrigger(Station *st, AirpAnimationTrigger trigger, CargoID cargo_type = CT_INVALID);
bool DrawNewAirportTile(TileInfo *ti, Station *st, const AirportTileSpec *airts);

#endif /* NEWGRF_AIRPORTTILES_H */