1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2026-01-17 09:22:42 +01:00

Add: [Scripts] "_typeof" metamethod

This commit is contained in:
glx22
2025-02-17 16:39:14 +01:00
committed by Loïc Guilloux
parent 35e58f68e4
commit d7bd67cda3
6 changed files with 16 additions and 19 deletions

View File

@@ -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");

View File

@@ -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");

View File

@@ -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");