From b769eb30c43ccbc4e60b8b7df024253ac55d2265 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: Fix: Setting the default railtype to 'first/last available' did not work with NewGRF defined railtypes. --- src/rail.cpp | 15 --------------- src/rail.h | 1 - src/rail_gui.cpp | 17 ++++++++++------- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/rail.cpp b/src/rail.cpp index f3c2c3dcc..63afa379e 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -208,21 +208,6 @@ bool ValParamRailtype(const RailType rail) return rail < RAILTYPE_END && HasRailtypeAvail(_current_company, rail); } -/** - * Returns the "best" railtype a company can build. - * As the AI doesn't know what the BEST one is, we have our own priority list - * here. When adding new railtypes, modify this function - * @param company the company "in action" - * @return The "best" railtype a company has available - */ -RailType GetBestRailtype(const CompanyID company) -{ - if (HasRailtypeAvail(company, RAILTYPE_MAGLEV)) return RAILTYPE_MAGLEV; - if (HasRailtypeAvail(company, RAILTYPE_MONO)) return RAILTYPE_MONO; - if (HasRailtypeAvail(company, RAILTYPE_ELECTRIC)) return RAILTYPE_ELECTRIC; - return RAILTYPE_RAIL; -} - /** * Add the rail types that are to be introduced at the given date. * @param current The currently available railtypes. diff --git a/src/rail.h b/src/rail.h index ff073cfc2..d9121d545 100644 --- a/src/rail.h +++ b/src/rail.h @@ -452,7 +452,6 @@ bool ValParamRailtype(const RailType rail); RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date); -RailType GetBestRailtype(const CompanyID company); RailTypes GetCompanyRailtypes(CompanyID company, bool introduces = true); RailTypes GetRailTypes(bool introduces); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7917268a1..c0a3f4457 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1927,17 +1927,20 @@ static void SetDefaultRailGui() /* No rail, just get the first available one */ FALLTHROUGH; } - case 0: + case 0: { /* Use first available type */ - rt = RAILTYPE_BEGIN; - while (rt < RAILTYPE_END && !HasRailtypeAvail(_local_company, rt)) rt++; + std::vector::const_iterator it = std::find_if(_sorted_railtypes.begin(), _sorted_railtypes.end(), + [](RailType r){ return HasRailtypeAvail(_local_company, r); }); + rt = it != _sorted_railtypes.end() ? *it : RAILTYPE_BEGIN; break; - - case 1: + } + case 1: { /* Use last available type */ - rt = GetBestRailtype(_local_company); + std::vector::const_reverse_iterator it = std::find_if(_sorted_railtypes.rbegin(), _sorted_railtypes.rend(), + [](RailType r){ return HasRailtypeAvail(_local_company, r); }); + rt = it != _sorted_railtypes.rend() ? *it : RAILTYPE_BEGIN; break; - + } default: NOT_REACHED(); } -- cgit v1.2.3-54-g00ecf