(svn r16859) -Codechange: split the Station struct into two so parts of it can be reused for Waypoints.

This commit is contained in:
rubidium
2009-07-17 19:44:13 +00:00
parent ad74419fb7
commit 46d94fdfed
6 changed files with 118 additions and 61 deletions

View File

@@ -77,10 +77,53 @@ struct StationRect : public Rect {
StationRect& operator = (Rect src);
};
/** Base class for all station-ish types */
struct BaseStation {
char *name; ///< Custom name
StringID string_id; ///< Default name (town area) of station
Town *town; ///< The town this station is associated with
OwnerByte owner; ///< The owner of this station
StationFacilityByte facilities; ///< The facilities that this station has
uint8 num_specs; ///< NOSAVE: Number of specs in the speclist
StationSpecList *speclist; ///< NOSAVE: List of station specs of this station
Date build_date; ///< Date of construction
uint16 random_bits; ///< Random bits assigned to this station
byte waiting_triggers; ///< Waiting triggers (NewGRF) for this station
uint8 cached_anim_triggers; ///< NOSAVE: Combined animation trigger bitmask, used to determine if trigger processing should happen.
/**
* Check whether a specific tile belongs to this station.
* @param tile the tile to check
* @return true if the tile belongs to this station
*/
virtual bool TileBelongsToRailStation(TileIndex tile) const = 0;
/**
* Helper function to get a NewGRF variable that isn't implemented by the base class.
* @param object the resolver object related to this query
* @param variable that is queried
* @param parameter parameter for that variable
* @param available will return false if ever the variable asked for does not exist
* @return the value stored in the corresponding variable
*/
virtual uint32 GetNewGRFVariable(const struct ResolverObject *object, byte variable, byte parameter, bool *available) const = 0;
/**
* Get the base station belonging to a specific tile.
* @param tile The tile to get the base station from.
* @return the station associated with that tile.
*/
static BaseStation *GetByTile(TileIndex tile);
};
typedef SmallVector<Industry *, 2> IndustryVector;
/** Station data structure */
struct Station : StationPool::PoolItem<&_station_pool> {
struct Station : StationPool::PoolItem<&_station_pool>, BaseStation {
public:
RoadStop *GetPrimaryRoadStop(RoadStopType type) const
{
@@ -101,12 +144,8 @@ public:
TileIndex train_tile;
TileIndex airport_tile;
TileIndex dock_tile;
Town *town;
/* Place to get a name from, in order of importance: */
char *name; ///< Custom name
IndustryType indtype; ///< Industry type to get the name from
StringID string_id; ///< Default name (town area) of station
ViewportSign sign;
@@ -115,19 +154,11 @@ public:
byte time_since_load;
byte time_since_unload;
byte delete_ctr;
OwnerByte owner;
StationFacilityByte facilities;
byte airport_type;
/* trainstation width/height */
byte trainst_w, trainst_h;
/** List of custom stations (StationSpecs) allocated to the station */
uint8 num_specs;
StationSpecList *speclist;
Date build_date; ///< Date of construction
uint64 airport_flags; ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32
byte last_vehicle_type;
@@ -136,10 +167,6 @@ public:
IndustryVector industries_near; ///< Cached list of industries near the station that can accept cargo, @see DeliverGoodsToIndustry()
uint16 random_bits;
byte waiting_triggers;
uint8 cached_anim_triggers; ///< Combined animation trigger bitmask, used to determine if trigger processing should happen.
StationRect rect; ///< Station spread out rectangle (not saved) maintained by StationRect_xxx() functions
Station(TileIndex tile = INVALID_TILE);
@@ -163,11 +190,13 @@ public:
uint GetCatchmentRadius() const;
FORCEINLINE bool TileBelongsToRailStation(TileIndex tile) const
/* virtual */ FORCEINLINE bool TileBelongsToRailStation(TileIndex tile) const
{
return IsRailwayStationTile(tile) && GetStationIndex(tile) == this->index;
}
/* virtual */ uint32 GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const;
/**
* Determines whether a station is a buoy only.
* @todo Ditch this encoding of buoys
@@ -183,6 +212,16 @@ public:
}
static void PostDestructor(size_t index);
static FORCEINLINE Station *From(BaseStation *st)
{
return (Station *)st;
}
static FORCEINLINE const Station *From(const BaseStation *st)
{
return (const Station *)st;
}
};
#define FOR_ALL_STATIONS_FROM(var, start) FOR_ALL_ITEMS_FROM(Station, station_index, var, start)