changeset 15708:49e7443561b2 draft

(svn r20374) -Codechange: add persistant storage for airports
author yexo <yexo@openttd.org>
date Thu, 05 Aug 2010 12:06:13 +0000
parents 3cc7d0c81fc3
children db841e8e324a
files src/newgrf_airport.cpp src/saveload/station_sl.cpp src/station_base.h
diffstat 3 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_airport.cpp
+++ b/src/newgrf_airport.cpp
@@ -263,6 +263,9 @@
 	}
 
 	switch (variable) {
+		/* Get a variable from the persistent storage */
+		case 0x7C: return st->airport.psa.Get(parameter);
+
 		case 0xF0: return st->facilities;
 		case 0xFA: return Clamp(st->build_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535);
 	}
@@ -304,7 +307,7 @@
 	res->GetVariable   = AirportGetVariable;
 	res->ResolveReal   = AirportResolveReal;
 
-	res->psa                  = NULL;
+	res->psa                  = st != NULL ? &st->airport.psa : NULL;
 	res->u.airport.st         = st;
 	res->u.airport.airport_id = airport_id;
 	res->u.airport.layout     = layout;
--- a/src/saveload/station_sl.cpp
+++ b/src/saveload/station_sl.cpp
@@ -338,6 +338,7 @@
 	  SLE_CONDVAR(Station, airport.layout,             SLE_UINT8,                 145, SL_MAX_VERSION),
 	      SLE_VAR(Station, airport.flags,              SLE_UINT64),
 	  SLE_CONDVAR(Station, airport.rotation,           SLE_UINT8,                 145, SL_MAX_VERSION),
+	  SLE_CONDARR(Station, airport.psa.storage,        SLE_UINT32, 16,            145, SL_MAX_VERSION),
 
 	      SLE_VAR(Station, indtype,                    SLE_UINT8),
 
--- a/src/station_base.h
+++ b/src/station_base.h
@@ -17,6 +17,7 @@
 #include "newgrf_airport.h"
 #include "cargopacket.h"
 #include "industry_type.h"
+#include "newgrf_storage.h"
 
 typedef Pool<BaseStation, StationID, 32, 64000> StationPool;
 extern StationPool _station_pool;
@@ -47,12 +48,15 @@
 
 /** All airport-related information. Only valid if tile != INVALID_TILE. */
 struct Airport : public TileArea {
+	typedef PersistentStorageArray<int32, 16> PersistentStorage;
+
 	Airport() : TileArea(INVALID_TILE, 0, 0) {}
 
 	uint64 flags;       ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32
 	byte type;          ///< Type of this airport, @see AirportTypes.
 	byte layout;        ///< Airport layout number.
 	Direction rotation; ///< How this airport is rotated.
+	PersistentStorage psa; ///< Persistent storage for NewGRF airports
 
 	/**
 	 * Get the AirportSpec that from the airport type of this airport. If there