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
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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
|