@robotlegsjs/pixi
Version:
PIXI View Integration with RobotlegsJS
100 lines • 3.95 kB
JavaScript
;
// ------------------------------------------------------------------------------
// Copyright (c) 2017-present, RobotlegsJS. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
exports.applyPixiPatch = void 0;
/**
* Patch PIXI to:
* - emit "added"/"removed" events on stage
* - implement PIXI.Container.contains method
*/
var pixi_js_1 = require("pixi.js");
function isConnectedToStage(stage, object) {
if (object === stage) {
return true;
}
else if (object.parent) {
return isConnectedToStage(stage, object.parent);
}
else {
return false;
}
}
function emitAddedEvent(stage, target) {
stage.emit("added", { target: target });
if (target instanceof pixi_js_1.Container) {
target.children.forEach(function (child) { return emitAddedEvent(stage, child); });
}
}
function emitRemovedEvent(stage, target) {
stage.emit("removed", { target: target });
if (target instanceof pixi_js_1.Container) {
target.children.forEach(function (child) { return emitRemovedEvent(stage, child); });
}
}
function applyPixiPatch(stage) {
var addChild = pixi_js_1.Container.prototype.addChild;
var addChildAt = pixi_js_1.Container.prototype.addChildAt;
var removeChild = pixi_js_1.Container.prototype.removeChild;
var removeChildren = pixi_js_1.Container.prototype.removeChildren;
var removeChildAt = pixi_js_1.Container.prototype.removeChildAt;
pixi_js_1.Container.prototype.addChild = function patchedAddChild() {
var children = [];
for (var _i = 0; _i < arguments.length; _i++) {
children[_i] = arguments[_i];
}
for (var i = 0, len = arguments.length; i < len; i++) {
var object = arguments[i];
addChild.call(this, object);
if (isConnectedToStage(stage, object)) {
emitAddedEvent(stage, object);
}
}
return arguments[0];
};
pixi_js_1.Container.prototype.addChildAt = function patchedAddChildAt(child, index) {
addChildAt.call(this, child, index);
if (isConnectedToStage(stage, child)) {
emitAddedEvent(stage, child);
}
return child;
};
pixi_js_1.Container.prototype.removeChild = function patchedRemoveChild() {
var children = [];
for (var _i = 0; _i < arguments.length; _i++) {
children[_i] = arguments[_i];
}
for (var i = 0, len = arguments.length; i < len; i++) {
var object = arguments[i];
if (isConnectedToStage(stage, object)) {
emitRemovedEvent(stage, object);
}
removeChild.call(this, object);
}
return arguments[0];
};
pixi_js_1.Container.prototype.removeChildren = function patchedRemoveChildren(beginIndex, endIndex) {
if (beginIndex === void 0) { beginIndex = 0; }
var removedChildren = removeChildren.call(this, beginIndex, endIndex);
if (isConnectedToStage(stage, this) && removedChildren.length) {
for (var _i = 0, removedChildren_1 = removedChildren; _i < removedChildren_1.length; _i++) {
var child = removedChildren_1[_i];
emitRemovedEvent(stage, child);
}
}
return removedChildren;
};
pixi_js_1.Container.prototype.removeChildAt = function patchedRemoveChildAt(index) {
var child = removeChildAt.call(this, index);
if (isConnectedToStage(stage, this) && child) {
emitRemovedEvent(stage, child);
}
return child;
};
}
exports.applyPixiPatch = applyPixiPatch;
//# sourceMappingURL=pixi-patch.js.map