58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
#pragma once
|
|
#include "squirrel/SquirrelEx.h"
|
|
#include "Actor/Object/ActiveObject.h"
|
|
|
|
static ActiveObject *GetActiveObject(HSQUIRRELVM v)
|
|
{
|
|
SQUserPointer ptr;
|
|
sq_getuserpointer(v, 2, &ptr);
|
|
ActiveObject *obj = (ActiveObject *)ptr;
|
|
return obj;
|
|
}
|
|
|
|
static SQInteger SQR_SetSpeed(HSQUIRRELVM v)
|
|
{
|
|
ActiveObject *obj = GetActiveObject(v);
|
|
SQFloat speedX, speedY, speedZ;
|
|
sq_getfloat(v, 3, &speedX);
|
|
sq_getfloat(v, 4, &speedY);
|
|
sq_getfloat(v, 5, &speedZ);
|
|
obj->SetSpeed(VecSpeed3(speedX, speedY, speedZ));
|
|
return 0;
|
|
}
|
|
|
|
static SQInteger SQR_GetSpeed(HSQUIRRELVM v)
|
|
{
|
|
ActiveObject *obj = GetActiveObject(v);
|
|
VecSpeed3 speed = obj->GetSpeed();
|
|
sq_newtable(v);
|
|
sq_pushstring(v, _SC("x"), -1);
|
|
sq_pushfloat(v, speed.x);
|
|
sq_newslot(v, 3, SQFalse);
|
|
sq_pushstring(v, _SC("y"), -1);
|
|
sq_pushfloat(v, speed.y);
|
|
sq_newslot(v, 3, SQFalse);
|
|
sq_pushstring(v, _SC("z"), -1);
|
|
sq_pushfloat(v, speed.z);
|
|
sq_newslot(v, 3, SQFalse);
|
|
return 1;
|
|
}
|
|
|
|
static void RegisterActiveObjectNutApi(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);
|
|
}
|
|
|
|
static void RegisterActiveObject()
|
|
{
|
|
SDL_Log("初始化 动态对象-松鼠脚本!");
|
|
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
|
|
// 设置速度
|
|
RegisterActiveObjectNutApi(_SC("sq_SetSpeed"), SQR_SetSpeed, v);
|
|
RegisterActiveObjectNutApi(_SC("sq_GetSpeed"), SQR_GetSpeed, v);
|
|
}
|