(svn r22309) -Fix: Make road vehicles, ships and aircraft skip orders if they are leaving a depot and heading to the same one again; just like trains since r16322.
This commit is contained in:
@@ -266,9 +266,16 @@ static const TileIndexDiffC _ship_leave_depot_offs[] = {
|
||||
{ 0, -1}
|
||||
};
|
||||
|
||||
static void CheckShipLeaveDepot(Ship *v)
|
||||
static bool CheckShipLeaveDepot(Ship *v)
|
||||
{
|
||||
if (!v->IsInDepot()) return;
|
||||
if (!v->IsInDepot()) return false;
|
||||
|
||||
/* We are leaving a depot, but have to go to the exact same one; re-enter */
|
||||
if (v->current_order.IsType(OT_GOTO_DEPOT) &&
|
||||
IsShipDepotTile(v->tile) && GetDepotIndex(v->tile) == v->current_order.GetDestination()) {
|
||||
VehicleEnterDepot(v);
|
||||
return true;
|
||||
}
|
||||
|
||||
TileIndex tile = v->tile;
|
||||
Axis axis = GetShipDepotAxis(tile);
|
||||
@@ -280,7 +287,7 @@ static void CheckShipLeaveDepot(Ship *v)
|
||||
} else if (DiagdirReachesTracks((DiagDirection)(axis + 2)) & GetTileShipTrackStatus(TILE_ADD(tile, -2 * ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
|
||||
v->direction = AxisToDirection(axis);
|
||||
} else {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
v->state = AxisToTrackBits(axis);
|
||||
@@ -294,6 +301,8 @@ static void CheckShipLeaveDepot(Ship *v)
|
||||
VehicleServiceInDepot(v);
|
||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||
SetWindowClassesDirty(WC_SHIPS_LIST);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool ShipAccelerate(Vehicle *v)
|
||||
@@ -446,7 +455,7 @@ static void ShipController(Ship *v)
|
||||
|
||||
if (v->current_order.IsType(OT_LOADING)) return;
|
||||
|
||||
CheckShipLeaveDepot(v);
|
||||
if (CheckShipLeaveDepot(v)) return;
|
||||
|
||||
v->ShowVisualEffect();
|
||||
|
||||
|
Reference in New Issue
Block a user