bluecore/engine/ScriptSystem_Model.cpp

76 regels
1.5 KiB
C++

#include "ScriptSystem_Model.h"
namespace BlueCore
{
//------------------------------------------------------------------------------
static weak_ptr<ModelManager> gModelManager;
//------------------------------------------------------------------------------
static SQInteger _model_releasehook(SQUserPointer p, SQInteger size)
{
Model *model = (Model *)p;
if (model)
model->removeReference();
return 1;
}
//------------------------------------------------------------------------------
static SQInteger _model_constructor(HSQUIRRELVM vm)
{
SQInteger argc = sq_gettop(vm);
Model *model = 0;
if (argc > 1)
{
const SQChar *name = 0;
sq_getstring(vm, 2, &name);
if (gModelManager.valid())
{
model = gModelManager->loadModel(name);
if (model)
model->addReference();
}
}
sq_setinstanceup(vm, 1, (void *)model );
sq_setreleasehook(vm, 1, _model_releasehook);
return 0;
}
//------------------------------------------------------------------------------
void setupScriptSystem_Model(ScriptSystem* scriptsystem, ModelManager* modelmanager)
{
if (scriptsystem && modelmanager)
{
HSQUIRRELVM vm = scriptsystem->getVM();
gModelManager = modelmanager;
sq_pushroottable(vm);
// push class
sq_pushstring(vm, "Model", -1);
if (SQ_SUCCEEDED(sq_newclass(vm, SQFalse) ) )
{
// register constructor
sq_pushstring(vm, "constructor", -1);
sq_newclosure(vm, _model_constructor, 0);
sq_newslot(vm, -3, false);
// create class
sq_newslot(vm, -3, false);
}
sq_poptop(vm);
}
}
}