station_base.h

Go to the documentation of this file.
00001 /* $Id$ */
00002 
00003 /*
00004  * This file is part of OpenTTD.
00005  * 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.
00006  * 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.
00007  * 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/>.
00008  */
00009 
00012 #ifndef STATION_BASE_H
00013 #define STATION_BASE_H
00014 
00015 #include "base_station_base.h"
00016 #include "airport.h"
00017 #include "cargopacket.h"
00018 #include "cargo_type.h"
00019 #include "industry_type.h"
00020 #include "core/geometry_type.hpp"
00021 #include <list>
00022 
00023 typedef Pool<BaseStation, StationID, 32, 64000> StationPool;
00024 extern StationPool _station_pool;
00025 
00026 static const byte INITIAL_STATION_RATING = 175;
00027 
00028 struct GoodsEntry {
00029   enum AcceptancePickup {
00030     ACCEPTANCE,
00031     PICKUP
00032   };
00033 
00034   GoodsEntry() :
00035     acceptance_pickup(0),
00036     days_since_pickup(255),
00037     rating(INITIAL_STATION_RATING),
00038     last_speed(0),
00039     last_age(255)
00040   {}
00041 
00042   byte acceptance_pickup;
00043   byte days_since_pickup;
00044   byte rating;
00045   byte last_speed;
00046   byte last_age;
00047   StationCargoList cargo; 
00048 };
00049 
00050 
00051 typedef SmallVector<Industry *, 2> IndustryVector;
00052 
00054 struct Station : SpecializedStation<Station, false> {
00055 public:
00056   RoadStop *GetPrimaryRoadStop(RoadStopType type) const
00057   {
00058     return type == ROADSTOP_BUS ? bus_stops : truck_stops;
00059   }
00060 
00061   RoadStop *GetPrimaryRoadStop(const struct RoadVehicle *v) const;
00062 
00063   const AirportFTAClass *Airport() const
00064   {
00065     if (airport_tile == INVALID_TILE) return GetAirport(AT_DUMMY);
00066     return GetAirport(airport_type);
00067   }
00068 
00069   RoadStop *bus_stops;    
00070   TileArea bus_station;   
00071   RoadStop *truck_stops;  
00072   TileArea truck_station; 
00073 
00074   TileIndex airport_tile; 
00075   TileIndex dock_tile;    
00076 
00077   IndustryType indtype;   
00078 
00079   StationHadVehicleOfTypeByte had_vehicle_of_type;
00080 
00081   byte time_since_load;
00082   byte time_since_unload;
00083   byte airport_type;
00084 
00085   uint64 airport_flags;   
00086 
00087   byte last_vehicle_type;
00088   std::list<Vehicle *> loading_vehicles;
00089   GoodsEntry goods[NUM_CARGO];  
00090   uint32 always_accepted;       
00091 
00092   IndustryVector industries_near; 
00093 
00094   Station(TileIndex tile = INVALID_TILE);
00095   ~Station();
00096 
00097   void AddFacility(StationFacility new_facility_bit, TileIndex facil_xy);
00098 
00104   void MarkTilesDirty(bool cargo_change) const;
00105 
00106   void UpdateVirtCoord();
00107 
00108   /* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const;
00109   /* virtual */ uint GetPlatformLength(TileIndex tile) const;
00110   void RecomputeIndustriesNear();
00111   static void RecomputeIndustriesNearForAll();
00112 
00113   uint GetCatchmentRadius() const;
00114   Rect GetCatchmentRect() const;
00115 
00116   /* virtual */ FORCEINLINE bool TileBelongsToRailStation(TileIndex tile) const
00117   {
00118     return IsRailStationTile(tile) && GetStationIndex(tile) == this->index;
00119   }
00120 
00121   /* virtual */ uint32 GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const;
00122 
00123   /* virtual */ void GetTileArea(TileArea *ta, StationType type) const;
00124 };
00125 
00126 #define FOR_ALL_STATIONS(var) FOR_ALL_BASE_STATIONS_OF_TYPE(Station, var)
00127 
00128 #endif /* STATION_BASE_H */

Generated on Wed Dec 30 20:40:06 2009 for OpenTTD by  doxygen 1.5.6