2010-02-22 14:15:28 +00:00
|
|
|
/* $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_airporttiles.cpp NewGRF handling of airport tiles. */
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "airport.h"
|
2010-02-22 14:15:48 +00:00
|
|
|
#include "newgrf.h"
|
2010-02-22 14:15:28 +00:00
|
|
|
#include "newgrf_airporttiles.h"
|
|
|
|
#include "table/airporttiles.h"
|
|
|
|
|
|
|
|
|
2010-02-22 14:15:48 +00:00
|
|
|
AirportTileSpec AirportTileSpec::tiles[NUM_AIRPORTTILES];
|
|
|
|
|
|
|
|
AirportTileOverrideManager _airporttile_mngr(NEW_AIRPORTTILE_OFFSET, NUM_AIRPORTTILES, INVALID_AIRPORTTILE);
|
|
|
|
|
2010-02-22 14:15:28 +00:00
|
|
|
/**
|
|
|
|
* Retrieve airport tile spec for the given airport tile
|
|
|
|
* @param gfx index of airport tile
|
|
|
|
* @return A pointer to the corresponding AirportTileSpec
|
|
|
|
*/
|
|
|
|
/* static */ const AirportTileSpec *AirportTileSpec::Get(StationGfx gfx)
|
|
|
|
{
|
2010-02-22 14:15:48 +00:00
|
|
|
assert(gfx < lengthof(AirportTileSpec::tiles));
|
|
|
|
return &AirportTileSpec::tiles[gfx];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function initializes the tile array of AirportTileSpec
|
|
|
|
*/
|
|
|
|
void AirportTileSpec::ResetAirportTiles()
|
|
|
|
{
|
|
|
|
memset(&AirportTileSpec::tiles, 0, sizeof(AirportTileSpec::tiles));
|
|
|
|
memcpy(&AirportTileSpec::tiles, &_origin_airporttile_specs, sizeof(_origin_airporttile_specs));
|
|
|
|
|
|
|
|
/* Reset any overrides that have been set. */
|
|
|
|
_airporttile_mngr.ResetOverride();
|
|
|
|
}
|
|
|
|
|
|
|
|
void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts)
|
|
|
|
{
|
|
|
|
StationGfx airpt_id = this->AddEntityID(airpts->grf_prop.local_id, airpts->grf_prop.grffile->grfid, airpts->grf_prop.subst_id);
|
|
|
|
|
|
|
|
if (airpt_id == invalid_ID) {
|
|
|
|
grfmsg(1, "AirportTile.SetEntitySpec: Too many airport tiles allocated. Ignoring.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
memcpy(&AirportTileSpec::tiles[airpt_id], airpts, sizeof(*airpts));
|
|
|
|
|
|
|
|
/* Now add the overrides. */
|
|
|
|
for (int i = 0; i < max_offset; i++) {
|
|
|
|
AirportTileSpec *overridden_airpts = &AirportTileSpec::tiles[i];
|
|
|
|
|
|
|
|
if (entity_overrides[i] != airpts->grf_prop.local_id || grfid_overrides[i] != airpts->grf_prop.grffile->grfid) continue;
|
|
|
|
|
|
|
|
overridden_airpts->grf_prop.override = airpt_id;
|
|
|
|
overridden_airpts->enabled = false;
|
|
|
|
entity_overrides[i] = invalid_ID;
|
|
|
|
grfid_overrides[i] = 0;
|
|
|
|
}
|
2010-02-22 14:15:28 +00:00
|
|
|
}
|
|
|
|
|