Beispiel #1
0
        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
        }
Beispiel #2
0
 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;
         }
     }
 }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
 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);
     }
 }
Beispiel #6
0
 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);
     }
 }
Beispiel #7
0
        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();
            }
        }
Beispiel #8
0
 public override ETaskResult Execute(ETaskResult result, bool last)
 {
     return(ETaskResult.Successed);
 }
Beispiel #9
0
 public abstract ETaskResult Execute(ETaskResult result, bool last);
Beispiel #10
0
 public override ETaskResult Execute(ETaskResult result, bool last)
 {
     return(last ? ETaskResult.Successed : ETaskResult.Running);
 }
Beispiel #11
0
 public override ETaskResult Execute(ETaskResult result, bool last)
 {
     return(ETaskResult.Failed);
 }