private TaskState ProcessByState(Task processedTask, TaskState state) { //Global.Log ("Processing task of sequence (" + ToString () + "): " + processedTask.ToString() + " with state: " + state.ToString()); switch (state) { case TaskState.Ready: return ExecuteSubTask (processedTask); case TaskState.Running: return TaskState.Running; case TaskState.Success: processedTask.State = TaskState.Ready; currentTaskIndex++; if (currentTaskIndex >= SubTasks.Count) { currentTaskIndex = 0; return TaskState.Success; } return TaskState.Running; case TaskState.Failed: processedTask.State = TaskState.Ready; //setting next task to first sub action currentTaskIndex = 0; return TaskState.Failed; default: //unexpected return TaskState.Failed; } }
private TaskState ExecuteSubTask(Task subTask) { //Global.Log ("Executing sequence subtask in sequence: " + subTask.ToString ()); var state = subTask.Execute (); if (state == TaskState.Ready) return TaskState.Success; //maybe failed as this is unexpected return ProcessByState (subTask, state); }
public CompositeTask AddTask(Task task) { SubTasks.Add (task); return this; }