Lua coroutine で「くるくる」を実装
http://lab.lowreal.net/trac/browser/c/ro/AI/Main.lua?rev=735#L347
してみた。コルーチンの使いかたがよくわかってなくて、callcc みたいに使ってるけど、なんか面白い使いかたないかなぁ。
「コマンドを予約」しておくと、次の AI ループ (RO がわから 140ms ごとによびだされる) のときにコマンドに対応した関数がよばれるようにしてある。http://lab.lowreal.net/trac/browser/c/ro/AI/Main.lua?rev=735#L34
で、
COMMAND[101] = "StepMotion"でコマンドを定義して、self.resCmds:push({101}) でキューにつっこんでる。なんかダサい。
でもって onStepMotion がよばれるので、onStepMotion には coroutine を resume する関数をいれとく。coroutine.wrap をするとまさにその関数をつくってくれるのでそのまま代入。あとはループ中で条件判断をしつつ呼び出しを RO にかえしてあげて、処理を継続させてる。ループで書けるのはわかりやすいけど、コルーチン自体がわかりにくい感じだ。