Example #1
0
File: BTNode.cs Project: nistck/Jx
 /// <summary>
 /// 执行之后
 /// </summary>
 /// <param name="context"></param>
 /// <param name="result"></param>
 protected virtual void OnExit(BTContext context, BTResult result)
 {
 }
Example #2
0
File: BTNode.cs Project: nistck/Jx
 /// <summary>
 /// Session结束
 /// </summary>
 /// <param name="context"></param>
 /// <param name="result"></param>
 protected virtual void OnClose(BTContext context, BTResult result)
 {
 }
Example #3
0
File: BTNode.cs Project: nistck/Jx
 private void _close(BTContext context, BTResult result)
 {
     _sessionOpen = false;
     OnClose(context, result);
 }
Example #4
0
File: BTNode.cs Project: nistck/Jx
 private void _exit(BTContext context, BTResult result)
 {
     OnExit(context, result);
 }
Example #5
0
File: BTNode.cs Project: nistck/Jx
 private BTResult _MuteResult(BTResult r)
 {
     return(MuteResult == null ? r : MuteResult);
 }
Example #6
0
        protected override BTResult OnTick(BTContext context)
        {
            if (m_Children == null || m_Children.Count == 0)
            {
                return(BTResult.Success);
            }

            BTResult status            = BTResult.Success;
            int      numberOfFailures  = 0;
            int      numberOfSuccesses = 0;
            int      numberOfRunning   = 0;

            for (int i = 0; i < m_Children.Count; i++)
            {
                BTResult childStatus = m_Children[i].Tick_(context);

                if (childStatus == BTResult.Success)
                {
                    numberOfSuccesses++;
                }
                else if (childStatus == BTResult.Failed)
                {
                    numberOfFailures++;
                }
                else if (childStatus == BTResult.Running)
                {
                    numberOfRunning++;
                }
            }


            if ((m_failOnAny && numberOfFailures > 0) || (m_succeedOnAny && numberOfSuccesses > 0))
            {
                if (m_failOnTie)
                {
                    if (m_failOnAny && numberOfFailures > 0)
                    {
                        status = BTResult.Failed;
                    }
                    else if (m_succeedOnAny && numberOfSuccesses > 0)
                    {
                        status = BTResult.Success;
                    }
                }
                else
                {
                    if (m_succeedOnAny && numberOfSuccesses > 0)
                    {
                        status = BTResult.Success;
                    }
                    else if (m_failOnAny && numberOfFailures > 0)
                    {
                        status = BTResult.Failed;
                    }
                }
            }
            else
            {
                if (numberOfSuccesses == m_Children.Count)
                {
                    status = BTResult.Success;
                }
                else if (numberOfFailures == m_Children.Count)
                {
                    status = BTResult.Failed;
                }
                else
                {
                    status = BTResult.Running;
                }
            }

            return(status);
        }