diff options
author | alberth <alberth@openttd.org> | 2010-03-07 15:54:58 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2010-03-07 15:54:58 +0000 |
commit | 29b79e03e80f0e57f9af5ec4eeedc6de205f201b (patch) | |
tree | 5b37b2a70727b65ca2d7dd5be9c87c7aa57f01ef /src/vehicle.cpp | |
parent | 58012c6e6bde1dc6d480d928de24773f75957938 (diff) | |
download | openttd-29b79e03e80f0e57f9af5ec4eeedc6de205f201b.tar.xz |
(svn r19365) -Codechange: Move EnsureNoTrainOnTrackProc() to src/vehicle.cpp.
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r-- | src/vehicle.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 05df6ad9f..440f59bf8 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -452,6 +452,31 @@ CommandCost TunnelBridgeIsFree(TileIndex tile, TileIndex endtile, const Vehicle return CommandCost(); } +static Vehicle *EnsureNoTrainOnTrackProc(Vehicle *v, void *data) +{ + TrackBits rail_bits = *(TrackBits *)data; + + if (v->type != VEH_TRAIN) return NULL; + + Train *t = Train::From(v); + if ((t->track != rail_bits) && !TracksOverlap(t->track | rail_bits)) return NULL; + + _error_message = STR_ERROR_TRAIN_IN_THE_WAY + v->type; + return v; +} + +/** + * Tests if a vehicle interacts with the specified track bits. + * All track bits interact except parallel #TRACK_BIT_HORZ or #TRACK_BIT_VERT. + * + * @param tile The tile. + * @param track_bits The track bits. + * @return \c true if no train that interacts, is found. \c false if a train is found. + */ +bool EnsureNoTrainOnTrackBits(TileIndex tile, TrackBits track_bits) +{ + return !HasVehicleOnPos(tile, &track_bits, &EnsureNoTrainOnTrackProc); +} static void UpdateNewVehiclePosHash(Vehicle *v, bool remove) { |