using System.Collections.Generic;
public static void Main()
Console.WriteLine("Start of program");
BTController btc = new BTController();
btc.root = new Selector();
Console.WriteLine("BTC.Tick() Return:"+ btc.Tick());
public class BTController
public bool hasTool = false;
public Stack<Node> stack = new Stack<Node>();
Console.WriteLine("No root is set!");
public abstract class Node
public abstract bool Tick(BTController controller);
public abstract class Composite : Node
public int childIndex = 0;
public class Selector : Composite
public override bool Tick(BTController controller)
if(children[childIndex].Tick(controller))
public abstract class Decorator : Node
public class Inverter : Decorator
public override bool Tick(BTController controller)
if(child.Tick(controller))
public abstract class Leaf : Node
public abstract class Condition : Leaf
public override bool Tick(BTController controller)
return CheckCondition(controller);
public abstract bool CheckCondition(BTController controller);
public class ToolCheck : Condition
public override bool CheckCondition(BTController controller)
return controller.hasTool;
public abstract class Action : Leaf
public override bool Tick(BTController controller)
return DoAction(controller);
public abstract bool DoAction(BTController controller);
public class TakeTool : Action
public override bool DoAction(BTController controller)
controller.hasTool = true;
public class DropTool : Action
public override bool DoAction(BTController controller)
controller.hasTool = false;