public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> Parallel <TTickData, TState>(
            this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder, string name, int successCount, int failureCount,
            Action <BehaviourTreeNodeSequenceBuilder <TTickData, TState> > config)
        {
            var newNode = new ParallelNode <TTickData, TState>(name, successCount, failureCount);

            return(builder.Add(newNode, config));
        }
        public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> Succeeder <TTickData, TState>(
            this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder,
            string name,
            Action <BehaviourTreeNodeDecoratorBuilder <TTickData, TState> > config)
        {
            var newNode = new SucceederNode <TTickData, TState>(name);

            return(builder.Add(newNode, config));
        }
        public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> Do <TTickData, TState>(
            this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder,
            string name,
            Func <TTickData, TState, BehaviourTreeState> action)
        {
            var newNode = new ActionNode <TTickData, TState>(name, action);

            return(builder.Add(newNode));
        }
        public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> Sequence <TTickData, TState>(
            this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder, string name,
            Action <BehaviourTreeNodeSequenceBuilder <TTickData, TState> > config,
            bool stateful = false)
        {
            var newNode = new SequenceNode <TTickData, TState>(name, stateful);

            return(builder.Add(newNode, config));
        }
        public static BehaviourTreeNodeSequenceBuilder <TTickData, TState> Condition <TTickData, TState>(
            this BehaviourTreeNodeSequenceBuilder <TTickData, TState> builder,
            string name,
            Func <TTickData, TState, bool> predicate)
        {
            var newNode = new ActionNode <TTickData, TState>(name,
                                                             (tick, state) => predicate(tick, state) ? BehaviourTreeState.Success : BehaviourTreeState.Failure);

            builder.Add(newNode);

            return(builder);
        }