summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortruebrain <truebrain@openttd.org>2009-01-15 14:37:44 +0000
committertruebrain <truebrain@openttd.org>2009-01-15 14:37:44 +0000
commite84138af22abc40d3ebd993eba4103ccf3b2997f (patch)
tree43e5c2a5d42119477518b73b0e303f4b881c8a17
parent97a835f95fb9026da63f0d212d959ec44fd86796 (diff)
downloadopenttd-e84138af22abc40d3ebd993eba4103ccf3b2997f.tar.xz
(svn r15090) -Add [NoAI] [API CHANGE]: info.nut/library.nut now requires a function GetShortName(), which should return a 4 (four) character string, unique throughout the world. This id is simular to a GRFid.
-rw-r--r--bin/ai/library/graph/aystar/library.nut1
-rw-r--r--bin/ai/library/pathfinder/rail/library.nut1
-rw-r--r--bin/ai/library/pathfinder/road/library.nut1
-rw-r--r--bin/ai/library/queue/binary_heap/library.nut1
-rw-r--r--bin/ai/library/queue/fibonacci_heap/library.nut1
-rw-r--r--bin/ai/library/queue/priority_queue/library.nut1
-rw-r--r--bin/ai/regression/regression_info.nut1
-rw-r--r--bin/ai/wrightai/info.nut1
-rw-r--r--src/ai/ai_info.cpp9
-rw-r--r--src/ai/ai_info.hpp8
-rw-r--r--src/ai/ai_info_dummy.cpp1
-rw-r--r--src/ai/ai_scanner.cpp7
12 files changed, 31 insertions, 2 deletions
diff --git a/bin/ai/library/graph/aystar/library.nut b/bin/ai/library/graph/aystar/library.nut
index 522760135..f1c84748c 100644
--- a/bin/ai/library/graph/aystar/library.nut
+++ b/bin/ai/library/graph/aystar/library.nut
@@ -3,6 +3,7 @@
class AyStar extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "AyStar"; }
+ function GetShortName() { return "GRA*"; }
function GetDescription() { return "An implementation of AyStar"; }
function GetVersion() { return 4; }
function GetDate() { return "2008-06-11"; }
diff --git a/bin/ai/library/pathfinder/rail/library.nut b/bin/ai/library/pathfinder/rail/library.nut
index 2d50557e2..155adaad1 100644
--- a/bin/ai/library/pathfinder/rail/library.nut
+++ b/bin/ai/library/pathfinder/rail/library.nut
@@ -3,6 +3,7 @@
class Rail extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Rail"; }
+ function GetShortName() { return "PFRL"; }
function GetDescription() { return "An implementation of a rail pathfinder"; }
function GetVersion() { return 1; }
function GetDate() { return "2008-09-22"; }
diff --git a/bin/ai/library/pathfinder/road/library.nut b/bin/ai/library/pathfinder/road/library.nut
index b3c6f1f54..06c21f1de 100644
--- a/bin/ai/library/pathfinder/road/library.nut
+++ b/bin/ai/library/pathfinder/road/library.nut
@@ -3,6 +3,7 @@
class Road extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Road"; }
+ function GetShortName() { return "PFRO"; }
function GetDescription() { return "An implementation of a road pathfinder"; }
function GetVersion() { return 3; }
function GetDate() { return "2008-06-18"; }
diff --git a/bin/ai/library/queue/binary_heap/library.nut b/bin/ai/library/queue/binary_heap/library.nut
index 3a96617a9..30489cbc2 100644
--- a/bin/ai/library/queue/binary_heap/library.nut
+++ b/bin/ai/library/queue/binary_heap/library.nut
@@ -3,6 +3,7 @@
class BinaryHeap extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Binary Heap"; }
+ function GetShortName() { return "QUBH"; }
function GetDescription() { return "An implementation of a Binary Heap"; }
function GetVersion() { return 1; }
function GetDate() { return "2008-06-10"; }
diff --git a/bin/ai/library/queue/fibonacci_heap/library.nut b/bin/ai/library/queue/fibonacci_heap/library.nut
index 1ea7260e0..244228788 100644
--- a/bin/ai/library/queue/fibonacci_heap/library.nut
+++ b/bin/ai/library/queue/fibonacci_heap/library.nut
@@ -3,6 +3,7 @@
class FibonacciHeap extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Fibonacci Heap"; }
+ function GetShortName() { return "QUFH"; }
function GetDescription() { return "An implementation of a Fibonacci Heap"; }
function GetVersion() { return 1; }
function GetDate() { return "2008-08-22"; }
diff --git a/bin/ai/library/queue/priority_queue/library.nut b/bin/ai/library/queue/priority_queue/library.nut
index a8c615ed1..1c17848bf 100644
--- a/bin/ai/library/queue/priority_queue/library.nut
+++ b/bin/ai/library/queue/priority_queue/library.nut
@@ -3,6 +3,7 @@
class PriorityQueue extends AILibrary {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Priority Queue"; }
+ function GetShortName() { return "QUPQ"; }
function GetDescription() { return "An implementation of a Priority Queue"; }
function GetVersion() { return 2; }
function GetDate() { return "2008-06-10"; }
diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut
index 212f2a50a..5eb8201c7 100644
--- a/bin/ai/regression/regression_info.nut
+++ b/bin/ai/regression/regression_info.nut
@@ -3,6 +3,7 @@
class Regression extends AIInfo {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "Regression"; }
+ function GetShortName() { return "REGR"; }
function GetDescription() { return "This runs regression-tests on all commands. On the same map the result should always be the same."; }
function GetVersion() { return 1; }
function GetDate() { return "2007-03-18"; }
diff --git a/bin/ai/wrightai/info.nut b/bin/ai/wrightai/info.nut
index 3cd7cfa90..7a3feb8c5 100644
--- a/bin/ai/wrightai/info.nut
+++ b/bin/ai/wrightai/info.nut
@@ -3,6 +3,7 @@
class WrightAI extends AIInfo {
function GetAuthor() { return "OpenTTD NoAI Developers Team"; }
function GetName() { return "WrightAI"; }
+ function GetShortName() { return "WRAI"; }
function GetDescription() { return "A simple AI that tries to beat you with only aircrafts"; }
function GetVersion() { return 2; }
function GetDate() { return "2008-02-24"; }
diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp
index b2c653826..a9bf22eae 100644
--- a/src/ai/ai_info.cpp
+++ b/src/ai/ai_info.cpp
@@ -42,6 +42,12 @@ const char *AIFileInfo::GetName()
return this->name;
}
+const char *AIFileInfo::GetShortName()
+{
+ if (this->short_name == NULL) this->short_name = this->engine->CallStringMethodStrdup(*this->SQ_instance, "GetShortName");
+ return this->short_name;
+}
+
const char *AIFileInfo::GetDescription()
{
if (this->description == NULL) this->description = this->engine->CallStringMethodStrdup(*this->SQ_instance, "GetDescription");
@@ -106,7 +112,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
{
if (!this->engine->MethodExists(*this->SQ_instance, name)) {
char error[1024];
- snprintf(error, sizeof(error), "your AIFileInfo doesn't have the method '%s'", name);
+ snprintf(error, sizeof(error), "your info.nut/library.nut doesn't have the method '%s'", name);
this->engine->ThrowError(error);
*res = SQ_ERROR;
}
@@ -127,6 +133,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
/* Check if all needed fields are there */
info->CheckMethods(&res, "GetAuthor");
info->CheckMethods(&res, "GetName");
+ info->CheckMethods(&res, "GetShortName");
info->CheckMethods(&res, "GetDescription");
info->CheckMethods(&res, "GetVersion");
info->CheckMethods(&res, "GetDate");
diff --git a/src/ai/ai_info.hpp b/src/ai/ai_info.hpp
index 71691ae3a..223fbeaf3 100644
--- a/src/ai/ai_info.hpp
+++ b/src/ai/ai_info.hpp
@@ -35,7 +35,7 @@ public:
friend class AIInfo;
friend class AILibrary;
- AIFileInfo() : author(NULL), name(NULL), description(NULL), date(NULL), instance_name(NULL) {};
+ AIFileInfo() : author(NULL), name(NULL), short_name(NULL), description(NULL), date(NULL), instance_name(NULL) {};
~AIFileInfo();
/**
@@ -49,6 +49,11 @@ public:
const char *GetName();
/**
+ * Get the 4 character long short name of the AI.
+ */
+ const char *GetShortName();
+
+ /**
* Get the description of the AI.
*/
const char *GetDescription();
@@ -106,6 +111,7 @@ private:
class AIScanner *base;
const char *author;
const char *name;
+ const char *short_name;
const char *description;
const char *date;
const char *instance_name;
diff --git a/src/ai/ai_info_dummy.cpp b/src/ai/ai_info_dummy.cpp
index a060a0a65..7865c52b7 100644
--- a/src/ai/ai_info_dummy.cpp
+++ b/src/ai/ai_info_dummy.cpp
@@ -16,6 +16,7 @@ const SQChar dummy_script_info[] = _SC("
class DummyAI extends AIInfo { \n\
function GetAuthor() { return \"OpenTTD NoAI Developers Team\"; } \n\
function GetName() { return \"DummyAI\"; } \n\
+ function GetShortName() { return \"DUMM\"; } \n\
function GetDescription() { return \"A Dummy AI that is loaded when your ai/ dir is empty\"; }\n\
function GetVersion() { return 1; } \n\
function GetDate() { return \"2008-07-26\"; } \n\
diff --git a/src/ai/ai_scanner.cpp b/src/ai/ai_scanner.cpp
index 2a389fa9d..46a89511b 100644
--- a/src/ai/ai_scanner.cpp
+++ b/src/ai/ai_scanner.cpp
@@ -308,6 +308,13 @@ void AIScanner::RegisterAI(AIInfo *info)
{
const char *ai_name = info->GetDirName();
+ /* Check if GetShortName follows the rules */
+ if (strlen(info->GetShortName()) != 4) {
+ DEBUG(ai, 0, "The AI '%s' returned a string from GetShortName() which is not four characaters. Unable to load the AI.", info->GetDirName());
+ delete info;
+ return;
+ }
+
/* Check if we register twice; than the first always wins */
if (this->info_list.find(ai_name) != this->info_list.end()) {
/* In case they are not the same dir, give a warning */