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

2 weeks ago
"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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