summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/ai/regression/regression.nut1
-rw-r--r--bin/ai/regression/regression.txt1
-rw-r--r--src/ai/api/ai_changelog.hpp1
-rw-r--r--src/ai/api/ai_rail.cpp12
-rw-r--r--src/ai/api/ai_rail.hpp12
-rw-r--r--src/ai/api/ai_rail.hpp.sq1
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");