public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            BehaviorResult result = TargetNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            else if (result == BehaviorResult.running)
            {
                return(BehaviorResult.running);
            }

            SetAborted();
            return(BehaviorResult.abort);
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                //Debug.LogError("missing target node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            if (N == 0.0f)
            {
                N = tree.GameTime;
            }
            BehaviorResult result = TargetNode.Exec(tree);

            if (result == BehaviorResult.success)
            {
                SetCompleted();
                N = 0.0f;
                return(BehaviorResult.success);
            }
            else if (result == BehaviorResult.failed)
            {
                SetFailed();
                return(BehaviorResult.failed);
            }
            else if (result == BehaviorResult.running)
            {
                if (tree.GameTime - N < Interval)
                {
                    return(BehaviorResult.running);
                }
                else
                {
                    TargetNode.Abort();
                    N = 0.0f;
                    return(BehaviorResult.failed);
                }
            }
            else
            {
                return(BehaviorResult.abort);
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            while (true)
            {
                if (N == 0.0f)
                {
                    N = tree.GameTime;
                }
                while (tree.GameTime - N < CDTime)
                {
                    return(BehaviorResult.running);
                }
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    Reset();
                }
                else if (result == BehaviorResult.failed)
                {
                    Reset();
                }
                else if (result == BehaviorResult.running)
                {
                    return(BehaviorResult.running);
                }
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                // Debug.LogError("missing target node");
                return(BehaviorResult.failed);
            }

            if (!Running)
            {
                if (OnPrecondition != null)
                {
                    if (!OnPrecondition())
                    {
                        return(BehaviorResult.failed);
                    }
                }

                SetStarting();
            }

            while (true)
            {
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    SetCompleted();
                    return(BehaviorResult.success);
                }
                else if (result == BehaviorResult.running)
                {
                    return(BehaviorResult.running);
                }
                else if (result == BehaviorResult.failed)
                {
                    return(BehaviorResult.running);
                }
            }
        }
        public override BehaviorResult Exec(IBehaviorTree tree)
        {
            if (TargetNode == null)
            {
                return(BehaviorResult.failed);
            }

            SetStarting();

            while (LoopCount < 0 || m_CounterLoop < LoopCount)
            {
                BehaviorResult result = TargetNode.Exec(tree);

                if (result == BehaviorResult.success)
                {
                    if (LoopCount > 0)
                    {
                        m_CounterLoop++;
                    }
                    //return BehaviorResult.running;
                }
                else if (result == BehaviorResult.failed)
                {
                    if (LoopCount > 0)
                    {
                        m_CounterLoop++;
                    }
                }
                else if (result == BehaviorResult.running)
                {
                    //return BehaviorResult.running;
                }
                return(BehaviorResult.running);
            }

            SetCompleted();
            return(BehaviorResult.success);
        }