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]