From 0045096403ed050cf972aef6d146535bbb88f713 Mon Sep 17 00:00:00 2001 From: smatz Date: Tue, 23 Jun 2009 21:44:48 +0000 Subject: (svn r16640) -Codechange: move roadstop stuff to separate files --- src/roadstop.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/roadstop.cpp (limited to 'src/roadstop.cpp') diff --git a/src/roadstop.cpp b/src/roadstop.cpp new file mode 100644 index 000000000..eda4daa94 --- /dev/null +++ b/src/roadstop.cpp @@ -0,0 +1,54 @@ +/* $Id$ */ + +/** @file roadstop.cpp Implementation of the roadstop base class. */ + +#include "stdafx.h" +#include "roadveh.h" +#include "station_map.h" +#include "core/pool_func.hpp" +#include "roadstop_base.h" + +RoadStopPool _roadstop_pool("RoadStop"); +INSTANTIATE_POOL_METHODS(RoadStop) + +/** De-Initializes a RoadStops. This includes clearing all slots that vehicles might + * have and unlinks it from the linked list of road stops at the given station + */ +RoadStop::~RoadStop() +{ + if (CleaningPool()) return; + + /* Clear the slot assignment of all vehicles heading for this road stop */ + if (this->num_vehicles != 0) { + RoadVehicle *rv; + FOR_ALL_ROADVEHICLES(rv) { + if (rv->slot == this) ClearSlot(rv); + } + } + assert(this->num_vehicles == 0); +} + +/** + * Get the next road stop accessible by this vehicle. + * @param v the vehicle to get the next road stop for. + * @return the next road stop accessible. + */ +RoadStop *RoadStop::GetNextRoadStop(const RoadVehicle *v) const +{ + for (RoadStop *rs = this->next; rs != NULL; rs = rs->next) { + /* The vehicle cannot go to this roadstop (different roadtype) */ + if ((GetRoadTypes(rs->xy) & v->compatible_roadtypes) == ROADTYPES_NONE) continue; + /* The vehicle is articulated and can therefor not go the a standard road stop */ + if (IsStandardRoadStopTile(rs->xy) && RoadVehHasArticPart(v)) continue; + + /* The vehicle can actually go to this road stop. So, return it! */ + return rs; + } + + return NULL; +} + +void InitializeRoadStops() +{ + _roadstop_pool.CleanPool(); +} -- cgit v1.2.3-54-g00ecf