@woosh/meep-engine
Version:
Pure JavaScript game engine. Fully featured and production ready.
76 lines (54 loc) • 1.74 kB
JavaScript
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;
}
}