Example #1
0
        public BtStatus Execute()
        {
            if (Counter == Children.Length)
            {
                Counter = 0;
                return(BtStatus.Success);
            }

            BtStatus status = Children[Counter].Execute();

            if (status == BtStatus.Success)
            {
                if (Counter < Children.Length)
                {
                    ++Counter;

                    if (Counter == Children.Length)
                    {
                        Counter = 0;
                        return(BtStatus.Success);
                    }
                }
            }
            else if (status == BtStatus.Failed)
            {
                Counter = 0;
                return(BtStatus.Failed);
            }

            return(BtStatus.Ongoing);
        }
Example #2
0
    internal static Bt Not(Bt status)
    {
        switch (status)
        {
        case Bt.Success:
            return(Bt.Failure);

        case Bt.Failure:
            return(Bt.Success);

        default:
            return(Bt.Running);
        }
    }
Example #3
0
        public BtStatus Execute()
        {
            BtStatus status = Child.Execute();

            if (status == BtStatus.Success)
            {
                status = BtStatus.Failed;
            }
            else if (status == BtStatus.Failed)
            {
                status = BtStatus.Success;
            }

            return(status);
        }
Example #4
0
 public static Bt Fallback(params Func <Bt>[] nodes)
 {
     for (int i = 0; i < nodes.Length; i++)
     {
         Bt status = nodes[i]();
         if (status == Bt.Running)
         {
             return(Bt.Running);
         }
         else if (status == Bt.Success)
         {
             return(Bt.Success);
         }
     }
     return(Bt.Failure);
 }
Example #5
0
 public static Bt Sequence(params IBtNode[] nodes)
 {
     for (int i = 0; i < nodes.Length; i++)
     {
         Bt status = nodes[i].BtUpdate();
         if (status == Bt.Running)
         {
             return(Bt.Running);
         }
         else if (status == Bt.Failure)
         {
             return(Bt.Failure);
         }
     }
     return(Bt.Success);
 }