@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
109 lines • 7.98 kB
JavaScript
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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