@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
53 lines (42 loc) • 1.63 kB
JavaScript
import Entity from "../../../engine/ecs/Entity.js";
import { SequenceBehavior } from "../../../engine/intelligence/behavior/composite/SequenceBehavior.js";
import { BehaviorComponent } from "../../../engine/intelligence/behavior/ecs/BehaviorComponent.js";
import { DieBehavior } from "../../../engine/intelligence/behavior/ecs/DieBehavior.js";
import { ActionBehavior } from "../../../engine/intelligence/behavior/primitive/ActionBehavior.js";
import { DelayBehavior } from "../../../engine/intelligence/behavior/util/DelayBehavior.js";
import { assert } from "../../assert.js";
import TaskState from "../task/TaskState.js";
import { AsynchronousAction } from "./AsynchronousAction.js";
export class AsynchronousDelayAction extends AsynchronousAction {
/**
*
* @param {EntityComponentDataset} ecd
* @param {number} time in seconds
*/
constructor(ecd, time) {
super();
assert.isNumber(time, 'time');
this.__ecd = ecd;
this.__time = time;
this.__entity = new Entity();
this.__entity.add(BehaviorComponent.from(
SequenceBehavior.from([
DelayBehavior.from(time),
new ActionBehavior(() => {
this.__succeed();
}),
DieBehavior.create()
])
));
}
cancel() {
if (this.status === TaskState.RUNNING) {
this.__entity.destroy();
}
return Promise.resolve();
}
start() {
super.start();
this.__entity.build(this.__ecd);
}
}