1 /* 2 * This file is part of OpenTTD. 3 * 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. 4 * 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. 5 * 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/>. 6 */ 7 8 /** @file station_type.h Types related to stations. */ 9 10 #ifndef STATION_TYPE_H 11 #define STATION_TYPE_H 12 13 #include "core/smallstack_type.hpp" 14 #include "tilearea_type.h" 15 #include <set> 16 17 typedef uint16 StationID; 18 typedef uint16 RoadStopID; 19 20 struct BaseStation; 21 struct Station; 22 struct RoadStop; 23 struct StationSpec; 24 struct Waypoint; 25 26 static const StationID NEW_STATION = 0xFFFE; 27 static const StationID INVALID_STATION = 0xFFFF; 28 29 typedef SmallStack<StationID, StationID, INVALID_STATION, 8, 0xFFFD> StationIDStack; 30 31 /** Station types */ 32 enum StationType { 33 STATION_RAIL, 34 STATION_AIRPORT, 35 STATION_TRUCK, 36 STATION_BUS, 37 STATION_OILRIG, 38 STATION_DOCK, 39 STATION_BUOY, 40 STATION_WAYPOINT, 41 }; 42 43 /** Types of RoadStops */ 44 enum RoadStopType { 45 ROADSTOP_BUS, ///< A standard stop for buses 46 ROADSTOP_TRUCK, ///< A standard stop for trucks 47 }; 48 49 /** The facilities a station might be having */ 50 enum StationFacility : byte { 51 FACIL_NONE = 0, ///< The station has no facilities at all 52 FACIL_TRAIN = 1 << 0, ///< Station with train station 53 FACIL_TRUCK_STOP = 1 << 1, ///< Station with truck stops 54 FACIL_BUS_STOP = 1 << 2, ///< Station with bus stops 55 FACIL_AIRPORT = 1 << 3, ///< Station with an airport 56 FACIL_DOCK = 1 << 4, ///< Station with a dock 57 FACIL_WAYPOINT = 1 << 7, ///< Station is a waypoint 58 }; 59 DECLARE_ENUM_AS_BIT_SET(StationFacility) 60 61 /** The vehicles that may have visited a station */ 62 enum StationHadVehicleOfType : byte { 63 HVOT_NONE = 0, ///< Station has seen no vehicles 64 HVOT_TRAIN = 1 << 1, ///< Station has seen a train 65 HVOT_BUS = 1 << 2, ///< Station has seen a bus 66 HVOT_TRUCK = 1 << 3, ///< Station has seen a truck 67 HVOT_AIRCRAFT = 1 << 4, ///< Station has seen an aircraft 68 HVOT_SHIP = 1 << 5, ///< Station has seen a ship 69 70 HVOT_WAYPOINT = 1 << 6, ///< Station is a waypoint (NewGRF only!) 71 }; 72 DECLARE_ENUM_AS_BIT_SET(StationHadVehicleOfType) 73 74 /** The different catchment areas used */ 75 enum CatchmentArea { 76 CA_NONE = 0, ///< Catchment when the station has no facilities 77 CA_BUS = 3, ///< Catchment for bus stops with "modified catchment" enabled 78 CA_TRUCK = 3, ///< Catchment for truck stops with "modified catchment" enabled 79 CA_TRAIN = 4, ///< Catchment for train stations with "modified catchment" enabled 80 CA_DOCK = 5, ///< Catchment for docks with "modified catchment" enabled 81 82 CA_UNMODIFIED = 4, ///< Catchment for all stations with "modified catchment" disabled 83 84 MAX_CATCHMENT = 10, ///< Maximum catchment for airports with "modified catchment" enabled 85 }; 86 87 static const uint MAX_LENGTH_STATION_NAME_CHARS = 32; ///< The maximum length of a station name in characters including '\0' 88 89 struct StationCompare { 90 bool operator() (const Station *lhs, const Station *rhs) const; 91 }; 92 93 /** List of stations */ 94 typedef std::set<Station *, StationCompare> StationList; 95 96 /** 97 * Structure contains cached list of stations nearby. The list 98 * is created upon first call to GetStations() 99 */ 100 class StationFinder : TileArea { 101 StationList stations; ///< List of stations nearby 102 public: 103 /** 104 * Constructs StationFinder 105 * @param area the area to search from 106 */ StationFinder(const TileArea & area)107 StationFinder(const TileArea &area) : TileArea(area) {} 108 const StationList *GetStations(); 109 }; 110 111 #endif /* STATION_TYPE_H */ 112