diff options
author | smatz <smatz@openttd.org> | 2007-12-14 23:21:20 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2007-12-14 23:21:20 +0000 |
commit | 4b7f8f04a300c99fb82280851651ffdae4706d61 (patch) | |
tree | cdc3bd7ad1c9ab34d178db2060a5dc0f89fbe4e2 /src/vehicle.cpp | |
parent | dedb15786c1caac8f57a3dc48d1c56b2dec0c92e (diff) | |
download | openttd-4b7f8f04a300c99fb82280851651ffdae4706d61.tar.xz |
(svn r11633) -Codechange: merge CheckTunnelEmpty and IsVehicleOnBridge into GetVehicleTunnelBridge
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r-- | src/vehicle.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 7f4e16d98..693b2e269 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -175,6 +175,41 @@ Vehicle *FindVehicleBetween(TileIndex from, TileIndex to, byte z, bool without_c } +/** Struct used for GetVehicleTunnelBridge() */ +struct TunnelBridgeInfo { + TileIndex tile; ///< tile +}; + +/** Procedure called for every vehicle found in tunnel/bridge in the hash map */ +static void *GetVehicleTunnelBridgeProc(Vehicle *v, void *data) +{ + TunnelBridgeInfo *tbi = (TunnelBridgeInfo*)data; + + if (v->tile != tbi->tile || (v->type != VEH_TRAIN && v->type != VEH_ROAD)) return NULL; + + _error_message = VehicleInTheWayErrMsg(v); + return v; +} + +/** + * Finds vehicle in tunnel / bridge + * @param tile first end + * @param endtile second end + * @return pointer to vehicle found + */ +Vehicle *GetVehicleTunnelBridge(TileIndex tile, TileIndex endtile) +{ + TunnelBridgeInfo tbi = {tile}; + + Vehicle *v = (Vehicle*)VehicleFromPos(tile, &tbi, &GetVehicleTunnelBridgeProc); + if (v != NULL) return v; + + tbi.tile = endtile; + + return (Vehicle*)VehicleFromPos(endtile, &tbi, &GetVehicleTunnelBridgeProc); +} + + static void UpdateVehiclePosHash(Vehicle* v, int x, int y); void VehiclePositionChanged(Vehicle *v) |