UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

76 lines (54 loc) 1.74 kB
import { assert } from "../../../../core/assert.js"; import { BehaviorStatus } from "../BehaviorStatus.js"; import { AbstractDecoratorBehavior } from "../decorator/AbstractDecoratorBehavior.js"; import { SucceedingBehavior } from "../primitive/SucceedingBehavior.js"; export class ConditionalBehavior extends AbstractDecoratorBehavior { /** * * @type {Behavior} */ condition = SucceedingBehavior.INSTANCE; /** * * @param {Behavior} behavior */ setCondition(behavior) { assert.defined(behavior, 'behavior'); assert.notNull(behavior, 'behavior'); assert.equal(behavior.isBehavior, true, 'behavior.isBehavior !== true'); this.condition = behavior; } tick(timeDelta) { const condition = this.condition; condition.initialize(this.context); const s = condition.tick(timeDelta); if (s === BehaviorStatus.Succeeded) { condition.finalize(); const s1 = this.__source.tick(timeDelta); return s1; } else if (s === BehaviorStatus.Failed) { condition.finalize(); return s; } else { //waiting? return s; } } finalize() { super.finalize(); const condition = this.condition; condition.finalize(); } /** * * @param {Behavior} condition * @param {Behavior} source * @return {ConditionalBehavior} */ static from(condition, source) { const r = new ConditionalBehavior(); r.setCondition(condition); r.setSource(source); return r; } }