Ejemplo n.º 1
0
        /// <summary>
        /// 更新。
        /// </summary>
        /// <returns>动作状态。</returns>
        public override ActionState Update()
        {
            bool isrunnig = false;      //是否有运行中的动作
            int  sn       = 0;          //成功的动作数量
            int  fn       = 0;          //失败的动作数量

            for (int i = 0; i < m_Children.Count; ++i)
            {
                Action act = m_Children[i];
                if (act.Run)
                {
                    ActionState state = act.Update();
                    if (state == ActionState.Running)
                    {
                        isrunnig = true;
                    }
                    else if (state == ActionState.Succeed)
                    {
                        sn = sn + 1;
                    }
                    else if (state == ActionState.Failed)
                    {
                        fn = fn + 1;
                    }
                }
            }

            //只要有一个是运行状态则返回运行状态。
            if (isrunnig)
            {
                return(ActionState.Running);
            }

            //没有成功或失败的
            if (sn + fn <= 0)
            {
                return(ActionState.Stop);
            }

            //一个成功则返回成功
            if (m_Mode == ParallelMode.Or)
            {
                return(sn > 0 ? ActionState.Succeed : ActionState.Failed);
            }

            //一个失败则返回失败
            if (m_Mode == ParallelMode.And)
            {
                return(fn > 0 ? ActionState.Failed : ActionState.Succeed);
            }

            return(ActionState.Stop);        //理论上不会走到这一句
        }