■
FSM。下みたいな感じで小さな必要なメッセージハンドラ書いて、STATEにMixinして、更にFSMクラスにMixinすれば全体の見通しがよくなりそう。
ただ、当然下位のメッセージハンドラの方が種類多いから下から積み上げて、個々のゲームオブジェクトに対応するFSM作るのは面倒。上から仮想関数のオーバーライドみたいな感じで差分だけ加えていければいいんだけどMixinは名前が重なると即エラー。
template MSG_SeeEnemy()
{
On_SeeEnemy(){/*敵を発見した時の処理*/}
}template MSG_Attacked()
{
On_Attacked(){/*攻撃された時の処理*/}
}template STATE_Patrol(alias msg)
{
exec(){/*msgによって適切なメッセージハンドラを実行*/}
mixin MSG_SeeEnemy;
mixin MSG_Attacked;
他。
}class FSM
{
exec(){/*現在のstateに対応したSTATEにmsgを渡して実行する*/}
mixin STATE_いろいろ。
}