bhive
Version:
Behavior Tree for Javascript
56 lines (48 loc) • 1.26 kB
JavaScript
const BaseComposite = require('../core/BaseComposite');
const {FAILURE, RUNNING} = require('../constants');
/**
* Class Priority
* @extends BaseComposite
* @category Composites
**/
class Priority extends BaseComposite {
/**
* @constructor
* @param {Object} params
* @param {BaseNode[]} params.children
*/
constructor({children = [], name} = {}) {
super({
type: 'Priority',
name,
children
});
}
/**
* @override
* @param {Context} context
**/
open(context) {
context.treeBoard.node(this).set('runningChild', 0);
}
/**
* @override
* @param {Context} context
* @return {NodeStatus}
**/
run(context) {
const nodeBoard = context.treeBoard.node(this);
const child = nodeBoard.get('runningChild');
for (let i = child; i < this.children.length; i++) {
const status = this.children[i].tick(context);
if (status !== FAILURE) {
if (status === RUNNING) {
nodeBoard.set('runningChild', i);
}
return status;
}
}
return FAILURE;
}
}
module.exports = Priority;