changeset 10757:dcc20859477f draft

(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.
author truebrain <truebrain@openttd.org>
date Thu, 15 Jan 2009 14:37:44 +0000
parents 4198a31a894e
children 2027f714bb47
files bin/ai/library/graph/aystar/library.nut bin/ai/library/pathfinder/rail/library.nut bin/ai/library/pathfinder/road/library.nut bin/ai/library/queue/binary_heap/library.nut bin/ai/library/queue/fibonacci_heap/library.nut bin/ai/library/queue/priority_queue/library.nut bin/ai/regression/regression_info.nut bin/ai/wrightai/info.nut src/ai/ai_info.cpp src/ai/ai_info.hpp src/ai/ai_info_dummy.cpp src/ai/ai_scanner.cpp
diffstat 12 files changed, 31 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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"; }
--- 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"; }
--- 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"; }
--- 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"; }
--- 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"; }
--- 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"; }
--- 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"; }
--- 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"; }
--- a/src/ai/ai_info.cpp
+++ b/src/ai/ai_info.cpp
@@ -42,6 +42,12 @@
 	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 @@
 {
 	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 @@
 	/* 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");
--- a/src/ai/ai_info.hpp
+++ b/src/ai/ai_info.hpp
@@ -35,7 +35,7 @@
 	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 @@
 	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 @@
 	class AIScanner *base;
 	const char *author;
 	const char *name;
+	const char *short_name;
 	const char *description;
 	const char *date;
 	const char *instance_name;
--- a/src/ai/ai_info_dummy.cpp
+++ b/src/ai/ai_info_dummy.cpp
@@ -16,6 +16,7 @@
 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\
--- a/src/ai/ai_scanner.cpp
+++ b/src/ai/ai_scanner.cpp
@@ -308,6 +308,13 @@
 {
 	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 */