Lua Process and Hurdles
March 8th, 2006
Ok, well things are going very well. I tidied up my sandbox last night and checked everything in. I was able to go around blowing classes away that are now managed by Lua. The coolest little change I made last night was to add this to the script:
function some_callback()
dennis:queueSpeech("Wow, it works!")
end
Admittedly, the registration of the callback happened in C++, but it would be very easy to make the registration scriptable. Now for the hurdle. I’ll try my best to explain this clearly…
The pipeline of operations is this:
- Main loop updates all objects
- Signals are emitted
- Any Slots/Callbacks do their processing
That obviously occurs over and over, until the user exits. An example of a signal might be that the lightswitch was turned on. Assuming that this event was slotted to a script called some_callback, that callback needs to return before we can get back to the main loop. Therefore, it doesn’t seem to be easy to implement a waitFor(x) type function. For example, I can’t figure out how to do this:
function some_callback()
dennis:queueSpeech("Looks like a lightswitch")
waitFor(dennis:isIdle)
bob:walkTo(dennis:x() - 10, dennis:y())
waitFor(bob:isIdle)
bob:queueSpeech("I agree")
end
Problem is, the script isn’t running in a seperate thread. I would certainly prefer that it stay that way, but I’m not sure exactly how to achieve this. One idea, is that I make the waitFor function register a callback with isIdle, process the main loop continuously itself and unregister with isIdle when it receives the callback… somehow.
It’s all a bit messy and it’s certainly something I’m going to need to address.