UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

53 lines (42 loc) 1.63 kB
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); } }