Receiving C++ Object Reference in Lua

View: New views
1 Messages — Rating Filter:   Alert me  

Receiving C++ Object Reference in Lua

by Phlox Icon :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I want to use a Lua script to alter an object that was created, modified and bound in C++. I'm experienced in C++ but not in Lua. I've been looking at tutorials but I can't figure out how I should do this. I'm wondering if there's a specific LuaBind method of doing this.

I basically want to get a pointer to an object in C++ so I can perform some functions on it through script. The pseudo code would be like:
void Guard::RunAI {
referenceToObject = this
do the following lua{
Guard* g = referenceToObject
g:patrol()
}

I've looked at the tutorials:
http://lua-users.org/wiki/UserDataWithPointerExample - but this assumes the call for the object to be created is done in Lua
http://lua-users.org/wiki/CppObjectBinding - this is much closer to what I want but this requires that the class be in a wrapper. I can't do this because I have hundreds of classes that I'd have to write a wrapper for, though, I could probably use a template. Also, I want my objects to appear in the Lua file by their class name as LuaBind let's me rather than using the wrappers name.

I only need a pointer to my object so I've been focusing on light userdata ( lua_pushlightuserdata ). Still, I've had no luck:
void AIManager::Spawn() {
...
guard = new Guard();
...
}

void Guard::RunAI() {
lua_pushlightuserdata(L, (void*)this);
lua_setglobal(L,"guard"); // lame method
// (Guard*)lua_touserdata(L, 1);

luaL_dostring(
L,
"g = Guard(guard)\n" // trying to give Lua control of a guard made in C++ using horrible method
"g:Test()\n" // just prints message to see if it worked.
);
}
This code doesn't compile because I don't have a Guard constructor that takes a LuaState for the reason mentioned earlier (too many classes). I'm looking for a better way of doing this but I'm beginning to settle on the idea of anything that works.

I have almost no idea what I'm doing here. Any idea on how I might do this? Thanks.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
luabind-user mailing list
luabind-user@...
https://lists.sourceforge.net/lists/listinfo/luabind-user