UNPKG

@senspark/ee

Version:

utility library for cocos creator

277 lines (276 loc) 10.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var assert = require("assert"); var NestedPrefab_1 = require("./NestedPrefab"); var ProfileManager_1 = require("./ProfileManager"); var UnselectableComponent_1 = require("./UnselectableComponent"); var settingKey = 'use_nested_prefab'; // tslint:disable-next-line:ban-types var cloneFunction = function (f) { var result = function () { return f.apply(this, arguments); }; for (var key in f) { if (f.hasOwnProperty(key)) { result[key] = f[key]; } } return result; }; var overwriteGetIntersectionList = function (oldFunction) { cc.log('overwrite cc.engine.getIntersectionList.'); // Clone the original getIntersectionList function. var original = cloneFunction(oldFunction).bind(cc.engine); // Overwrite the getIntersectionList function. return function (rect, t) { var profile = ProfileManager_1.ProfileManager.getInstance(); if (!profile.loadData(settingKey)) { return original(rect, t); } return original(rect, t).filter(function (entry) { var node = entry.node; assert(node !== null); var comp = node.getComponent(UnselectableComponent_1.UnselectableComponent); if (comp !== null && comp.enabled) { // Ignore this node. return false; } return true; }); }; }; /** Version < 2 */ var overwriteDumpHierarchy = function (oldFunction) { cc.log('overwrite _Scene.dumpHierarchy.'); var original = cloneFunction(oldFunction); var NodeStates; (function (NodeStates) { NodeStates[NodeStates["Normal"] = 0] = "Normal"; NodeStates[NodeStates["Prefab"] = 1] = "Prefab"; NodeStates[NodeStates["Prefab_AutoSync"] = 2] = "Prefab_AutoSync"; NodeStates[NodeStates["Prefab_Missing"] = 3] = "Prefab_Missing"; })(NodeStates || (NodeStates = {})); var getChildren = function (node) { if (node.getComponent(UnselectableComponent_1.UnselectableComponent) !== null) { // Ignore this node. return undefined; } var state = NodeStates.Normal; if (node._prefab) { if (node._prefab.root && node._prefab.root._prefab.sync) { state = NodeStates.Prefab_AutoSync; } else { state = NodeStates.Prefab; } } var children = []; node._children.map(getChildren).forEach(function (entry) { if (entry !== undefined) { children.push(entry); } }); return { name: node.name, id: node.uuid, children: children.length > 0 ? children : null, state: state, isActive: node._activeInHierarchy, }; }; return (function (scene, includeScene) { var profile = ProfileManager_1.ProfileManager.getInstance(); if (!profile.loadData(settingKey)) { return original(scene, includeScene); } scene = scene || cc.director.getScene(); var nodes = includeScene ? [scene] : scene._children; return nodes.map(getChildren); }); }; /** Version < 2 */ var overwriteCreateNodeFromAsset = function (oldFunction) { cc.log('overwrite _Scene.createNodeFromAsset.'); var original = cloneFunction(oldFunction); return (function (uuid, callback) { var profile = ProfileManager_1.ProfileManager.getInstance(); if (!profile.loadData('use_nested_prefab')) { original(uuid, callback); return; } cc.AssetLibrary.queryAssetInfo(uuid, function (err0, url, raw, ctor) { if (ctor === cc.Prefab) { cc.AssetLibrary.loadAsset(uuid, function (error, result) { if (error) { callback(error); return; } if (result instanceof cc.Prefab) { var defaultPrefabs = [ 'sprite', 'sprite_splash', 'label', 'richtext', 'particlesystem', 'tiledmap', 'canvas', 'button', 'pageview', 'progressBar', 'editbox', 'slider', 'toggle', 'toggleContainer', 'videoplayer', 'webview', ]; if (defaultPrefabs.indexOf(result.name) === -1) { callback(null, NestedPrefab_1.NestedPrefab.createNode(result)); } else { original(uuid, callback); } } else { callback(new Error("Expected asset type cc.Prefab but found " + cc.js.getClassName(result))); } }); } else { original(uuid, callback); } }); }); }; var overwriteGizmoRegisterEvent = function (oldFunction) { cc.log('overwrite Editor.Gizmo._registerEvent'); return function () { var _this = this; var node = this._root.node; var isIgnore = function () { var profile = ProfileManager_1.ProfileManager.getInstance(); if (!profile.loadData(settingKey)) { return false; } assert(_this.node !== null); var comp = _this.node.getComponent(UnselectableComponent_1.UnselectableComponent); return comp !== null && comp.enabled; }; node.addEventListener("mousedown", function (event) { if (isIgnore()) { return; } var uuid = _this.nodes.map(function (item) { return item.uuid; }); Editor.Selection.select("node", uuid); }, true); node.addEventListener("mouseover", function (event) { if (isIgnore()) { return; } Editor.Selection.hover("node", _this.node.uuid); }, true); node.addEventListener("mouseleave", function (event) { if (isIgnore()) { return; } Editor.Selection.hover("node", null); }, true); node.addEventListener("mousemove", function (event) { if (isIgnore()) { return; } var element = event.srcElement; element.instance.ignoreMouseMove || event.stopPropagation(); }, false); }; }; var overwriteFunction = function (oldFunction, callback) { var key = '__ee_js_overwrite'; var originalFunction = oldFunction; if (oldFunction[key] !== undefined) { originalFunction = oldFunction[key]; } var newFunction = callback(originalFunction); newFunction[key] = originalFunction; return newFunction; }; // Version >= 2 // app.asar/editor/page/scene-utils/dump/hierarchy.js var dumpHierarchy = function (scene, includeScene) { var NodeStates; (function (NodeStates) { NodeStates[NodeStates["Normal"] = 0] = "Normal"; NodeStates[NodeStates["Prefab"] = 1] = "Prefab"; NodeStates[NodeStates["Prefab_AutoSync"] = 2] = "Prefab_AutoSync"; NodeStates[NodeStates["Prefab_Missing"] = 3] = "Prefab_Missing"; })(NodeStates || (NodeStates = {})); var getChildren = function (node, filter) { if (filter && node.getComponent(UnselectableComponent_1.UnselectableComponent) !== null) { // Ignore this node. return undefined; } var state = NodeStates.Normal; if (node._prefab) { if (node._prefab.root) { if (node._prefab.root._prefab.asset) { if (node._prefab.root._prefab.sync) { state = NodeStates.Prefab_AutoSync; } else { state = NodeStates.Prefab; } } else { state = NodeStates.Prefab_Missing; } } else { state = NodeStates.Prefab; } } var children = []; node._children.map(function (item) { return getChildren(item, filter); }).forEach(function (entry) { if (entry !== undefined) { children.push(entry); } }); return { name: node.name, id: node.uuid, children: children.length > 0 ? children : null, prefabState: state, locked: !!(node._objFlags & cc.Object.Flags.LockedInEditor), isActive: node._activeInHierarchy, hidden: node instanceof cc.PrivateNode, }; }; var profile = ProfileManager_1.ProfileManager.getInstance(); scene = scene || cc.director.getScene(); var nodes = includeScene ? [scene] : scene._children; return nodes.map(function (node) { return getChildren(node, profile.loadData(settingKey)); }); }; if (CC_EDITOR) { cc.engine.getIntersectionList = overwriteFunction(cc.engine.getIntersectionList, overwriteGetIntersectionList); if (cc.ENGINE_VERSION >= '2') { var panels = Editor.UI.PolymerUtils.panels; // app.asar/editor/builtin/scene/panel/scene.js var scene = panels['scene']; // app.asar/editor/builtin/scene/panel/messages/*.js var messages = scene.prototype.messages; messages['scene:query-hierarchy'] = function (event) { if (!cc.engine.isInitialized) { event.reply(null, '', []); return; } var nodes = dumpHierarchy(); var uuid = _Scene.currentScene().uuid; event.reply(null, uuid, nodes); }; // TODO: createNodeFromAsset for version >= 2. } else { _Scene.dumpHierarchy = overwriteFunction(_Scene.dumpHierarchy, overwriteDumpHierarchy); _Scene.createNodeFromAsset = overwriteFunction(_Scene.createNodeFromAsset, overwriteCreateNodeFromAsset); } Editor.Gizmo.prototype._registerEvent = overwriteFunction(Editor.Gizmo.prototype._registerEvent, overwriteGizmoRegisterEvent); }