convex-pixel
Version:
The library for creating pseudo 3d interactive scenes based on webgl
81 lines • 3.48 kB
JavaScript
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