# HG changeset patch # User Ricardo@FX-8150 # Date 1516922321 0 # Thu Jan 25 23:18:41 2018 +0000 # Branch trunk # Node ID bb9639bf29af9fb142efd08d3ef6f4526f6de620 # Parent 437a5c7b0b81f96fe16ab21e1fd51e37226e1115 11 diff -r 437a5c7b0b81 -r bb9639bf29af src/vehicle.cpp --- a/src/vehicle.cpp Tue Jan 23 18:45:40 2018 +0000 +++ b/src/vehicle.cpp Thu Jan 25 23:18:41 2018 +0000 @@ -153,35 +153,15 @@ } /** - * Check if the vehicle needs to go to a depot in near future (if a opportunity presents itself) for service or replacement. - * - * @see NeedsAutomaticServicing() - * @return true if the vehicle should go to a depot if a opportunity presents itself. + * Test whether there is some pending autoreplace. + * @note We do this after the service-interval test. + * There are a lot more reasons for autoreplace to fail than we can test here reasonably. + * @see NeedsServicing() + * @return true if there is a pending autoreplace */ -bool Vehicle::NeedsServicing() const +bool Vehicle::HasPendingReplace() const { - /* Stopped or crashed vehicles will not move, as such making unmovable - * vehicles to go for service is lame. */ - if (this->vehstatus & (VS_STOPPED | VS_CRASHED)) return false; - - /* Are we ready for the next service cycle? */ const Company *c = Company::Get(this->owner); - if (this->ServiceIntervalIsPercent() ? - (this->reliability >= this->GetEngine()->reliability * (100 - this->GetServiceInterval()) / 100) : - (this->date_of_last_service + this->GetServiceInterval() >= _date)) { - return false; - } - - /* If we're servicing anyway, because we have not disabled servicing when - * there are no breakdowns or we are playing with breakdowns, bail out. */ - if (!_settings_game.order.no_servicing_if_no_breakdowns || - _settings_game.difficulty.vehicle_breakdowns != 0) { - return true; - } - - /* Test whether there is some pending autoreplace. - * Note: We do this after the service-interval test. - * There are a lot more reasons for autoreplace to fail than we can test here reasonably. */ bool pending_replace = false; Money needed_money = c->settings.engine_renew_money; if (needed_money > c->money) return false; @@ -222,6 +202,36 @@ } /** + * Check if the vehicle needs to go to a depot in near future (if a opportunity presents itself) for service or replacement. + * + * @see NeedsAutomaticServicing() + * @return true if the vehicle should go to a depot if a opportunity presents itself. + */ +bool Vehicle::NeedsServicing() const +{ + /* Stopped or crashed vehicles will not move, as such making unmovable + * vehicles to go for service is lame. */ + if (this->vehstatus & (VS_STOPPED | VS_CRASHED)) return false; + + /* Are we ready for the next service cycle? */ + const Company *c = Company::Get(this->owner); + if (this->ServiceIntervalIsPercent() ? + (this->reliability >= this->GetEngine()->reliability * (100 - this->GetServiceInterval()) / 100) : + (this->date_of_last_service + this->GetServiceInterval() >= _date)) { + return false; + } + + /* If we're servicing anyway, because we have not disabled servicing when + * there are no breakdowns or we are playing with breakdowns, bail out. */ + if (!_settings_game.order.no_servicing_if_no_breakdowns || + _settings_game.difficulty.vehicle_breakdowns != 0) { + return true; + } + + return this->HasPendingReplace(); +} + +/** * Checks if the current order should be interrupted for a service-in-depot order. * @see NeedsServicing() * @return true if the current order should be interrupted. diff -r 437a5c7b0b81 -r bb9639bf29af src/vehicle_base.h --- a/src/vehicle_base.h Tue Jan 23 18:45:40 2018 +0000 +++ b/src/vehicle_base.h Thu Jan 25 23:18:41 2018 +0000 @@ -728,6 +728,8 @@ bool NeedsAutorenewing(const Company *c, bool use_renew_setting = true) const; + bool HasPendingReplace() const; + bool NeedsServicing() const; bool NeedsAutomaticServicing() const;