/// <summary> /// 呼び出し元のシーンに戻る /// </summary> /// このときに、pushSceneでスタック上にシーンが積まれていれば、 /// そちらを実体化する。 public void ReturnScene() { PopTask(); if (taskNameList.Count != 0) { TaskName name = PopTaskName(); TaskBase task = TaskFactory.CreateTask(name); taskList.Add(task); } }
/// <summary> /// popTaskするときにシーンタスクがIDisposableメンバであれば、 /// Disposeを呼び出すことをここで保証する。 /// </summary> private void PopTask() { if (taskList.Count == 0) { return; } TaskBase t = taskList[taskList.Count - 1]; IDisposable d = t as IDisposable; if (d != null) { d.Dispose(); } taskList.RemoveAt(taskList.Count - 1); }
/// <summary> /// /// </summary> /// <remarks> /// TaskBaseからのオーバーライド /// </remarks> /// <param name="o"></param> /// <returns></returns> public override int Task(object o) { if (End) { return(1); } TaskBase task = NowTask; if (task == null) { // タスクがすべて終了しているので // 次に予約されているタスクを生成して実行しなければならない。 TaskName name = PopTaskName(); // isEndをfalse通過しているわけでstacklist.length!=0 task = TaskFactory.CreateTask(name); taskList.Add(task); } task.Task(o); return(0); }
/// <summary> /// 他のシーンを呼び出す(現在実行中のタスク自体は破棄しない) /// </summary> /// <remarks> /// 現在実行中のシーン破棄はされません。 /// ただし、task関数のなかでは(現在実行中のシーンへreturnSceneなどで /// 制御が戻ってくるまでは)呼び出されなくなります。 /// </remarks> /// <param name="nPriority"></param> public void CallScene(TaskName name) { TaskBase task = TaskFactory.CreateTask(name); taskList.Add(task); }
/// <summary> /// 生成したタスクをタスクリストに登録する。 /// </summary> /// <param name="Task"></param> /// <param name="Priority"></param> /// <returns></returns> /// <remarks> /// <para> /// new したCTaskControlBase派生クラスを渡してチョ /// プライオリティは、タスクの優先度。0だと一番優先順位が高い。 /// 万が一に備えてマイナスの値を渡しても良いようにはなっている。 /// </para> /// </remarks> public void AddTask(TaskBase task, int priority) { // 正しい位置にinsertしなくてはならない AddTask(new Task(task, priority)); }
public Task(TaskBase task, int priority) { this.TaskBase = task; this.Priority = priority; this.NextPriority = priority; }