UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

109 lines 7.98 kB
import { TgdPainter, } from "./painter.js"; /** * Group several painters together. */ export class TgdPainterGroup extends TgdPainter { constructor(painters = [], { onEnter, onExit, name } = {}) { super(); this.active = true; this.logics = []; this.onEnter = onEnter; this.onExit = onExit; this.painters = [...painters]; this.name = name !== null && name !== void 0 ? name : `Group/${this.name}`; } forEachChild(callback) { for (const [index, child] of this.painters.entries()) callback(child, index); } has(painter) { return this.painters.includes(painter); } add(...painters) { for (const painter of painters) { this.painters.push(painter); } } addFirst(...painters) { for (let index = painters.length - 1; index >= 0; index--) { const painter = painters[index]; this.painters.unshift(painter); } } remove(...painters) { for (const painter of painters) { const index = this.painters.indexOf(painter); if (index === -1) continue; this.painters.splice(index, 1); painter.delete(); } } removeAll() { for (const painter of this.painters) { painter.delete(); } this.painters.splice(0); } delete() { for (const painter of this.painters) { painter.delete(); } this.painters.splice(0); this.logicClear(); } logicAdd(logic) { if (logic) { this.logicRemove(logic); this.logics.push(logic); } } logicRemove(logic) { if (!logic) return; const { logics } = this; const index = logics.indexOf(logic); if (index === -1) return; logics.splice(index, 1); } logicClear() { this.logics.splice(0); } paint(time, delay) { var _a, _b; if (!this.active) return; (_a = this.onEnter) === null || _a === void 0 ? void 0 : _a.call(this, time, delay); for (const painter of this.painters) { if (painter.active) { painter.paint(time, delay); } } for (const logic of this.logics) { logic(time, delay); } (_b = this.onExit) === null || _b === void 0 ? void 0 : _b.call(this, time, delay); } get hierarchy() { return { [this.active ? this.name : `${this.name} (Inactive)`]: this.painters.map(painter => painter.hierarchy), }; } debugHierarchy(caption) { console.log(caption !== null && caption !== void 0 ? caption : this.name); this.recursiveDebug(this.hierarchy); } recursiveDebug(h, indent = "") { const indent2 = `${indent} `; for (const key of Object.keys(h)) { console.log(`${indent}${key}`); const value = h[key]; if (value) { for (const child of value) this.recursiveDebug(child, indent2); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFpbnRlci9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUgsVUFBVSxHQUNiLE1BQU0sV0FBVyxDQUFBO0FBUWxCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsVUFBVTtJQVEzQyxZQUNJLFdBQXlCLEVBQUUsRUFDM0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBNkIsRUFBRTtRQUV0RCxLQUFLLEVBQUUsQ0FBQTtRQVhKLFdBQU0sR0FBRyxJQUFJLENBQUE7UUFLSCxXQUFNLEdBQWlELEVBQUUsQ0FBQTtRQU90RSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQTtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksYUFBSixJQUFJLGNBQUosSUFBSSxHQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBb0Q7UUFDN0QsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ2hELFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFtQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBRyxRQUFzQjtRQUN6QixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8s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