From b98887c4a014d5bc193b0c1089b3ac0334187775 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 May 2018 18:02:53 +0100 Subject: [PATCH] Change: Allow only one ship to leave depot at a time. --- src/ship_cmd.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 0ea400b954..080015eacb 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -319,6 +319,14 @@ void Ship::UpdateDeltaXY() this->z_extent = 6; } +/** + * Test-procedure for HasVehicleOnPos to check for a ship. + */ +static Vehicle *EnsureNoVisibleShipProc(Vehicle *v, void *data) +{ + return v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0 ? v : NULL; +} + static bool CheckShipLeaveDepot(Ship *v) { if (!v->IsChainInDepot()) return false; @@ -333,6 +341,10 @@ static bool CheckShipLeaveDepot(Ship *v) /* Don't leave depot if no destination set */ if (v->dest_tile == 0) return true; + /* Don't leave depot if another vehicle is already entering/leaving */ + /* This helps avoid CPU load if many ships are set to start at the same time */ + if (HasVehicleOnPos(v->tile, NULL, &EnsureNoVisibleShipProc)) return true; + TileIndex tile = v->tile; Axis axis = GetShipDepotAxis(tile);