Drivenが解らないと、BindXXXXの部分が何をしてるか解らないかもしれないんで、
一応一番簡単なDrivenの実装書いて補足しとく。(この短い例はゲームに不向き)

void Driven( Phase *phase )
{
       while( phase = phase->Do() );
}

Doを実行すると、phaseがBindXXXで取り込んだオブジェクトの
ポインタを、一つ選んで返す。PhaseのオブジェクトはDoが呼ばれている間、
オブジェクト自身に課せられた課題(Play画面とか)を実行する。
BindXXXXはポインタを取り込むだけで、取り込んだポインタのメンバー関数を呼んだりはしない。