core/behavior-tree-node-sequencer.js

import {BehaviorTreeNode} from '../index.js';

/**
 * Creates behavior tree sequencer nodes.
 *
 * @example
 *
 * const first = new BehaviorTreeNodeAction(handler);
 * const second = new BehaviorTreeNodeAction(handler);
 *
 * const sequence = new BehaviorTreeNodeSequencer(node);
 *
 * const tree = new BehaviorTree(sequence);
 *
 * const success = tree.tick(timetick);
 */
class BehaviorTreeNodeSequencer extends BehaviorTreeNode {

    /**
     * Stores the nodes.
     * @type {Array<BehaviorTreeNode>}
     * @private
     */
    $nodes;

    /**
     * Creates a new behavior tree sequencer node.
     * @param {Array<BehaviorTreeNode>} $nodes The nodes.
     */
    constructor($nodes) {

        super();

        this.$nodes = [...$nodes];
    }

    /**
     * Updates the behavior tree by one tick update.
     * @param {number} $timetick The tick duration (in ms).
     * @returns {boolean}
     * @public
     */
    tick($timetick) {

        for (const node of this.$nodes) {

            if (node.tick($timetick) === false) {

                return false;
            }
        }

        return true;
    }
}

export {

    BehaviorTreeNodeSequencer
};

export default BehaviorTreeNodeSequencer;