(svn r20645) -Codechange [FS#4086]: unify the code for checking for breakdown handling as well (Hirundo)

This commit is contained in:
rubidium 2010-08-28 14:14:37 +00:00
parent 702cc96943
commit 2fb18e975c
6 changed files with 17 additions and 34 deletions

View File

@ -1775,14 +1775,7 @@ static bool AircraftEventHandler(Aircraft *v, int loop)
if (v->vehstatus & VS_STOPPED) return true; if (v->vehstatus & VS_STOPPED) return true;
/* aircraft is broken down? */ v->HandleBreakdown();
if (v->breakdown_ctr != 0) {
if (v->breakdown_ctr <= 2) {
v->HandleBreakdown();
} else {
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
}
}
HandleAircraftSmoke(v); HandleAircraftSmoke(v);
ProcessOrders(v); ProcessOrders(v);

View File

@ -1485,14 +1485,7 @@ static bool RoadVehController(RoadVehicle *v)
} }
/* road vehicle has broken down? */ /* road vehicle has broken down? */
if (v->breakdown_ctr != 0) { if (v->HandleBreakdown()) return true;
if (v->breakdown_ctr <= 2) {
v->HandleBreakdown();
return true;
}
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
}
if (v->vehstatus & VS_STOPPED) return true; if (v->vehstatus & VS_STOPPED) return true;
ProcessOrders(v); ProcessOrders(v);

View File

@ -424,13 +424,7 @@ static void ShipController(Ship *v)
v->tick_counter++; v->tick_counter++;
v->current_order_time++; v->current_order_time++;
if (v->breakdown_ctr != 0) { if (v->HandleBreakdown()) return;
if (v->breakdown_ctr <= 2) {
v->HandleBreakdown();
return;
}
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
}
if (v->vehstatus & VS_STOPPED) return; if (v->vehstatus & VS_STOPPED) return;

View File

@ -3716,13 +3716,7 @@ static bool TrainLocoHandler(Train *v, bool mode)
} }
/* train is broken down? */ /* train is broken down? */
if (v->breakdown_ctr != 0) { if (v->HandleBreakdown()) return true;
if (v->breakdown_ctr <= 2) {
v->HandleBreakdown();
return true;
}
if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
}
if (HasBit(v->flags, VRF_REVERSING) && v->cur_speed == 0) { if (HasBit(v->flags, VRF_REVERSING) && v->cur_speed == 0) {
ReverseTrainDirection(v); ReverseTrainDirection(v);

View File

@ -986,13 +986,18 @@ void CheckVehicleBreakdown(Vehicle *v)
} }
} }
void Vehicle::HandleBreakdown() bool Vehicle::HandleBreakdown()
{ {
/* Possible states for Vehicle::breakdown_ctr /* Possible states for Vehicle::breakdown_ctr
* 0 - vehicle is running normally * 0 - vehicle is running normally
* 1 - vehicle is currently broken down * 1 - vehicle is currently broken down
* 2 - vehicle is going to break down now * 2 - vehicle is going to break down now
* >2 - vehicle is counting down to the actual breakdown event */ * >2 - vehicle is counting down to the actual breakdown event */
if (this->breakdown_ctr == 0) return false;
if (this->breakdown_ctr > 2) {
if (!this->current_order.IsType(OT_LOADING)) this->breakdown_ctr--;
return false;
}
if (this->breakdown_ctr != 1) { if (this->breakdown_ctr != 1) {
this->breakdown_ctr = 1; this->breakdown_ctr = 1;
@ -1024,7 +1029,7 @@ void Vehicle::HandleBreakdown()
} }
/* Aircraft breakdowns end only when arriving at the airport */ /* Aircraft breakdowns end only when arriving at the airport */
if (this->type == VEH_AIRCRAFT) return; if (this->type == VEH_AIRCRAFT) return false;
/* For trains this function is called twice per tick, so decrease v->breakdown_delay at half the rate */ /* For trains this function is called twice per tick, so decrease v->breakdown_delay at half the rate */
if ((this->tick_counter & (this->type == VEH_TRAIN ? 3 : 1)) == 0) { if ((this->tick_counter & (this->type == VEH_TRAIN ? 3 : 1)) == 0) {
@ -1034,6 +1039,7 @@ void Vehicle::HandleBreakdown()
SetWindowDirty(WC_VEHICLE_VIEW, this->index); SetWindowDirty(WC_VEHICLE_VIEW, this->index);
} }
} }
return true;
} }
void AgeVehicle(Vehicle *v) void AgeVehicle(Vehicle *v)

View File

@ -523,11 +523,14 @@ public:
this->service_interval = src->service_interval; this->service_interval = src->service_interval;
} }
/** /**
* Handle all of the aspects of a vehicle breakdown. * Handle all of the aspects of a vehicle breakdown
* This includes adding smoke and sounds, and ending the breakdown when appropriate. * This includes adding smoke and sounds, and ending the breakdown when appropriate.
* @return true iff the vehicle is stopped because of a breakdown
* @note This function always returns false for aircraft, since these never stop for breakdowns
*/ */
void HandleBreakdown(); bool HandleBreakdown();
bool NeedsAutorenewing(const Company *c) const; bool NeedsAutorenewing(const Company *c) const;