[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Turning an entire script into a coroutine
- From: Michael Abbott <mabster@...>
- Date: Mon, 14 Feb 2005 02:17:05 +1100
I hate to be a nuisance, but this is a little more complicated than I
was looking for (but I'm really grateful for the reply :)...
To expand this a bit, I started integrating lua into our project this
morning. With the assumption that it was probably more likely to be a
designer writing the lua code than a programmer I started explaining lua
concepts to my house mate (a level designer who has worked on a few mods
for various games) to get an idea of the general flavour of code that he
picked up easily.
It appeared that he picked up the function calls (and the idea of using
them as states) very easily. When I tried to explain that functions are
just another type of variable he found that very confusing. Usage of
objects was fine, but creating them wasn't as good, though he has done
some C++ before (this reminds me of Visual Basic in the days that you
couldn't create your own OOP objects). Coroutines were fine, from the
perspective of only your own entity. How the entities run along-side
eachother was confusing, however.
So based on these discoveries I started fiddling with how the basic
structure would work. Which is why I decided to run with the interface
I first described (the one I couldn't figure out how to get working
;)... This was doubled with the idea that if you write a small script
for the lua command-line interpreter then it would tend to have the same
structure that one of our game scripts would have. In this case it
would be quite easy to show our designers examples of language usage
from within someone elses script.
I think part of the problem is also that we don't want a big runloop for
all our entities, but rather each called in turn by our engine. This is
due to the usual issues in games with only wanting particular entities
to be paused at specified points in our game, or staggering our updates
when it starts coming to LODing our entities, etc.
PS. I've had the fortune of working with coroutines at work before,
thank goodness, otherwise I'd be freaking out at this point :P
- I have a generic 'Task' object which 'wraps' any given object in a
- The 'tasks' register themselves with a 'runloop' which enumerator
through all the coroutines to give them a chance to run.
- When a 'task' is running, it's underlying object 'run' method is
invoked with the 'task' passed as an argument.