void TaskStatus(int id, ETaskResult result) { #if UNITY_EDITOR if (Macro.log) { if (m_logCount > 0) { m_logCount--; string color = ""; if (result == ETaskResult.Successed) { color = "#65DB0BFF"; } else if (result == ETaskResult.Running) { color = "#FFFFFFFF"; } else { color = "#FF2D00FF"; } Debug.Log.f(Debug.ELogType.Behavior, "<color=#727272FF>[" + m_frameCount + "]</color>" + "[" + mark + "]==> " + id + " --- " + m_taskValues[id].GetType().Name + " <color=" + color + "> " + result.ToString() + "</color>", mark); } } #endif }
public void Update() { m_frameCount++; if (m_runningTask == null) { ExecuteLeaf(m_firstExeNode); } else { ETaskResult result = m_runningTask.Execute(ETaskResult.Successed, false); TaskStatus(m_runningTask.id, result); if (result != ETaskResult.Running) { int compositeId = m_nodeTreeArr[m_runningTask.parentIndex]; //int childLength = m_nodeTreeArr[m_runningTask.parentIndex + 1]; ITask parentTask = m_taskValues[compositeId]; if (parentTask is CompositeTask) { ToExecuteComposite(m_runningTask.parentIndex, m_runningTask.childIndex, parentTask, result); } else if (parentTask is DecoratorTask) { ToExecuteDecorator(m_runningTask.parentIndex, parentTask, result); } else { Debug.Log.i(Debug.ELogType.Behavior, "leaf parent must Composite or Decorator"); } m_runningTask.End(); m_runningTask = null; } } }
void ToExecuteDecorator(int nodeId, ITask task, ETaskResult r) { task.Ready(); ETaskResult result = task.Execute(r, true); TaskStatus(task.id, result); if (result == ETaskResult.Running) { } else { if (task.parentIndex >= 0) { int compositeId = m_nodeTreeArr[task.parentIndex]; ITask parentTask = m_taskValues[compositeId]; if (parentTask is CompositeTask) { ToExecuteComposite(task.parentIndex, task.childIndex, parentTask, result); } else if (parentTask is DecoratorTask) { ToExecuteDecorator(task.parentIndex, parentTask, result); } } task.End(); } }
void ExecuteLeaf(ITask task) { task.Ready(); ETaskResult result = task.Execute(ETaskResult.Successed, false); TaskStatus(task.id, result); if (result == ETaskResult.Running) { m_runningTask = task; } else { int compositeId = m_nodeTreeArr[task.parentIndex]; //int childLength = m_nodeTreeArr[task.parentIndex + 1]; ITask parentTask = m_taskValues[compositeId]; if (parentTask is CompositeTask) { ToExecuteComposite(task.parentIndex, task.childIndex, parentTask, result); } else if (parentTask is DecoratorTask) { ToExecuteDecorator(task.parentIndex, parentTask, result); } else { Debug.Log.i(Debug.ELogType.Behavior, "leaf parent must Composite or Decorator"); } task.End(); } }
public override ETaskResult Execute(ETaskResult result, bool last) { if (last) { return(result == ETaskResult.Failed ? ETaskResult.Failed : ETaskResult.Successed); } else { return(result == ETaskResult.Failed ? ETaskResult.Failed : ETaskResult.Running); } }
public override ETaskResult Execute(ETaskResult result, bool last) { m_curTime -= TimeManager.deltaTime; if (m_curTime <= 0) { m_curTime = m_time; return(ETaskResult.Successed); } else { return(ETaskResult.Failed); } }
void ToExecuteComposite(int nodeId, int indexOfChild, ITask task, ETaskResult r) { int childLength = m_nodeTreeArr[nodeId + 1]; bool last = indexOfChild == childLength - 1; task.Ready(); ETaskResult result = task.Execute(r, last); if (result == ETaskResult.Running) { int childNodeId = nodeId + 1 + indexOfChild + 2; int childTaskId = m_nodeTreeArr[childNodeId]; ITask childTask = m_taskValues[childTaskId]; if (childTask.taskType == ETaskType.Composite) { ExecuteCompositeTo(childNodeId, childTask); } else if (childTask.taskType == ETaskType.Decorator) { ExecuteDecoratorTo(childNodeId, childTask); } else { ExecuteLeaf(childTask); } } else { TaskStatus(task.id, result); if (task.parentIndex >= 0) { int compositeId = m_nodeTreeArr[task.parentIndex]; ITask parentTask = m_taskValues[compositeId]; ToExecuteComposite(task.parentIndex, task.childIndex, parentTask, result); } task.End(); } }
public override ETaskResult Execute(ETaskResult result, bool last) { return(ETaskResult.Successed); }
public abstract ETaskResult Execute(ETaskResult result, bool last);
public override ETaskResult Execute(ETaskResult result, bool last) { return(last ? ETaskResult.Successed : ETaskResult.Running); }
public override ETaskResult Execute(ETaskResult result, bool last) { return(ETaskResult.Failed); }