summaryrefslogtreecommitdiff
path: root/src/vehicle.cpp
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2007-12-14 23:21:20 +0000
committersmatz <smatz@openttd.org>2007-12-14 23:21:20 +0000
commitd31506654cd28005f062c003cc36bbfd5ffd8fea (patch)
treecdc3bd7ad1c9ab34d178db2060a5dc0f89fbe4e2 /src/vehicle.cpp
parent6685c7c8e2ccebc0593bcf74d7efd8c601f1e17d (diff)
downloadopenttd-d31506654cd28005f062c003cc36bbfd5ffd8fea.tar.xz
(svn r11633) -Codechange: merge CheckTunnelEmpty and IsVehicleOnBridge into GetVehicleTunnelBridge
Diffstat (limited to 'src/vehicle.cpp')
-rw-r--r--src/vehicle.cpp35
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)