Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.

no one

proper use of lua...

This topic is 5392 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hiya I have a question about lua... but first, heres what I want to do. ex script file... newobject1 = AddMeshObject("rock.3ds"); pos = vector3(-200,20,-10); SetPosition(newobject1, pos); etc... how do you register classes with lua? And also, ive tried to register class functions like so... class functions: CSomeClass::Foo(lua_State *L) and then calling lua register like so... CSomeClass sc; lua_register(g_lstate, "Foo",sc.Foo); Its says that It cannot register it basically because its not a c function. Hmmm... Thanks for any feedback on this issue.

Share this post

Link to post
Share on other sites
It is correct, that isn''t a C-function its a C++ function (a member function at that!)

search for "Luna" or "Lunar" for a C++ template that does what you want.

Share this post

Link to post
Share on other sites
You might try using tolua. There are other tools out there for binding C/C++ code for calling from Lua, but tolua is the one I''m familiar with. It''s purpose is to handle the dirty work of registering functions and classes to Lua, so that you don''t have to.

Basically, in tolua you create a "stripped down" version of any class header file you wish to expose to Lua, containing the class declaration and any member functions you wish exported. You can export class definitions, functions, constants, enumerations and #defines, derived classes, etc... and tolua will generate a source code file to be compiled and linked with your application, that contains all of the bindings and registering required, so that you don''t have to slog through a lot of the grunt work.

tolua binds the constructors and destructor as well, so in the case of your example, it would be perfectly viable to write Lua code as:

pos=vector3:new(-200, 20, -10)
SetPosition(newobject1, pos)

as long as the functions AddMeshObject() and SetPosition() were declared in the "stripped down" header fed to tolua, as well as the class/struct vector3. Take a look at tolua here for more information.

I have found tolua to be extremely useful in implementing the scripting for my game, and I use it for all sorts of things, from game configuration to scripting of items, skills, enemies, etc...Any time a treasure chest in Golem dumps treasure, or an enemy shoots a fireball, it is thanks to the work tolua has saved me.

Good luck.

vertexnormal AT linuxmail DOT org

Check out Golem: Lands of Shadow, an isometrically rendered hack-and-slash inspired equally by Nethack and Diablo.

Share this post

Link to post
Share on other sites
Cool thanks alot guys!

I was worried that I would have to make 5000000 c functions
for binding my classes with lua. I never heard of the toolkits

The last post, #3..stay away from lua? I wasn'r sure if thats
what he ment.

Thanks again, hopefully ill have some screens of my game engine
up in a few weeks. I had another question now, I was planning on using interface classes for my object classes in which would be used to set variables for the objects.


class CObject
vector3 position;

class CObjectMovement
void SetPosition(CObject *obj, vector3 pos)
obj->position = pos;

Ok, now if I make a "striped down" version of the class
including variables and functions etc, should I just
setvariables like this:

script file:

newobject1.position = vector3(-200,20,-10);
newobject1.blendstyle = EBS_TRANSPARENT;

that vs:
pos = vector3(-200,20,-10);
SetPosition(newobject1, pos);


Thanks alot.

[edited by - no one on October 16, 2003 8:08:43 PM]

Share this post

Link to post
Share on other sites
Alrighty, Just read a bit about tolua and downloaded it.
It looks really cool and easy to use. What I got from reading
the document was that with using tolua you could basically
export all of your engine classes if you wanted and then
say make the game code in script. This seems like the approach
that Epic used with the unreal engines. (except they didn't use

Man, now I have a ton of ideas and im even thinking that ill
have to make a design change. Very cool stuff!

[edited by - no one on October 16, 2003 8:32:53 PM]

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!