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); }
internal static Bt Not(Bt status) { switch (status) { case Bt.Success: return(Bt.Failure); case Bt.Failure: return(Bt.Success); default: return(Bt.Running); } }
public BtStatus Execute() { BtStatus status = Child.Execute(); if (status == BtStatus.Success) { status = BtStatus.Failed; } else if (status == BtStatus.Failed) { status = BtStatus.Success; } return(status); }
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); }
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); }