UNPKG

convex-pixel

Version:

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

81 lines 3.48 kB
import { __extends } from "tslib"; 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 */ var DomSynchronizer = /** @class */ (function (_super) { __extends(DomSynchronizer, _super); function DomSynchronizer(appContext) { var _this = _super.call(this) || this; _this.appContext = appContext; _this._postrenderHandler = function () { var map = {}; for (var _i = 0, _a = DomSynchronizer._syncronizedObjects; _i < _a.length; _i++) { var obj = _a[_i]; if (!map[obj.groupId]) { map[obj.groupId] = []; } map[obj.groupId].push(obj); } var dementions = {}; // tslint:disable-next-line: forin for (var id in map) { if (!dementions[id]) { dementions[id] = { width: 0, height: 0, x: 0, y: 0, id: id }; } var demention = dementions[id]; var len = map[id].length; var bound = Rect.new(); for (var _b = 0, _c = map[id]; _b < _c.length; _b++) { var obj = _c[_b]; var abs = obj.object.container ? obj.object.container.getGlobalPosition() : obj.object.getGlobalPosition(); var bounds = obj.object.getBounds(); var 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); return _this; } DomSynchronizer.add = function (syncEntity) { DomSynchronizer._instance.add(syncEntity); }; DomSynchronizer.prototype.init = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } }; DomSynchronizer.prototype.destroy = function () { var params = []; for (var _i = 0; _i < arguments.length; _i++) { params[_i] = arguments[_i]; } }; DomSynchronizer.prototype.add = function (syncEntity) { if (DomSynchronizer._syncronizedObjects.indexOf(syncEntity) === -1) { DomSynchronizer._syncronizedObjects.push(syncEntity); } }; DomSynchronizer._syncronizedObjects = new Array(); return DomSynchronizer; }(PIXI.utils.EventEmitter)); export { DomSynchronizer }; //# sourceMappingURL=dom-synchronizer.js.map