mirror of
https://github.com/OpenTTD/OpenTTD
synced 2026-01-20 19:02:41 +01:00
Add: [Scripts] "_typeof" metamethod
This commit is contained in:
@@ -27,10 +27,7 @@ static bool CheckAPIVersion(const std::string &api_version)
|
||||
return std::ranges::find(AIInfo::ApiVersions, api_version) != std::end(AIInfo::ApiVersions);
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
#undef GetClassName
|
||||
#endif /* _WIN32 */
|
||||
template <> const char *GetClassName<AIInfo, ScriptType::AI>() { return "AIInfo"; }
|
||||
template <> SQInteger PushClassName<AIInfo, ScriptType::AI>(HSQUIRRELVM vm) { sq_pushstring(vm, "AIInfo", -1); return 1; }
|
||||
|
||||
/* static */ void AIInfo::RegisterAPI(Squirrel *engine)
|
||||
{
|
||||
@@ -38,6 +35,7 @@ template <> const char *GetClassName<AIInfo, ScriptType::AI>() { return "AIInfo"
|
||||
DefSQClass<AIInfo, ScriptType::AI> SQAIInfo("AIInfo");
|
||||
SQAIInfo.PreRegister(engine);
|
||||
SQAIInfo.AddConstructor<void (AIInfo::*)(), 1>(engine, "x");
|
||||
SQAIInfo.DefSQAdvancedStaticMethod(engine, &PushClassName<AIInfo, ScriptType::AI>, "_typeof");
|
||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddSetting, "AddSetting");
|
||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddLabels, "AddLabels");
|
||||
SQAIInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
||||
|
||||
@@ -25,10 +25,7 @@ static bool CheckAPIVersion(const std::string &api_version)
|
||||
return std::ranges::find(GameInfo::ApiVersions, api_version) != std::end(GameInfo::ApiVersions);
|
||||
}
|
||||
|
||||
#if defined(_WIN32)
|
||||
#undef GetClassName
|
||||
#endif /* _WIN32 */
|
||||
template <> const char *GetClassName<GameInfo, ScriptType::GS>() { return "GSInfo"; }
|
||||
template <> SQInteger PushClassName<GameInfo, ScriptType::GS>(HSQUIRRELVM vm) { sq_pushstring(vm, "GSInfo", -1); return 1; }
|
||||
|
||||
/* static */ void GameInfo::RegisterAPI(Squirrel *engine)
|
||||
{
|
||||
@@ -36,6 +33,7 @@ template <> const char *GetClassName<GameInfo, ScriptType::GS>() { return "GSInf
|
||||
DefSQClass<GameInfo, ScriptType::GS> SQGSInfo("GSInfo");
|
||||
SQGSInfo.PreRegister(engine);
|
||||
SQGSInfo.AddConstructor<void (GameInfo::*)(), 1>(engine, "x");
|
||||
SQGSInfo.DefSQAdvancedStaticMethod(engine, &PushClassName<GameInfo, ScriptType::GS>, "_typeof");
|
||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddSetting, "AddSetting");
|
||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddLabels, "AddLabels");
|
||||
SQGSInfo.DefSQConst(engine, SCRIPTCONFIG_NONE, "CONFIG_NONE");
|
||||
|
||||
@@ -7,13 +7,15 @@
|
||||
|
||||
#include "../script_controller.hpp"
|
||||
|
||||
template <> const char *GetClassName<ScriptController, ScriptType::AI>() { return "AIController"; }
|
||||
template <> SQInteger PushClassName<ScriptController, ScriptType::AI>(HSQUIRRELVM vm) { sq_pushstring(vm, "AIController", -1); return 1; }
|
||||
|
||||
void SQAIController_Register(Squirrel *engine)
|
||||
{
|
||||
DefSQClass<ScriptController, ScriptType::AI> SQAIController("AIController");
|
||||
SQAIController.PreRegister(engine);
|
||||
|
||||
SQAIController.DefSQAdvancedStaticMethod(engine, &PushClassName<ScriptController, ScriptType::AI>, "_typeof");
|
||||
|
||||
SQAIController.DefSQStaticMethod(engine, &ScriptController::GetTick, "GetTick", 1, ".");
|
||||
SQAIController.DefSQStaticMethod(engine, &ScriptController::GetOpsTillSuspend, "GetOpsTillSuspend", 1, ".");
|
||||
SQAIController.DefSQStaticMethod(engine, &ScriptController::SetCommandDelay, "SetCommandDelay", 2, ".i");
|
||||
|
||||
@@ -7,13 +7,15 @@
|
||||
|
||||
#include "../script_controller.hpp"
|
||||
|
||||
template <> const char *GetClassName<ScriptController, ScriptType::GS>() { return "GSController"; }
|
||||
template <> SQInteger PushClassName<ScriptController, ScriptType::GS>(HSQUIRRELVM vm) { sq_pushstring(vm, "GSController", -1); return 1; }
|
||||
|
||||
void SQGSController_Register(Squirrel *engine)
|
||||
{
|
||||
DefSQClass<ScriptController, ScriptType::GS> SQGSController("GSController");
|
||||
SQGSController.PreRegister(engine);
|
||||
|
||||
SQGSController.DefSQAdvancedStaticMethod(engine, &PushClassName<ScriptController, ScriptType::GS>, "_typeof");
|
||||
|
||||
SQGSController.DefSQStaticMethod(engine, &ScriptController::GetTick, "GetTick", 1, ".");
|
||||
SQGSController.DefSQStaticMethod(engine, &ScriptController::GetOpsTillSuspend, "GetOpsTillSuspend", 1, ".");
|
||||
SQGSController.DefSQStaticMethod(engine, &ScriptController::SetCommandDelay, "SetCommandDelay", 2, ".i");
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "../core/convertible_through_base.hpp"
|
||||
#include "squirrel_helper_type.hpp"
|
||||
|
||||
template <class CL, ScriptType ST> const char *GetClassName();
|
||||
template <class CL, ScriptType ST> SQInteger PushClassName(HSQUIRRELVM);
|
||||
|
||||
/**
|
||||
* The Squirrel convert routines
|
||||
@@ -240,8 +240,7 @@ namespace SQConvert {
|
||||
|
||||
/* Protect against calls to a non-static method in a static way */
|
||||
sq_pushroottable(vm);
|
||||
const char *className = GetClassName<Tcls, Ttype>();
|
||||
sq_pushstring(vm, className, -1);
|
||||
PushClassName<Tcls, Ttype>(vm);
|
||||
sq_get(vm, -2);
|
||||
sq_pushobject(vm, instance);
|
||||
if (sq_instanceof(vm) != SQTrue) return sq_throwerror(vm, "class method is non-static");
|
||||
@@ -284,8 +283,7 @@ namespace SQConvert {
|
||||
|
||||
/* Protect against calls to a non-static method in a static way */
|
||||
sq_pushroottable(vm);
|
||||
const char *className = GetClassName<Tcls, Ttype>();
|
||||
sq_pushstring(vm, className, -1);
|
||||
PushClassName<Tcls, Ttype>(vm);
|
||||
sq_get(vm, -2);
|
||||
sq_pushobject(vm, instance);
|
||||
if (sq_instanceof(vm) != SQTrue) return sq_throwerror(vm, "class method is non-static");
|
||||
|
||||
Reference in New Issue
Block a user