65 lines
1011 B
JavaScript
65 lines
1011 B
JavaScript
|
|
export class BehaviorTree {
|
|
constructor(root) {
|
|
this.root = root;
|
|
}
|
|
};
|
|
|
|
export class Node {
|
|
constructor() {}
|
|
};
|
|
|
|
export class ExecutionNode extends Node {
|
|
constructor() {
|
|
super();
|
|
}
|
|
|
|
isLeaf() { return true; }
|
|
};
|
|
|
|
export class ControlNode extends Node {
|
|
constructor() {
|
|
super();
|
|
this.children = [];
|
|
}
|
|
|
|
isLeaf() { return false; }
|
|
appendChild(child) {
|
|
this.children.push(child);
|
|
return this;
|
|
}
|
|
};
|
|
|
|
export class SequenceNode extends ControlNode {
|
|
constructor() {
|
|
super();
|
|
}
|
|
|
|
async tick(blackboard) {
|
|
for (let child of this.children) {
|
|
await child.tick(blackboard);
|
|
}
|
|
}
|
|
};
|
|
|
|
export class FallbackNode extends ControlNode {
|
|
constructor() { super(); }
|
|
|
|
async tick(blackboard) {
|
|
for (let i = 0; i < this.children.length; i += 1) {
|
|
try {
|
|
await child.tick(blackboard);
|
|
break;
|
|
} catch(err) {
|
|
if (i == this.children.length - 1) { throw err; }
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
export class ParallelNode extends ControlNode {
|
|
constructor() { super(); }
|
|
|
|
async tick(blackboard) {}
|
|
}
|