From 5b25e620dd747d35b024d6d244be9fc7002e38b0 Mon Sep 17 00:00:00 2001 From: yexo Date: Wed, 29 Dec 2010 23:20:12 +0000 Subject: [PATCH] (svn r21663) -Add: [NoAI]: AIRail::GetName() to get the name of a railtype --- bin/ai/regression/regression.nut | 1 + bin/ai/regression/regression.txt | 1 + src/ai/api/ai_changelog.hpp | 1 + src/ai/api/ai_rail.cpp | 12 ++++++++++++ src/ai/api/ai_rail.hpp | 12 ++++++++++++ src/ai/api/ai_rail.hpp.sq | 1 + 6 files changed, 28 insertions(+) diff --git a/bin/ai/regression/regression.nut b/bin/ai/regression/regression.nut index f861b3a80e..5494c1b7ac 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 d0583a14fa..9877647fc1 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 fe3748a320..19e6de8fa3 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 45cc78a3ac..4f6c41376a 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(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 8b858c0ad8..688377f8a5 100644 --- a/src/ai/api/ai_rail.hpp +++ b/src/ai/api/ai_rail.hpp @@ -96,6 +96,18 @@ public: BT_WAYPOINT, ///< Build a rail waypoint }; + /** + * 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 diff --git a/src/ai/api/ai_rail.hpp.sq b/src/ai/api/ai_rail.hpp.sq index 04ddfb1a07..a21bfcfa5b 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");