Animatorその1

全然Animatorじゃないけど。PartialFunctionで状態遷移だけ。

import scala.actors._
import javax.media.opengl.GLAutoDrawable

class Animator extends Actor {
  private val drawables = scala.collection.mutable.Set[GLAutoDrawable]()
  private var action = stoped orElse pfallways

  def act() {
    loop {
      react(action)
    }
  }

  lazy val stoped : PartialFunction[Any, Unit] = {
    case Start => action = started orElse pfallways
  }

  lazy val started : PartialFunction[Any, Unit] = {
    case Stop => action = stoped orElse pfallways
    case Pause => action = paused orElse pfallways
  }

  lazy val paused : PartialFunction[Any, Unit]  = {
    case Stop => action = stoped orElse pfallways
    case Resume => action = started orElse pfallways
  }

  lazy val pfallways = pfdrawable orElse pfexit

  lazy val pfdrawable : PartialFunction[Any, Unit] = {
    case Add(drawable) => drawables += drawable
    case Remove(drawable) => drawables -= drawable
  }

  lazy val pfexit : PartialFunction[Any, Unit] = {
    case Exit => exit()
  }
}

名前考えるのがだるい。最後とかpfつけときゃいいやって思考になってて意味不明です。
これに色々肉付けしていって、ラッパーにGLAnimatorControl実装してー(def start()とか被るので)、とか考えてたけど、GLAnimatorControlにgetThreadとかあるわな。
詳しく見てないけど、描画中のスレッドを外部から取得できるようにするってActorとしてまずいんじゃなイカ。
そこんとこどーなのと思いつつ、あんまり触る時間が取れてない。