mirror of https://github.com/OpenTTD/OpenTTD
(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.
parent
d1a50a01b4
commit
5bf90860f8
|
@ -1311,6 +1311,12 @@ static void AircraftEventHandler_InHangar(Aircraft *v, const AirportFTAClass *ap
|
||||||
!v->current_order.IsType(OT_GOTO_DEPOT))
|
!v->current_order.IsType(OT_GOTO_DEPOT))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* We are leaving a hangar, but have to go to the exact same one; re-enter */
|
||||||
|
if (v->current_order.IsType(OT_GOTO_DEPOT) && v->current_order.GetDestination() == v->targetairport) {
|
||||||
|
VehicleEnterDepot(v);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* if the block of the next position is busy, stay put */
|
/* if the block of the next position is busy, stay put */
|
||||||
if (AirportHasBlock(v, &apc->layout[v->pos], apc)) return;
|
if (AirportHasBlock(v, &apc->layout[v->pos], apc)) return;
|
||||||
|
|
||||||
|
|
|
@ -941,6 +941,12 @@ static bool RoadVehLeaveDepot(RoadVehicle *v, bool first)
|
||||||
int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
|
int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
|
/* We are leaving a depot, but have to go to the exact same one; re-enter */
|
||||||
|
if (v->current_order.IsType(OT_GOTO_DEPOT) && v->tile == v->dest_tile) {
|
||||||
|
VehicleEnterDepot(v);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (RoadVehFindCloseTo(v, x, y, v->direction, false) != NULL) return true;
|
if (RoadVehFindCloseTo(v, x, y, v->direction, false) != NULL) return true;
|
||||||
|
|
||||||
VehicleServiceInDepot(v);
|
VehicleServiceInDepot(v);
|
||||||
|
|
|
@ -266,9 +266,16 @@ static const TileIndexDiffC _ship_leave_depot_offs[] = {
|
||||||
{ 0, -1}
|
{ 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;
|
TileIndex tile = v->tile;
|
||||||
Axis axis = GetShipDepotAxis(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])))) {
|
} else if (DiagdirReachesTracks((DiagDirection)(axis + 2)) & GetTileShipTrackStatus(TILE_ADD(tile, -2 * ToTileIndexDiff(_ship_leave_depot_offs[axis])))) {
|
||||||
v->direction = AxisToDirection(axis);
|
v->direction = AxisToDirection(axis);
|
||||||
} else {
|
} else {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
v->state = AxisToTrackBits(axis);
|
v->state = AxisToTrackBits(axis);
|
||||||
|
@ -294,6 +301,8 @@ static void CheckShipLeaveDepot(Ship *v)
|
||||||
VehicleServiceInDepot(v);
|
VehicleServiceInDepot(v);
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
SetWindowClassesDirty(WC_SHIPS_LIST);
|
SetWindowClassesDirty(WC_SHIPS_LIST);
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ShipAccelerate(Vehicle *v)
|
static bool ShipAccelerate(Vehicle *v)
|
||||||
|
@ -446,7 +455,7 @@ static void ShipController(Ship *v)
|
||||||
|
|
||||||
if (v->current_order.IsType(OT_LOADING)) return;
|
if (v->current_order.IsType(OT_LOADING)) return;
|
||||||
|
|
||||||
CheckShipLeaveDepot(v);
|
if (CheckShipLeaveDepot(v)) return;
|
||||||
|
|
||||||
v->ShowVisualEffect();
|
v->ShowVisualEffect();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue