File diff r7376:c436274a8ff0 → r7377:722cd70012ed
src/station.h
Show inline comments
 
@@ -12,12 +12,18 @@
 
#include "tile.h"
 
#include "road.h"
 
#include "newgrf_station.h"
 
#include "cargopacket.h"
 
#include <list>
 

	
 
struct Station;
 
struct RoadStop;
 

	
 
DECLARE_OLD_POOL(Station, Station, 6, 1000)
 
DECLARE_OLD_POOL(RoadStop, RoadStop, 5, 2000)
 

	
 
static const byte INITIAL_STATION_RATING = 175;
 

	
 
struct GoodsEntry {
 
	GoodsEntry() :
 
		acceptance(false),
 
		days_since_pickup(255),
 
@@ -32,54 +38,41 @@ struct GoodsEntry {
 
	byte last_speed;
 
	byte last_age;
 
	CargoList cargo; ///< The cargo packets of cargo waiting in this station
 
};
 

	
 
/** A Stop for a Road Vehicle */
 
struct RoadStop {
 
struct RoadStop : PoolItem<RoadStop, RoadStopID, &_RoadStop_pool> {
 
	/** Types of RoadStops */
 
	enum Type {
 
		BUS,                                ///< A standard stop for buses
 
		TRUCK                               ///< A standard stop for trucks
 
	};
 

	
 
	static const int  cDebugCtorLevel =  3;  ///< Debug level on which Contructor / Destructor messages are printed
 
	static const uint LIMIT           = 16;  ///< The maximum amount of roadstops that are allowed at a single station
 
	static const uint MAX_BAY_COUNT   =  2;  ///< The maximum number of loading bays
 

	
 
	TileIndex        xy;                    ///< Position on the map
 
	RoadStopID       index;                 ///< Global (i.e. pool-wide) index
 
	byte             status;                ///< Current status of the Stop. Like which spot is taken. Access using *Bay and *Busy functions.
 
	byte             num_vehicles;          ///< Number of vehicles currently slotted to this stop
 
	struct RoadStop  *next;                 ///< Next stop of the given type at this station
 

	
 
	RoadStop(TileIndex tile);
 
	~RoadStop();
 

	
 
	void PreInit() { this->xy = INVALID_TILE; }
 
	void QuickFree() {}
 

	
 
	void *operator new (size_t size);
 
	void operator delete(void *rs);
 

	
 
	/* For loading games */
 
	void *operator new (size_t size, int index);
 
	void operator delete(void *rs, int index);
 
	RoadStop(TileIndex tile = 0);
 
	virtual ~RoadStop();
 

	
 
	bool IsValid() const;
 

	
 
	/* For accessing status */
 
	bool HasFreeBay() const;
 
	bool IsFreeBay(uint nr) const;
 
	uint AllocateBay();
 
	void AllocateDriveThroughBay(uint nr);
 
	void FreeBay(uint nr);
 
	bool IsEntranceBusy() const;
 
	void SetEntranceBusy(bool busy);
 
protected:
 
	static RoadStop *AllocateRaw();
 
};
 

	
 
struct StationSpecList {
 
	const StationSpec *spec;
 
	uint32 grfid;      ///< GRF ID of this custom station
 
	uint8  localidx;   ///< Station ID within GRF of station
 
@@ -105,13 +98,13 @@ struct StationRect : public Rect {
 

	
 
	static bool ScanForStationTiles(StationID st_id, int left_a, int top_a, int right_a, int bottom_a);
 

	
 
	StationRect& operator = (Rect src);
 
};
 

	
 
struct Station {
 
struct Station : PoolItem<Station, StationID, &_Station_pool> {
 
	public:
 
		RoadStop *GetPrimaryRoadStop(RoadStop::Type type) const
 
		{
 
			return type == RoadStop::BUS ? bus_stops : truck_stops;
 
		}
 

	
 
@@ -148,13 +141,12 @@ struct Station {
 
	uint8 num_specs;
 
	StationSpecList *speclist;
 

	
 
	Date build_date;
 

	
 
	uint64 airport_flags;   ///< stores which blocks on the airport are taken. was 16 bit earlier on, then 32
 
	StationID index;
 

	
 
	byte last_vehicle_type;
 
	std::list<Vehicle *> loading_vehicles;
 
	GoodsEntry goods[NUM_CARGO];
 

	
 
	uint16 random_bits;
 
@@ -162,36 +154,24 @@ struct Station {
 

	
 
	StationRect rect; ///< Station spread out rectangle (not saved) maintained by StationRect_xxx() functions
 

	
 
	static const int cDebugCtorLevel = 3;
 

	
 
	Station(TileIndex tile = 0);
 
	~Station();
 

	
 
	void PreInit() {}
 
	void QuickFree();
 
	virtual ~Station();
 

	
 
	/* normal new/delete operators. Used when building/removing station */
 
	void *operator new (size_t size);
 
	void operator delete(void *p);
 

	
 
	/* new/delete operators accepting station index. Used when loading station from savegame. */
 
	void *operator new (size_t size, int st_idx);
 
	void operator delete(void *p, int st_idx);
 
	void QuickFree();
 

	
 
	void AddFacility(byte new_facility_bit, TileIndex facil_xy);
 
	void MarkDirty() const;
 
	void MarkTilesDirty(bool cargo_change) const;
 
	bool TileBelongsToRailStation(TileIndex tile) const;
 
	uint GetPlatformLength(TileIndex tile, DiagDirection dir) const;
 
	uint GetPlatformLength(TileIndex tile) const;
 
	bool IsBuoy() const;
 
	bool IsValid() const;
 

	
 
protected:
 
	static Station *AllocateRaw();
 
};
 

	
 
enum StationType {
 
	STATION_RAIL,
 
	STATION_AIRPORT,
 
	STATION_TRUCK,
 
@@ -235,14 +215,12 @@ void ShowStationViewWindow(StationID sta
 
void UpdateAllStationVirtCoord();
 

	
 
/* sorter stuff */
 
void RebuildStationLists();
 
void ResortStationLists();
 

	
 
DECLARE_OLD_POOL(Station, Station, 6, 1000)
 

	
 
static inline StationID GetMaxStationIndex()
 
{
 
	/* TODO - This isn't the real content of the function, but
 
	 *  with the new pool-system this will be replaced with one that
 
	 *  _really_ returns the highest index. Now it just returns
 
	 *  the next safe value we are sure about everything is below.
 
@@ -263,14 +241,12 @@ static inline bool IsValidStationID(Stat
 
#define FOR_ALL_STATIONS_FROM(st, start) for (st = GetStation(start); st != NULL; st = (st->index + 1U < GetStationPoolSize()) ? GetStation(st->index + 1U) : NULL) if (st->IsValid())
 
#define FOR_ALL_STATIONS(st) FOR_ALL_STATIONS_FROM(st, 0)
 

	
 

	
 
/* Stuff for ROADSTOPS */
 

	
 
DECLARE_OLD_POOL(RoadStop, RoadStop, 5, 2000)
 

	
 
#define FOR_ALL_ROADSTOPS_FROM(rs, start) for (rs = GetRoadStop(start); rs != NULL; rs = (rs->index + 1U < GetRoadStopPoolSize()) ? GetRoadStop(rs->index + 1U) : NULL) if (rs->IsValid())
 
#define FOR_ALL_ROADSTOPS(rs) FOR_ALL_ROADSTOPS_FROM(rs, 0)
 

	
 
/* End of stuff for ROADSTOPS */