changeset 16928:32a83472793d draft

(svn r21663) -Add: [NoAI]: AIRail::GetName() to get the name of a railtype
author yexo <yexo@openttd.org>
date Wed, 29 Dec 2010 23:20:12 +0000
parents 2c02697644fd
children 9345826dd1fd
files bin/ai/regression/regression.nut bin/ai/regression/regression.txt src/ai/api/ai_changelog.hpp src/ai/api/ai_rail.cpp src/ai/api/ai_rail.hpp src/ai/api/ai_rail.hpp.sq
diffstat 6 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/bin/ai/regression/regression.nut
+++ b/bin/ai/regression/regression.nut
@@ -1028,6 +1028,7 @@
 	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));
 	}
--- a/bin/ai/regression/regression.txt
+++ b/bin/ai/regression/regression.txt
@@ -7209,6 +7209,7 @@
   Count():             1
   ListDump:
     RailType:                0
+    GetName():               Railway construction
     IsRailTypeAvailable():   true
     GetMaxSpeed():           0
 
--- 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:
--- 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)
 {
--- a/src/ai/api/ai_rail.hpp
+++ b/src/ai/api/ai_rail.hpp
@@ -97,6 +97,18 @@
 	};
 
 	/**
+	 * 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.
--- a/src/ai/api/ai_rail.hpp.sq
+++ b/src/ai/api/ai_rail.hpp.sq
@@ -79,6 +79,7 @@
 	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");