Changeset - r17535:d01e1a26daa5
[Not reviewed]
master
0 3 0
frosch - 14 years ago 2011-04-10 10:47:21
frosch@openttd.org
(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.
3 files changed with 25 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/aircraft_cmd.cpp
Show inline comments
 
@@ -1311,6 +1311,12 @@ static void AircraftEventHandler_InHanga
 
			!v->current_order.IsType(OT_GOTO_DEPOT))
 
		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 (AirportHasBlock(v, &apc->layout[v->pos], apc)) return;
 

	
src/roadveh_cmd.cpp
Show inline comments
 
@@ -941,6 +941,12 @@ static bool RoadVehLeaveDepot(RoadVehicl
 
	int y = TileY(v->tile) * TILE_SIZE + (rdp[RVC_DEPOT_START_FRAME].y & 0xF);
 

	
 
	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;
 

	
 
		VehicleServiceInDepot(v);
src/ship_cmd.cpp
Show inline comments
 
@@ -266,9 +266,16 @@ static const TileIndexDiffC _ship_leave_
 
	{ 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();
 

	
0 comments (0 inline, 0 general)