#pragma once #include "squirrel/SquirrelEx.h" #include "Global/Global_Game.h" #include "EngineFrame/Base/Actor.h" static SQRESULT sq_GetVecSize(HSQUIRRELVM v, int Index, VecSize *Size) { sq_pushnull(v); // null iterator while (SQ_SUCCEEDED(sq_next(v, Index))) { SQFloat value; sq_getfloat(v, -1, &value); const SQChar *key; sq_getstring(v, -2, &key); if (strcmp(key, _SC("w")) == 0) { Size->width = value; } else if (strcmp(key, _SC("h")) == 0) { Size->height = value; } sq_pop(v, 2); } sq_pop(v, 1); return SQ_OK; } static SQRESULT sq_GetVec2(HSQUIRRELVM v, int Index, Vec2 *Pos) { sq_pushnull(v); // null iterator while (SQ_SUCCEEDED(sq_next(v, Index))) { SQFloat value; sq_getfloat(v, -1, &value); const SQChar *key; sq_getstring(v, -2, &key); if (strcmp(key, _SC("x")) == 0) { Pos->x = value; } else if (strcmp(key, _SC("y")) == 0) { Pos->y = value; } sq_pop(v, 2); } sq_pop(v, 1); return SQ_OK; } static SQRESULT sq_GetFRect(HSQUIRRELVM v, int Index, SDL_FRect *Pos) { sq_pushnull(v); // null iterator while (SQ_SUCCEEDED(sq_next(v, Index))) { SQFloat value; sq_getfloat(v, -1, &value); const SQChar *key; sq_getstring(v, -2, &key); if (strcmp(key, _SC("x")) == 0) { Pos->x = value; } else if (strcmp(key, _SC("y")) == 0) { Pos->y = value; } else if (strcmp(key, _SC("w")) == 0) { Pos->w = value; } else if (strcmp(key, _SC("h")) == 0) { Pos->h = value; } sq_pop(v, 2); } sq_pop(v, 1); return SQ_OK; } static void RegisterNutApi(const SQChar *funcName, SQFUNCTION funcAddr, HSQUIRRELVM v) { sq_pushroottable(v); sq_pushstring(v, funcName, -1); sq_newclosure(v, funcAddr, 0); sq_newslot(v, -3, false); sq_poptop(v); }