ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

タスクシステムその3

引き続きタスクシステムの勉強。
タスクシステムにはTaskControllerクラスとSceneControllerクラスを用いる。
シーンコントローラーにはタスク名の列挙体を渡し、TaskFactoryを設定する。そして、このシーンコントローラーもタスクなのでタスクコントローラーに登録する。

class GameInfo
{
    public TaskController taskController;
    public SceneController<TaskName> sceneController;
}

GameInfo info;

private void Form1_Load(object sender, EventArgs e)
{
    info = new GameInfo();

    // タスクコントローラーの作成
    info.taskController = new TaskController();

    // シーンコントローラーの作成
    info.sceneController = new SceneController<TaskName>();
    // TaskFactoryの設定
    info.sceneController.TaskFactory = new MySceneFactory();

    // タスクコントローラーに登録。プライオリティは1
    info.taskController.AddTask(info.sceneController, 1);
}

// タスク名の列挙体
enum TaskName { Task0 };

// タスクを生成するためのFactory
class MySceneFactory : TaskFactoryBase<TaskName>
{
    public override TaskBase CreateTask(TaskName name)
    {
        switch( name )
        {
        case TaskName.Task0:
            return new Task0();
        }
        throw null;
    }
}

// タスククラス
class Task0 : TaskBase
{
    public override int Task(Object o)
    {
        return 0;
    }
}

ほとんど、サンプルそのまま。
デザインパターンをよく知らないのでTaskFactoryの部分がいまいち理解できていない。デザインパターンも勉強しないと。