(svn r19323) -Codechange: copy the AirportSpec original array to an internal array in AirportSpec

This commit is contained in:
yexo 2010-03-05 23:21:23 +00:00
parent 308781664b
commit 664934e6f6
3 changed files with 21 additions and 3 deletions

View File

@ -36,6 +36,7 @@
#include "newgrf_townname.h"
#include "newgrf_industries.h"
#include "newgrf_airporttiles.h"
#include "newgrf_airport.h"
#include "rev.h"
#include "fios.h"
#include "rail.h"
@ -5907,6 +5908,7 @@ static void ResetNewGRFData()
/* Reset airport-related structures */
ResetCustomAirports();
AirportSpec::ResetAirports();
AirportTileSpec::ResetAirportTiles();
/* Reset canal sprite groups and flags */

View File

@ -18,6 +18,8 @@
AirportSpec AirportSpec::dummy = {NULL, NULL, 0, 0, 0, 0, 0, MIN_YEAR, MIN_YEAR, ATP_TTDP_LARGE};
AirportSpec AirportSpec::oilrig = {NULL, NULL, 0, 1, 1, 0, 4, MIN_YEAR, MIN_YEAR, ATP_TTDP_OILRIG};
AirportSpec AirportSpec::specs[NUM_AIRPORTS];
/**
* Retrieve airport spec for the given airport
* @param type index of airport
@ -26,9 +28,8 @@ AirportSpec AirportSpec::oilrig = {NULL, NULL, 0, 1, 1, 0, 4, MIN_YEAR, MIN_YEAR
/* static */ const AirportSpec *AirportSpec::Get(byte type)
{
if (type == AT_OILRIG) return &oilrig;
assert(type < NUM_AIRPORTS);
extern const AirportSpec _origin_airport_specs[];
return &_origin_airport_specs[type];
assert(type < lengthof(AirportSpec::specs));
return &AirportSpec::specs[type];
}
bool AirportSpec::IsAvailable() const
@ -37,3 +38,13 @@ bool AirportSpec::IsAvailable() const
if (_settings_game.station.never_expire_airports) return true;
return _cur_year <= this->max_year;
}
/**
* This function initialize the airportspec array.
*/
void AirportSpec::ResetAirports()
{
extern const AirportSpec _origin_airport_specs[];
memset(&AirportSpec::specs, 0, sizeof(AirportSpec::specs));
memcpy(&AirportSpec::specs, &_origin_airport_specs, sizeof(AirportSpec) * NUM_AIRPORTS);
}

View File

@ -50,8 +50,13 @@ struct AirportSpec {
bool IsAvailable() const;
static void ResetAirports();
static AirportSpec dummy;
static AirportSpec oilrig;
private:
static AirportSpec specs[NUM_AIRPORTS];
};