Fix trains with non-front parts needing repair not being serviced

pull/338/head
Jonathan G Rennison 3 years ago
parent 4db14ccd18
commit 5723c317f7

@ -191,6 +191,8 @@ struct Train FINAL : public GroundVehicle<Train, VEH_TRAIN> {
int advisory_max_speed;
};
bool ConsistNeedsRepair() const;
private:
MaxSpeedInfo GetCurrentMaxSpeedInfoInternal(bool update_state) const;

@ -1201,6 +1201,16 @@ void Train::UpdateAcceleration()
}
}
bool Train::ConsistNeedsRepair() const
{
if (!HasBit(this->flags, VRF_CONSIST_BREAKDOWN)) return false;
for (const Train *u = this; u != nullptr; u = u->Next()) {
if (HasBit(u->flags, VRF_NEED_REPAIR)) return true;
}
return false;
}
/**
* Get the width of a train vehicle image in the GUI.
* @param offset Additional offset for positioning the sprite; set to nullptr if not needed

@ -232,7 +232,7 @@ bool Vehicle::NeedsServicing() const
if ((this->ServiceIntervalIsPercent() ?
(this->reliability >= this->GetEngine()->reliability * (100 - this->service_interval) / 100) :
(this->date_of_last_service + this->service_interval >= _date))
&& !(this->type == VEH_TRAIN && HasBit(Train::From(this)->flags, VRF_NEED_REPAIR))
&& !(this->type == VEH_TRAIN && HasBit(Train::From(this)->flags, VRF_CONSIST_BREAKDOWN) && Train::From(this)->ConsistNeedsRepair())
&& !(this->type == VEH_ROAD && RoadVehicle::From(this)->critical_breakdown_count > 0)
&& !(this->type == VEH_SHIP && Ship::From(this)->critical_breakdown_count > 0)) {
return false;

Loading…
Cancel
Save