UNPKG

@woosh/meep-engine

Version:

Pure JavaScript game engine. Fully featured and production ready.

91 lines (73 loc) 1.84 kB
import { assert } from "../../../../core/assert.js"; import { Behavior } from "../Behavior.js"; /** * Abstract base class */ export class CompositeBehavior extends Behavior { /** * * @type {Behavior[]} * @protected */ __children = []; /** * * @param {Behavior} child */ addChild(child) { assert.defined(child, 'child'); assert.notNull(child, 'child'); assert.equal(child.isBehavior, true, 'child is not a Behavior'); assert.arrayHasNo(this.__children, child, 'child already added'); this.__children.push(child); } /** * * @param {Behavior[]} children */ addChildren(children) { assert.isArray(children, 'children'); const n = children.length; for (let i = 0; i < n; i++) { const e = children[i]; this.addChild(e); } } /** * Do not modify directly. Use {@link addChild} and {@link removeChild} instead * @return {Behavior[]} */ get children() { return this.__children; } /** * @deprecated use {@link children} accessor instead * @return {Behavior[]} */ getChildren() { return this.children; } /** * * @param {Behavior} child * @returns {boolean} */ removeChild(child) { const i = this.__children.indexOf(child); if (i === -1) { //child is not found return false; } else { this.__children.splice(i, 1); return true; } } clearChildren() { this.__children = []; } } /** * @readonly * @type {boolean} */ CompositeBehavior.prototype.isCompositeBehavior = true;