src/ai/api/ai_tunnel.cpp
branchnoai
changeset 10977 6c1a6657c7db
parent 10691 a60393d87c0b
child 11102 aacdde10b4ad
--- a/src/ai/api/ai_tunnel.cpp	Sun Jun 15 23:35:40 2008 +0000
+++ b/src/ai/api/ai_tunnel.cpp	Mon Jun 16 00:07:49 2008 +0000
@@ -42,7 +42,18 @@
 		type |= RAILTYPES_RAIL;
 	}
 
-	return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL);
+	if (!AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL)) return false;
+	if (vehicle_type == AIVehicle::VEHICLE_RAIL) return true;
+
+	/* Build 2 road-pieces at both ends of the tunnel */
+	TileIndex end = AIObject::GetNewTunnelEndtile();
+	DiagDirection dir_1 = (DiagDirection)((::TileX(start) == ::TileX(end)) ? (::TileY(start) < ::TileY(end) ? DIAGDIR_NW : DIAGDIR_SE) : (::TileX(start) < ::TileX(end) ? DIAGDIR_NE : DIAGDIR_SW));
+	DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
+
+	AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD);
+	AIObject::DoCommand(end + ::TileOffsByDiagDir(dir_2), ::DiagDirToRoadBits(dir_1) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD);
+
+	return true;
 }
 
 /* static */ bool AITunnel::RemoveTunnel(TileIndex tile)