diff options
-rw-r--r-- | bin/ai/regression/regression.nut | 1 | ||||
-rw-r--r-- | bin/ai/regression/regression.txt | 1 | ||||
-rw-r--r-- | src/ai/api/ai_changelog.hpp | 1 | ||||
-rw-r--r-- | src/ai/api/ai_rail.cpp | 12 | ||||
-rw-r--r-- | src/ai/api/ai_rail.hpp | 12 | ||||
-rw-r--r-- | src/ai/api/ai_rail.hpp.sq | 1 |
6 files changed, 28 insertions, 0 deletions
diff --git a/bin/ai/regression/regression.nut b/bin/ai/regression/regression.nut index f861b3a80..5494c1b7a 100644 --- a/bin/ai/regression/regression.nut +++ b/bin/ai/regression/regression.nut @@ -1028,6 +1028,7 @@ function Regression::RailTypeList() print(" ListDump:"); for (local i = list.Begin(); !list.IsEnd(); i = list.Next()) { print(" RailType: " + i); + print(" GetName(): " + AIRail.GetName(i)); print(" IsRailTypeAvailable(): " + AIRail.IsRailTypeAvailable(i)); print(" GetMaxSpeed(): " + AIRail.GetMaxSpeed(i)); } diff --git a/bin/ai/regression/regression.txt b/bin/ai/regression/regression.txt index d0583a14f..9877647fc 100644 --- a/bin/ai/regression/regression.txt +++ b/bin/ai/regression/regression.txt @@ -7209,6 +7209,7 @@ ERROR: IsEnd() is invalid as Begin() is never called Count(): 1 ListDump: RailType: 0 + GetName(): Railway construction IsRailTypeAvailable(): true GetMaxSpeed(): 0 diff --git a/src/ai/api/ai_changelog.hpp b/src/ai/api/ai_changelog.hpp index fe3748a32..19e6de8fa 100644 --- a/src/ai/api/ai_changelog.hpp +++ b/src/ai/api/ai_changelog.hpp @@ -25,6 +25,7 @@ * \li AIIndustryType::INDUSTRYTYPE_TOWN * \li AIIndustryType::INDUSTRYTYPE_UNKNOWN * \li AIOrder::IsVoidOrder + * \li AIRail::GetName * \li AITown::IsCity * * API removals: diff --git a/src/ai/api/ai_rail.cpp b/src/ai/api/ai_rail.cpp index 45cc78a3a..4f6c41376 100644 --- a/src/ai/api/ai_rail.cpp +++ b/src/ai/api/ai_rail.cpp @@ -19,6 +19,18 @@ #include "../../newgrf.h" #include "../../newgrf_generic.h" #include "../../newgrf_station.h" +#include "../../strings_func.h" + +/* static */ char *AIRail::GetName(RailType rail_type) +{ + if (!IsRailTypeAvailable(rail_type)) return NULL; + + static const int len = 64; + char *railtype_name = MallocT<char>(len); + + ::GetString(railtype_name, GetRailTypeInfo((::RailType)rail_type)->strings.menu_text, &railtype_name[len - 1]); + return railtype_name; +} /* static */ bool AIRail::IsRailTile(TileIndex tile) { diff --git a/src/ai/api/ai_rail.hpp b/src/ai/api/ai_rail.hpp index 8b858c0ad..688377f8a 100644 --- a/src/ai/api/ai_rail.hpp +++ b/src/ai/api/ai_rail.hpp @@ -97,6 +97,18 @@ public: }; /** + * Get the name of a rail type. + * @param rail_type The rail type to get the name of. + * @pre IsRailTypeAvailable(rail_type). + * @return The name the rail type has. + * @note Since there is no string with only the name of the track, the text which + * is shown in the dropdown where you can chose a track type is returned. This + * means that the name could be something like "Maglev construction" instead + * of just "Maglev". + */ + static char *GetName(RailType rail_type); + + /** * Checks whether the given tile is actually a tile with rail that can be * used to traverse a tile. This excludes rail depots but includes * stations and waypoints. diff --git a/src/ai/api/ai_rail.hpp.sq b/src/ai/api/ai_rail.hpp.sq index 04ddfb1a0..a21bfcfa5 100644 --- a/src/ai/api/ai_rail.hpp.sq +++ b/src/ai/api/ai_rail.hpp.sq @@ -79,6 +79,7 @@ void SQAIRail_Register(Squirrel *engine) AIError::RegisterErrorMapString(AIRail::ERR_NONUNIFORM_STATIONS_DISABLED, "ERR_NONUNIFORM_STATIONS_DISABLED"); AIError::RegisterErrorMapString(AIRail::ERR_RAILTYPE_DISALLOWS_CROSSING, "ERR_RAILTYPE_DISALLOWS_CROSSING"); + SQAIRail.DefSQStaticMethod(engine, &AIRail::GetName, "GetName", 2, ".i"); SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailTile, "IsRailTile", 2, ".i"); SQAIRail.DefSQStaticMethod(engine, &AIRail::IsLevelCrossingTile, "IsLevelCrossingTile", 2, ".i"); SQAIRail.DefSQStaticMethod(engine, &AIRail::IsRailDepotTile, "IsRailDepotTile", 2, ".i"); |