mirror of https://github.com/OpenTTD/OpenTTD
(svn r15091) -Add [NoAI] [API CHANGE]: introduce GetCategory() as a requirement for every library.nut, to indicate in which category it belongs. Currently the directory indicates the category, but this doesn't allow planned future additions
parent
d62a85f2ce
commit
103cd2a5ed
|
@ -8,6 +8,7 @@ class AyStar extends AILibrary {
|
||||||
function GetVersion() { return 4; }
|
function GetVersion() { return 4; }
|
||||||
function GetDate() { return "2008-06-11"; }
|
function GetDate() { return "2008-06-11"; }
|
||||||
function CreateInstance() { return "AyStar"; }
|
function CreateInstance() { return "AyStar"; }
|
||||||
|
function GetCategory() { return "Graph"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(AyStar());
|
RegisterLibrary(AyStar());
|
||||||
|
|
|
@ -8,6 +8,7 @@ class Rail extends AILibrary {
|
||||||
function GetVersion() { return 1; }
|
function GetVersion() { return 1; }
|
||||||
function GetDate() { return "2008-09-22"; }
|
function GetDate() { return "2008-09-22"; }
|
||||||
function CreateInstance() { return "Rail"; }
|
function CreateInstance() { return "Rail"; }
|
||||||
|
function GetCategory() { return "Pathfinder"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(Rail());
|
RegisterLibrary(Rail());
|
||||||
|
|
|
@ -8,6 +8,7 @@ class Road extends AILibrary {
|
||||||
function GetVersion() { return 3; }
|
function GetVersion() { return 3; }
|
||||||
function GetDate() { return "2008-06-18"; }
|
function GetDate() { return "2008-06-18"; }
|
||||||
function CreateInstance() { return "Road"; }
|
function CreateInstance() { return "Road"; }
|
||||||
|
function GetCategory() { return "Pathfinder"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(Road());
|
RegisterLibrary(Road());
|
||||||
|
|
|
@ -8,6 +8,7 @@ class BinaryHeap extends AILibrary {
|
||||||
function GetVersion() { return 1; }
|
function GetVersion() { return 1; }
|
||||||
function GetDate() { return "2008-06-10"; }
|
function GetDate() { return "2008-06-10"; }
|
||||||
function CreateInstance() { return "BinaryHeap"; }
|
function CreateInstance() { return "BinaryHeap"; }
|
||||||
|
function GetCategory() { return "Queue"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(BinaryHeap());
|
RegisterLibrary(BinaryHeap());
|
||||||
|
|
|
@ -8,6 +8,7 @@ class FibonacciHeap extends AILibrary {
|
||||||
function GetVersion() { return 1; }
|
function GetVersion() { return 1; }
|
||||||
function GetDate() { return "2008-08-22"; }
|
function GetDate() { return "2008-08-22"; }
|
||||||
function CreateInstance() { return "FibonacciHeap"; }
|
function CreateInstance() { return "FibonacciHeap"; }
|
||||||
|
function GetCategory() { return "Queue"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(FibonacciHeap());
|
RegisterLibrary(FibonacciHeap());
|
||||||
|
|
|
@ -8,6 +8,7 @@ class PriorityQueue extends AILibrary {
|
||||||
function GetVersion() { return 2; }
|
function GetVersion() { return 2; }
|
||||||
function GetDate() { return "2008-06-10"; }
|
function GetDate() { return "2008-06-10"; }
|
||||||
function CreateInstance() { return "PriorityQueue"; }
|
function CreateInstance() { return "PriorityQueue"; }
|
||||||
|
function GetCategory() { return "Queue"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterLibrary(PriorityQueue());
|
RegisterLibrary(PriorityQueue());
|
||||||
|
|
|
@ -118,7 +118,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ SQInteger AIFileInfo::Constructor(HSQUIRRELVM vm, AIFileInfo *info)
|
/* static */ SQInteger AIFileInfo::Constructor(HSQUIRRELVM vm, AIFileInfo *info, bool library)
|
||||||
{
|
{
|
||||||
SQInteger res = 0;
|
SQInteger res = 0;
|
||||||
|
|
||||||
|
@ -138,6 +138,9 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
|
||||||
info->CheckMethods(&res, "GetVersion");
|
info->CheckMethods(&res, "GetVersion");
|
||||||
info->CheckMethods(&res, "GetDate");
|
info->CheckMethods(&res, "GetDate");
|
||||||
info->CheckMethods(&res, "CreateInstance");
|
info->CheckMethods(&res, "CreateInstance");
|
||||||
|
if (library) {
|
||||||
|
info->CheckMethods(&res, "GetCategory");
|
||||||
|
}
|
||||||
|
|
||||||
/* Abort if one method was missing */
|
/* Abort if one method was missing */
|
||||||
if (res != 0) return res;
|
if (res != 0) return res;
|
||||||
|
@ -155,7 +158,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
|
||||||
sq_getinstanceup(vm, 2, &instance, 0);
|
sq_getinstanceup(vm, 2, &instance, 0);
|
||||||
AIInfo *info = (AIInfo *)instance;
|
AIInfo *info = (AIInfo *)instance;
|
||||||
|
|
||||||
SQInteger res = AIFileInfo::Constructor(vm, info);
|
SQInteger res = AIFileInfo::Constructor(vm, info, false);
|
||||||
if (res != 0) return res;
|
if (res != 0) return res;
|
||||||
|
|
||||||
AIConfigItem config;
|
AIConfigItem config;
|
||||||
|
@ -191,7 +194,7 @@ void AIFileInfo::CheckMethods(SQInteger *res, const char *name)
|
||||||
sq_getinstanceup(vm, 2, &instance, 0);
|
sq_getinstanceup(vm, 2, &instance, 0);
|
||||||
AIInfo *info = (AIInfo *)instance;
|
AIInfo *info = (AIInfo *)instance;
|
||||||
|
|
||||||
SQInteger res = AIFileInfo::Constructor(vm, info);
|
SQInteger res = AIFileInfo::Constructor(vm, info, false);
|
||||||
if (res != 0) return res;
|
if (res != 0) return res;
|
||||||
|
|
||||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||||
|
@ -356,7 +359,7 @@ int AIInfo::GetSettingDefaultValue(const char *name)
|
||||||
/* Create a new AIFileInfo */
|
/* Create a new AIFileInfo */
|
||||||
AILibrary *library = new AILibrary();
|
AILibrary *library = new AILibrary();
|
||||||
|
|
||||||
SQInteger res = AIFileInfo::Constructor(vm, library);
|
SQInteger res = AIFileInfo::Constructor(vm, library, true);
|
||||||
if (res != 0) return res;
|
if (res != 0) return res;
|
||||||
|
|
||||||
/* Register the Library to the base system */
|
/* Register the Library to the base system */
|
||||||
|
@ -365,6 +368,12 @@ int AIInfo::GetSettingDefaultValue(const char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *AILibrary::GetCategory()
|
||||||
|
{
|
||||||
|
if (this->category == NULL) this->category = this->engine->CallStringMethodStrdup(*this->SQ_instance, "GetCategory");
|
||||||
|
return this->category;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ SQInteger AILibrary::Import(HSQUIRRELVM vm)
|
/* static */ SQInteger AILibrary::Import(HSQUIRRELVM vm)
|
||||||
{
|
{
|
||||||
SQConvert::SQAutoFreePointers ptr;
|
SQConvert::SQAutoFreePointers ptr;
|
||||||
|
|
|
@ -101,7 +101,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Process the creation of a FileInfo object.
|
* Process the creation of a FileInfo object.
|
||||||
*/
|
*/
|
||||||
static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info);
|
static SQInteger Constructor(HSQUIRRELVM vm, AIFileInfo *info, bool library);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Squirrel *engine;
|
class Squirrel *engine;
|
||||||
|
@ -155,12 +155,22 @@ private:
|
||||||
|
|
||||||
class AILibrary : public AIFileInfo {
|
class AILibrary : public AIFileInfo {
|
||||||
public:
|
public:
|
||||||
|
AILibrary() : AIFileInfo(), category(NULL) {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an AI, using this AIInfo as start-template.
|
* Create an AI, using this AIInfo as start-template.
|
||||||
*/
|
*/
|
||||||
static SQInteger Constructor(HSQUIRRELVM vm);
|
static SQInteger Constructor(HSQUIRRELVM vm);
|
||||||
|
|
||||||
static SQInteger Import(HSQUIRRELVM vm);
|
static SQInteger Import(HSQUIRRELVM vm);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the category this library is in.
|
||||||
|
*/
|
||||||
|
const char *GetCategory();
|
||||||
|
|
||||||
|
private:
|
||||||
|
const char *category;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AI_INFO */
|
#endif /* AI_INFO */
|
||||||
|
|
Loading…
Reference in New Issue