User Tools

Site Tools


dev:epic

This is an old revision of the document!


Here are my notes I use when I have to work on this system.

Here is how a C++ class can call into it's lua instance. I think this is where I was confused by what you were asking. Sorry, I don't know why it wasn't apparent to me.

  • I have a LuaObject that has access to it's Rtti/metadata.
    • I also have my own header parser that generates this code.
    • So I have access to the actual class name such as “Forge::Light”.
  • Every class has a class metatable that represent that class in lua
    • This metatables are created and populated during initialization.
    • There is master table stored in the lua registry, that has a mapping from class names to metatables.
  • There is also a mapping of c++ lightuserdata (pointer/instance) to metatables.
  • Also there is a list for garbage collection that is used when lua has full ownership of a c++ instance.
    • When a userdata is collected, this list is checked too see if the instance needs collecting.
    • If it does, it uses the class destructor.

This is an example of the forge::Light class using the rtti/metadata in my editor

Here is a stripped down class that shows the basics of how the system calls a C++ function from lua.

1) Header files are marked up using comments to expose/export classes and functions.

2) Here is the generated cpp that gets added to the project.

/home/admin/domains/wiki.d20dungeons.com/public_html/data/attic/dev/epic.1666890114.txt.gz · Last modified: (external edit)