UNPKG

convex-pixel

Version:

The library for creating pseudo 3d interactive scenes based on webgl

64 lines 2.73 kB
import * as PIXI from "pixi.js"; import { Rect, Vector4D } from "../utils/geom"; export var EventTypes; (function (EventTypes) { EventTypes["CHANGE"] = "change"; })(EventTypes || (EventTypes = {})); /** * Sinchronization p3d objects in dom space */ export class DomSynchronizer extends PIXI.utils.EventEmitter { constructor(appContext) { super(); this.appContext = appContext; this._postrenderHandler = () => { const map = {}; for (const obj of DomSynchronizer._syncronizedObjects) { if (!map[obj.groupId]) { map[obj.groupId] = []; } map[obj.groupId].push(obj); } const dementions = {}; // tslint:disable-next-line: forin for (const id in map) { if (!dementions[id]) { dementions[id] = { width: 0, height: 0, x: 0, y: 0, id }; } const demention = dementions[id]; const len = map[id].length; const bound = Rect.new(); for (const obj of map[id]) { const abs = obj.object.container ? obj.object.container.getGlobalPosition() : obj.object.getGlobalPosition(); const bounds = obj.object.getBounds(); const helper = Vector4D.new(abs.x, abs.y, abs.x + bounds.width, abs.y + bounds.height); bound.set(Math.min(bound.x || helper.x, helper.x), Math.min(bound.y || helper.y, helper.y), Math.max(bound.width || helper.z, helper.z), Math.max(bound.height || helper.t, helper.t)); // unlink for best perfomance helper.free(); // abs.free(); } demention.x = bound.x; demention.y = bound.y; demention.width = bound.width - bound.x; demention.height = bound.height - bound.y; // unlink for best perfomance bound.free(); } this.emit(EventTypes.CHANGE, dementions); }; DomSynchronizer._instance = this; appContext.pixi.renderer.addListener("prerender", this._postrenderHandler); } static add(syncEntity) { DomSynchronizer._instance.add(syncEntity); } init(...params) { } destroy(...params) { } add(syncEntity) { if (DomSynchronizer._syncronizedObjects.indexOf(syncEntity) === -1) { DomSynchronizer._syncronizedObjects.push(syncEntity); } } } DomSynchronizer._syncronizedObjects = new Array(); //# sourceMappingURL=dom-synchronizer.js.map