summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2019-12-18 00:48:03 +0100
committerCharles Pigott <charlespigott@googlemail.com>2019-12-23 17:23:20 +0000
commitb769eb30c43ccbc4e60b8b7df024253ac55d2265 (patch)
treea2d3b30374e475f588d92cc2b00c20833b081eee
parent6fa217dfc8afbd06bbc46462a2b6affc35268b5b (diff)
downloadopenttd-b769eb30c43ccbc4e60b8b7df024253ac55d2265.tar.xz
Fix: Setting the default railtype to 'first/last available' did not work with NewGRF defined railtypes.
-rw-r--r--src/rail.cpp15
-rw-r--r--src/rail.h1
-rw-r--r--src/rail_gui.cpp17
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
@@ -209,21 +209,6 @@ bool ValParamRailtype(const RailType 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.
* @param date The date for the introduction comparisons.
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<RailType>::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<RailType>::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();
}