Advertisement

Squirrel [Sqrat] binding, anyone have experience

Started by June 15, 2011 04:48 PM
-1 comments, last by Warvstar 13 years, 8 months ago
Hey guys,

I'm currently using Squirrel as a scripting solution for my game engine, I'm using Sqrat for binding, at least for now.
[color="#333333"][font="arial, helvetica,"]
[/font]
[color="#333333"][font="arial, helvetica,"]Heres my code so far

[color="#000000"]void BindSquirrel(HSQUIRRELVM vm) {
using namespace Sqrat;

Class<TreeView> myTV(vm);
myTV.Func("init", &TreeView::InitTreeView);
myTV.Func("addItem", &TreeView::addItem);
myTV.Func("setPosition", &TreeView::SetScreenPosition);
myTV.Func("setScale", &TreeView::setScale);
myTV.Func("render", &TreeView::Render);
//myTV.Var("getRoot", &TreeView::root); // Does not work
myTV.Prop("getRoot", &TreeView::getRoot); // Does not work
RootTable(vm).Bind("TreeView",myTV);


RootTable().Bind("TreeItem", Class<TreeItem>()
.Func("init", &TreeItem::InitTreeItem)
.Func("setPosition", &TreeItem::SetScreenPosition)
};

run_script("tv <- TreeView();"); // Works fine
run_script("root <- tv.getRoot();"); //Works fine here

}


[color="#333333"][font="arial, helvetica,"][color="#000000"]void BindSquirrel(HSQUIRRELVM vm) {
using namespace Sqrat;

Class<TreeView> myTV(vm);
myTV.Func("init", &TreeView::InitTreeView);
myTV.Func("addItem", &TreeView::addItem);
myTV.Func("setPosition", &TreeView::SetScreenPosition);
myTV.Func("setScale", &TreeView::setScale);
myTV.Func("render", &TreeView::Render);
//myTV.Var("getRoot", &TreeView::root); // Does not work
myTV.Prop("getRoot", &TreeView::getRoot); // Does not work
RootTable(vm).Bind("TreeView",myTV);

initTreeItem();
<div>
</div> run_script("root <- tv.getRoot();"); //Does not work here
//It calls TreeItem* TreeView::getRoot() {return root;}on return it causes exception, below I describe where

}
void initTreeItem()
{
RootTable().Bind("TreeItem", Class<TreeItem>()
.Func("init", &TreeItem::InitTreeItem)
.Func("setPosition", &TreeItem::SetScreenPosition)
};
}
[/font]
[color=#333333]


[color="#333333"][color=#333333]when I try and run_script outside of the function the class<TreeView> was defined in, I get an error in sqratClassType.h at

[color="#000000"][color=#333333]static void PushInstance(HSQUIRRELVM vm, C* ptr) {
sq_pushobject(vm, ClassObject(vm)); // HERE,initialized = false
sq_createinstance(vm, -1);
sq_remove(vm, -2);
sq_setinstanceup(vm, -1, ptr);
}


[color="#333333"][color=#333333]so whats causing this to happen? Anyone know?


[color="#333333"][color=#333333]edit: heres what happens at[color="#000000"][color=#333333]static inline HSQOBJECT& ClassObject(HSQUIRRELVM vm) {
return getClassTypeData(vm).classObj;
}


[color="#333333"][color=#333333]when run_script is called outside function that Sqrat::Class<TreeView> was defined in, or in onUpdate().
Sqrat::TreeItem>::getClassTypeData returned {initialized=false classObj={...} getTable={...} ...} Sqrat::ClassTypeData &

[color=#333333]

[/font]

This topic is closed to new replies.

Advertisement