|
Hi Udo,
Udo Schroeter schreef op 16/09/2014 12:12:
Yes yes, I have done this a lot before and solved other problems that way, but I can't find this one.Again, it's helpful to look at the Lua source itself, for example the liolib.c which I mentioned earlier.
Yes, I have done these things before a lot, I have created lots of objects before.3) Now, from the user side, you probably want to make changing values in that table easier for them. That's where you could pre-populate the metatable with a __newindex and an __index function that takes care of storing and retrieving values - so people can use the idiom you described with the onMouseMove example.^ this gives you a C struct linked with a Lua table, you don't have to do any housekeeping to keep them associated.2) make a new table and set it as the metatable for the objectThe steps involved would be:1) create the userdata object
But I think this is the magic answer for my question: I need to put the value in the metatable itself.For this, you'd have to make a little C function that takes the incoming values and saves them to the metatable itself.
I think that for me, the metatable has always been some kind of magical object but it is actually just a table associated to another object that I can put values in. I think I understand now and I will try it!
Thanks.
And then, yes, of course, it is easy. I just push the user data, get the meta table, call its onMouseMove function (if it exists).4) Using the table from the C side is simple. You retrieve the metatable for your struct, look up the pertinent function and call it if present. You can find examples for this throughout the Lua *lib.c files as well.
I hope this helps you get on your way. It takes a little effort to get acquainted with the Lua API, but once you get the hang of it, everything should fall into place...
Yes, thanks! I have done a lot of projects in Lua before and I have never had any problems with it because I always sticked to Lua objects or C objects and not really interact between them as this was usually not necessary.
I hope this was my last email about this :-)