Timothée VERROUIL
2011-07-13 12:38:17 UTC
Hi,
I'm building a Script Engine that binding C++ to Lua.
This part is ok and work correctly but know, I've to implement the game logic part and I'm not really aware about the best practices.
So, here is what I want to do, and the twice solutions I've found.
I've a C++ GameObject and I want to script it with Lua.
So, I've to send a reference of that object to Lua (no problem here) and I've to Update the script each frame of the game loop.
But, I'see 2 ways to do that, each has its advantages and inconvenients.
Notice that to inject a reference, I do something like that :
- I affect a new name to the right metatable :
Metatable["tmpVar123"] = Metatable
- I set it to global
- I affect a local variable to this global
1) Whith Lua Thread
When the game start, for each gameObject which has a script, I create a new Lua Thread from C++ and initialize all of its local variables
(as self which represents the reference of the gameObject).
So, when I Update the script, the local variables are well initialized and there are no collisions with the other scripts because of the Lua Thread.
2) Without Lua Thread
I do the same as with Lua Thread but I don't create one thread for each script.
So, in order to avoid collisions between scripts, I initialize each local variables before Updating the script.
So, I think that to choose between this 2 methods, all depends of the performance of the lua thread (imagine if I have something like 1000 game objects,
so 1000 threads too!)
Thanks,
Tim
I'm building a Script Engine that binding C++ to Lua.
This part is ok and work correctly but know, I've to implement the game logic part and I'm not really aware about the best practices.
So, here is what I want to do, and the twice solutions I've found.
I've a C++ GameObject and I want to script it with Lua.
So, I've to send a reference of that object to Lua (no problem here) and I've to Update the script each frame of the game loop.
But, I'see 2 ways to do that, each has its advantages and inconvenients.
Notice that to inject a reference, I do something like that :
- I affect a new name to the right metatable :
Metatable["tmpVar123"] = Metatable
- I set it to global
- I affect a local variable to this global
1) Whith Lua Thread
When the game start, for each gameObject which has a script, I create a new Lua Thread from C++ and initialize all of its local variables
(as self which represents the reference of the gameObject).
So, when I Update the script, the local variables are well initialized and there are no collisions with the other scripts because of the Lua Thread.
2) Without Lua Thread
I do the same as with Lua Thread but I don't create one thread for each script.
So, in order to avoid collisions between scripts, I initialize each local variables before Updating the script.
So, I think that to choose between this 2 methods, all depends of the performance of the lua thread (imagine if I have something like 1000 game objects,
so 1000 threads too!)
Thanks,
Tim