You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

150 lines
18 KiB

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// @ts-ignore
const package_json_1 = __importDefault(require("../../../../package.json"));
/** 节点树:展开/收起/筛选/选择/高亮。 */
exports.default = {
flatten(nodes, depth, out) {
for (const n of nodes) {
const row = n;
row.depth = depth;
row.hasChildren = !!(n.children && n.children.length);
out.push(row);
if (this.expanded[n.id] && row.hasChildren) {
this.flatten(n.children, depth + 1, out);
}
}
},
toggle(n) {
if (this.expanded[n.id]) {
delete this.expanded[n.id];
}
else {
this.expanded[n.id] = true;
}
},
select(n) {
var _a;
this.selectedId = n.id;
this.loadInspector();
this.sendHighlight(n.id);
// 树内定位:展开祖先路径并滚动到选中行
const path = this.locatePath((_a = this.tree.roots) !== null && _a !== void 0 ? _a : [], n.id);
if (path) {
for (const pid of path) {
this.expanded[pid] = true;
}
}
this.$nextTick(() => {
const el = this.$el ? this.$el.querySelector('[data-id="' + n.id + '"]') : null;
if (el) {
el.scrollIntoView({ block: 'center' });
}
});
},
/** 通知游戏侧高亮/遮罩当前选中节点(关闭或未选中时清除)。 */
sendHighlight(id) {
if (!this.state.running || this.state.clients === 0) {
return;
}
Editor.Message.request(package_json_1.default.name, 'highlight-node', id || '', this.highlightMode).catch(() => {
/* 高亮失败不影响面板 */
});
},
toggleHighlight() {
this.highlightOn = !this.highlightOn;
this.sendHighlight(this.highlightOn ? this.selectedId : '');
},
toggleHighlightMode() {
this.highlightMode = this.highlightMode === 'mask' ? 'highlight' : 'mask';
if (this.highlightOn && this.selectedId) {
this.sendHighlight(this.selectedId);
}
},
locatePath(nodes, id) {
for (const n of nodes) {
if (n.id === id) {
return [];
}
if (n.children && n.children.length) {
const sub = this.locatePath(n.children, id);
if (sub) {
return [n.id, ...sub];
}
}
}
return null;
},
findInTree(nodes, id) {
if (!nodes) {
return false;
}
for (const n of nodes) {
if (n.id === id) {
return true;
}
if (this.findInTree(n.children, id)) {
return true;
}
}
return false;
},
hasChildren(n) {
return !!(n.children && n.children.length);
},
async refreshTree() {
var _a, _b;
if (this.refreshingTree) {
return;
}
this.refreshingTree = true;
try {
const res = await Editor.Message.request(package_json_1.default.name, 'query-command', { cmd: 'query-tree', timeout: 4000, payload: { filter: this.filter.trim() } });
if (res && Array.isArray(res.roots)) {
this.tree = { scene: (_a = res.scene) !== null && _a !== void 0 ? _a : '', roots: res.roots, filter: (_b = res.filter) !== null && _b !== void 0 ? _b : '', lastError: '' };
// 选中节点已不在树中(如被销毁/过滤),清除选中与游戏内高亮
if (this.selectedId && !this.findInTree(this.tree.roots, this.selectedId)) {
this.selectedId = '';
this.inspector = null;
this.sendHighlight('');
}
}
else {
this.tree.lastError = String((res && res.error) || '获取节点树失败');
}
}
catch (err) {
this.tree.lastError = `获取节点树失败: ${String(err)}`;
}
finally {
this.refreshingTree = false;
}
},
countRows() {
var _a;
let n = 0;
const nodes = (_a = this.tree.roots) !== null && _a !== void 0 ? _a : [];
for (const r of nodes) {
n += 1;
if (this.expanded[r.id]) {
n += this.countInChildren(r);
}
}
return n;
},
countInChildren(n) {
var _a;
let n2 = 0;
for (const c of (_a = n.children) !== null && _a !== void 0 ? _a : []) {
n2 += 1;
if (this.expanded[c.id]) {
n2 += this.countInChildren(c);
}
}
return n2;
},
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NvdXJjZS9wYW5lbHMvZGVmYXVsdC9tZXRob2RzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxhQUFhO0FBQ2IsNEVBQW1EO0FBR25ELDBCQUEwQjtBQUMxQixrQkFBZTtJQUNYLE9BQU8sQ0FBWSxLQUFpQixFQUFFLEtBQWEsRUFBRSxHQUFjO1FBQy9ELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBWSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFZLENBQVc7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztJQUNMLENB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Q0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBQ0QsZUFBZSxDQUFZLENBQVc7O1FBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDLElBQUksTUFBQSxDQUFDLENBQUMsUUFBUSxtQ0FBSSxFQUFFLEVBQUUsQ0FBQztZQUMvQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN0QixFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB0eXBlIHsgVHJlZU5vZGUsIFRyZWVSb3cgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKiDoioLngrnmoJHvvJrlsZXlvIAv5pS26LW3L+etm+mAiS/pgInmi6kv6auY5Lqu44CCICovXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZmxhdHRlbih0aGlzOiBhbnksIG5vZGVzOiBUcmVlTm9kZVtdLCBkZXB0aDogbnVtYmVyLCBvdXQ6IFRyZWVSb3dbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG4gYXMgVHJlZVJvdztcbiAgICAgICAgICAgIHJvdy5kZXB0aCA9IGRlcHRoO1xuICAgICAgICAgICAgcm93Lmhhc0NoaWxkcmVuID0gISEobi5jaGlsZHJlbiAmJiBuLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgICAgICBvdXQucHVzaChyb3cpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWRbbi5pZF0gJiYgcm93Lmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuKG4uY2hpbGRyZW4sIGRlcHRoICsgMSwgb3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlKHRoaXM6IGFueSwgbjogVHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWRbbi5pZF0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV4cGFuZGVkW24uaWRdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZFtuLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdCh0aGlzOiBhbnksIG46IFRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IG4uaWQ7XG4gICAgICAgIHRoaXMubG9hZEluc3BlY3RvcigpO1xuICAgICAgICB0aGlzLnNlbmRIaWdobGlnaHQobi5pZCk7XG4gICAgICAgIC8vIOagkeWGheWumuS9je+8muWxleW8gOelluWFiOi3r+W+hOW5tua7muWKqOWIsOmAieS4reihjFxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5sb2NhdGVQYXRoKHRoaXMudHJlZS5yb290cyA/PyBbXSwgbi5pZCk7XG4gICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBpZCBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFtwaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuJGVsID8gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaWQ9XCInICsgbi5pZCArICdcIl0nKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvKiog6YCa55+l5ri45oiP5L6n6auY5LquL+mBrue9qeW9k+WJjemAieS4reiKgueCue+8iOWFs+mXreaIluacqumAieS4reaXtua4hemZpO+8ieOAgiAqL1xuICAgIHNlbmRIaWdobGlnaHQodGhpczogYW55LCBpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5ydW5uaW5nIHx8IHRoaXMuc3RhdGUuY2xpZW50cyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEVkaXRvci5NZXNzYWdlLnJlcXVlc3QocGFja2FnZUpTT04ubmFtZSBhcyBhbnksICdoaWdobGlnaHQtbm9kZScgYXMgYW55LCBpZCB8fCAnJywgdGhpcy5oaWdobGlnaHRNb2RlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAvKiDpq5jkuq7lpLHotKXkuI3lvbHlk43pnaLmnb8gKi9cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB0b2dnbGVIaWdobGlnaHQodGhpczogYW55KSB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0T24gPSAhdGhpcy5oaWdobGlnaHRPbjtcbiAgICAgICAgdGhpcy5zZW5kSGlnaGxpZ2h0KHRoaXMuaGlnaGxpZ2h0T24gPyB0aGlzLnNlbGVjdGVkSWQgOiAnJyk7XG4gICAgfSxcbiAgICB0b2dnbGVIaWdobGlnaHRNb2RlKHRoaXM6IGFueSkge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodE1vZGUgPSB0aGlzLmhpZ2hsaWdodE1vZGUgPT09ICdtYXNrJyA/ICdoaWdobGlnaHQnIDogJ21hc2snO1xuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRPbiAmJiB0aGlzLnNlbGVjdGVkSWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZEhpZ2hsaWdodCh0aGlzLnNlbGVjdGVkSWQpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBsb2NhdGVQYXRoKHRoaXM6IGFueSwgbm9kZXM6IFRyZWVOb2RlW10sIGlkOiBzdHJpbmcpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChuLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5sb2NhdGVQYXRoKG4uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbbi5pZCwgLi4uc3ViXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBmaW5kSW5UcmVlKHRoaXM6IGFueSwgbm9kZXM6IFRyZWVOb2RlW10gfCBudWxsIHwgdW5kZWZpbmVkLCBpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghbm9kZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChuLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZmluZEluVHJlZShuLmNoaWxkcmVuLCBpZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBoYXNDaGlsZHJlbih0aGlzOiBhbnksIG46IFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIShuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICB9LFxuICAgIGFzeW5jIHJlZnJlc2hUcmVlKHRoaXM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoaW5nVHJlZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaGluZ1RyZWUgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcbiAgICAgICAgICAgICAgICBwYWNrYWdlSlNPTi5uYW1lIGFzIGFueSxcbiAgICAgICAgICAgICAgICAncXVlcnktY29tbWFuZCcgYXMgYW55LFxuICAgICAgICAgICAgICAgIHsgY21kOiAncXVlcnktdHJlZScsIHRpbWVvdXQ6IDQwMDAsIHBheWxvYWQ6IHsgZmlsdGVyOiB0aGlzLmZpbHRlci50cmltKCkgfSB9IGFzIGFueSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmVzICYmIEFycmF5LmlzQXJyYXkocmVzLnJvb3RzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZSA9IHsgc2NlbmU6IHJlcy5zY2VuZSA/PyAnJywgcm9vdHM6IHJlcy5yb290cywgZmlsdGVyOiByZXMuZmlsdGVyID8/ICcnLCBsYXN0RXJyb3I6ICcnIH07XG4gICAgICAgICAgICAgICAgLy8g6YCJ5Lit6IqC54K55bey5LiN5Zyo5qCR5Lit77yI5aaC6KKr6ZSA5q+BL+i/h+a7pO+8ie+8jOa4hemZpOmAieS4reS4jua4uOaIj+WGhemrmOS6rlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWQgJiYgIXRoaXMuZmluZEluVHJlZSh0aGlzLnRyZWUucm9vdHMsIHRoaXMuc2VsZWN0ZWRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zcGVjdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kSGlnaGxpZ2h0KCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5sYXN0RXJyb3IgPSBTdHJpbmcoKHJlcyAmJiByZXMuZXJyb3IpIHx8ICfojrflj5boioLngrnmoJHlpLHotKUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUubGFzdEVycm9yID0gYOiOt+WPluiKgueCueagkeWksei0pTogJHtTdHJpbmcoZXJyKX1gO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoaW5nVHJlZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjb3VudFJvd3ModGhpczogYW55KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IG4gPSAwO1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZS5yb290cyA/PyBbXTtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBuICs9IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZFtyLmlkXSkge1xuICAgICAgICAgICAgICAgIG4gKz0gdGhpcy5jb3VudEluQ2hpbGRyZW4ocik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG47XG4gICAgfSxcbiAgICBjb3VudEluQ2hpbGRyZW4odGhpczogYW55LCBuOiBUcmVlTm9kZSk6IG51bWJlciB7XG4gICAgICAgIGxldCBuMiA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBuLmNoaWxkcmVuID8/IFtdKSB7XG4gICAgICAgICAgICBuMiArPSAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWRbYy5pZF0pIHtcbiAgICAgICAgICAgICAgICBuMiArPSB0aGlzLmNvdW50SW5DaGlsZHJlbihjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjI7XG4gICAgfSxcbn07XG4iXX0=