diff options
author | smatz <smatz@openttd.org> | 2009-06-23 21:44:48 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2009-06-23 21:44:48 +0000 |
commit | 0045096403ed050cf972aef6d146535bbb88f713 (patch) | |
tree | c2d5afb33a93771903898ca7192ded5d3d40c731 /src/roadstop.cpp | |
parent | 8bb88e5f7236738f2101b96a3d23a4252464a615 (diff) | |
download | openttd-0045096403ed050cf972aef6d146535bbb88f713.tar.xz |
(svn r16640) -Codechange: move roadstop stuff to separate files
Diffstat (limited to 'src/roadstop.cpp')
-rw-r--r-- | src/roadstop.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
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(); +} |