"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 = { /** 打开面板时自动确保 WS 服务在运行(插件重载后服务不会自己起来)。 */ async ensureServer() { try { const st = (await Editor.Message.request(package_json_1.default.name, 'get-server-state')); if (!st || !st.running) { await Editor.Message.request(package_json_1.default.name, 'start-server'); } } catch (_a) { /* 忽略:稍后 refresh 会再次尝试 */ } }, async refresh() { var _a, _b, _c, _d, _e, _f; const [state, logs] = await Promise.all([ Editor.Message.request(package_json_1.default.name, 'get-server-state'), Editor.Message.request(package_json_1.default.name, 'query-log'), ]); this.state = state; this.checkPreview(); // 预览服务连通性探测(内部节流) if (logs && logs.length) { for (const item of logs) { // 识别桥接脚本心跳,读取版本号(用于判断游戏侧是否在跑旧脚本) const m = item && typeof item === 'object' ? item : null; if (m && m.evt === 'ping') { if (m.ver && this.bridgeVer !== m.ver) { this.bridgeVer = m.ver; this.logs.push(`[桥接] 游戏侧脚本版本 v${m.ver}`); } // 心跳里的场景名兜底:节点树尚未拉到/为空时先补上 if (m.scene && !this.tree.scene) { this.tree.scene = m.scene; } continue; } if (m && m.evt === 'frame') { continue; // 预览画面帧不进入日志 } // 引擎内部告警噪音(空类型 getComponent),与桥接侧同规则过滤兜底 const txt = m && typeof m.text === 'string' ? m.text : ''; if (/getComponent: Type must be non-nil/.test(txt)) { continue; } this.logs.push(item); } this.logs = this.logs.slice(-200); } // 自动刷新节点树(与日志轮询间隔一致,但用 refreshingTree 防止重入) if (this.state.clients === 0) { this.tree.lastError = '游戏未连接,暂无节点树'; if (this.selectedId) { this.selectedId = ''; this.inspector = null; this.sendHighlight(''); } } else { if (this.autoRefresh) { this.refreshTree(); } // 渲染统计(drawCall / 三角形 / fps) try { const s = (await Editor.Message.request(package_json_1.default.name, 'query-command', { cmd: 'get-stats' })); if (s && typeof s === 'object') { this.stats = { drawCall: (_a = s.drawCall) !== null && _a !== void 0 ? _a : 0, triangles: (_c = (_b = s.triangles) !== null && _b !== void 0 ? _b : s.triangle) !== null && _c !== void 0 ? _c : 0, fps: (_d = s.fps) !== null && _d !== void 0 ? _d : 0, memUsed: (_e = s.memUsed) !== null && _e !== void 0 ? _e : 0, memTotal: (_f = s.memTotal) !== null && _f !== void 0 ? _f : 0, }; } } catch (_g) { /* 忽略统计失败 */ } // 物理调试信息(开关状态 + 刚体/碰撞体数量) try { const ph = (await Editor.Message.request(package_json_1.default.name, 'query-command', { cmd: 'query-physics' })); if (ph && typeof ph === 'object') { this.physicsInfo = ph; this.physicsDebug = !!ph.debugDrawFlags; } } catch (_h) { /* 忽略物理查询失败 */ } } }, async onToggleServer() { if (this.state.running) { await Editor.Message.request(package_json_1.default.name, 'stop-server'); } else { await Editor.Message.request(package_json_1.default.name, 'start-server'); } await this.refresh(); }, async onInstallBridge() { var _a; const res = await Editor.Message.request(package_json_1.default.name, 'install-bridge'); const line = (res === null || res === void 0 ? void 0 : res.ok) ? `[安装] 已安装到 ${res.path}${res.overwrote ? '(已覆盖原有文件)' : ''}(令牌固定 www.yyka.cn)` : `[安装] 失败: ${(_a = res === null || res === void 0 ? void 0 : res.msg) !== null && _a !== void 0 ? _a : '未知错误'}`; this.logs.push(line); }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc291cmNlL3BhbmVscy9kZWZhdWx0L21ldGhvZHMvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsYUFBYTtBQUNiLDRFQUFtRDtBQUduRCxzQ0FBc0M7QUFDdEMsa0JBQWU7SUFDWCx5Q0FBeUM7SUFDekMsS0FBSyxDQUFDLFlBQVk7UUFDZCxJQUFJLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQVcsQ0FBQyxJQUFXLEVBQUUsa0JBQXlCLENBQUMsQ0FBdUIsQ0FBQztZQUNwSCxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFXLENBQUMsSUFBVyxFQUFFLGNBQXFCLENBQUMsQ0FBQztZQUNqRixDQUFDO1FBQ0wsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNMLHlCQUF5QjtRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPOztRQUNULE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFXLENBQUMsSUFBVyxFQUFFLGtCQUF5QixDQUF5QjtZQUNsRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBVyxDQUFDLElBQVcsRUFBRSxXQUFrQixDQUF1QjtTQUM1RixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDdkMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0s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Q0FBQyxlQUFlOztRQUNqQixNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFXLENBQUMsSUFBVyxFQUFFLGdCQUF1QixDQUFDLENBQUM7UUFDM0YsTUFBTSxJQUFJLEdBQUcsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsRUFBRTtZQUNoQixDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0I7WUFDOUUsQ0FBQyxDQUFDLFlBQVksTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsR0FBRyxtQ0FBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTdGF0ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqIOacjeWKoeeUn+WRveWRqOacn++8muWQr+WBnCAvIOeKtuaAgei9ruivoiAvIOaXpeW/l+aLieWPliAvIOiEmuacrOWuieijheOAgiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIC8qKiDmiZPlvIDpnaLmnb/ml7boh6rliqjnoa7kv50gV1Mg5pyN5Yqh5Zyo6L+Q6KGM77yI5o+S5Lu26YeN6L295ZCO5pyN5Yqh5LiN5Lya6Ieq5bex6LW35p2l77yJ44CCICovXG4gICAgYXN5bmMgZW5zdXJlU2VydmVyKHRoaXM6IGFueSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3QgPSAoYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChwYWNrYWdlSlNPTi5uYW1lIGFzIGFueSwgJ2dldC1zZXJ2ZXItc3RhdGUnIGFzIGFueSkpIGFzIFNlcnZlclN0YXRlIHwgbnVsbDtcbiAgICAgICAgICAgIGlmICghc3QgfHwgIXN0LnJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LCAnc3RhcnQtc2VydmVyJyBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIOW/veeVpe+8mueojeWQjiByZWZyZXNoIOS8muWGjeasoeWwneivlSAqL1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhc3luYyByZWZyZXNoKHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCBbc3RhdGUsIGxvZ3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChwYWNrYWdlSlNPTi5uYW1lIGFzIGFueSwgJ2dldC1zZXJ2ZXItc3RhdGUnIGFzIGFueSkgYXMgUHJvbWlzZTxTZXJ2ZXJTdGF0ZT4sXG4gICAgICAgICAgICBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LCAncXVlcnktbG9nJyBhcyBhbnkpIGFzIFByb21pc2U8dW5rbm93bltdPixcbiAgICAgICAgXSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jaGVja1ByZXZpZXcoKTsgLy8g6aKE6KeI5pyN5Yqh6L+e6YCa5oCn5o6i5rWL77yI5YaF6YOo6IqC5rWB77yJXG4gICAgICAgIGlmIChsb2dzICYmIGxvZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbG9ncykge1xuICAgICAgICAgICAgICAgIC8vIOivhuWIq+ahpeaOpeiEmuacrOW/g+i3s++8jOivu+WPlueJiOacrOWPt++8iOeUqOS6juWIpOaWrea4uOaIj+S+p+aYr+WQpuWcqOi3keaXp+iEmuacrO+8iVxuICAgICAgICAgICAgICAgIGNvbnN0IG0gPSBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IChpdGVtIGFzIGFueSkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChtICYmIG0uZXZ0ID09PSAncGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG0udmVyICYmIHRoaXMuYnJpZGdlVmVyICE9PSBtLnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icmlkZ2VWZXIgPSBtLnZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9ncy5wdXNoKGBb5qGl5o6lXSDmuLjmiI/kvqfohJrmnKzniYjmnKwgdiR7bS52ZXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g5b+D6Lez6YeM55qE5Zy65pmv5ZCN5YWc5bqV77ya6IqC54K55qCR5bCa5pyq5ouJ5YiwL+S4uuepuuaXtuWFiOihpeS4ilxuICAgICAgICAgICAgICAgICAgICBpZiAobS5zY2VuZSAmJiAhdGhpcy50cmVlLnNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWUuc2NlbmUgPSBtLnNjZW5lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobSAmJiBtLmV2dCA9PT0gJ2ZyYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8g6aKE6KeI55S76Z2i5bin5LiN6L+b5YWl5pel5b+XXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOW8leaTjuWGhemDqOWRiuitpuWZqumfs++8iOepuuexu+WeiyBnZXRDb21wb25lbnTvvInvvIzkuI7moaXmjqXkvqflkIzop4TliJnov4fmu6TlhZzlupVcbiAgICAgICAgICAgICAgICBjb25zdCB0eHQgPSBtICYmIHR5cGVvZiBtLnRleHQgPT09ICdzdHJpbmcnID8gbS50ZXh0IDogJyc7XG4gICAgICAgICAgICAgICAgaWYgKC9nZXRDb21wb25lbnQ6IFR5cGUgbXVzdCBiZSBub24tbmlsLy50ZXN0KHR4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubG9ncy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2dzID0gdGhpcy5sb2dzLnNsaWNlKC0yMDApO1xuICAgICAgICB9XG4gICAgICAgIC8vIOiHquWKqOWIt+aWsOiKgueCueagke+8iOS4juaXpeW/l+i9ruivoumXtOmalOS4gOiHtO+8jOS9hueUqCByZWZyZXNoaW5nVHJlZSDpmLLmraLph43lhaXvvIlcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuY2xpZW50cyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50cmVlLmxhc3RFcnJvciA9ICfmuLjmiI/mnKrov57mjqXvvIzmmoLml6DoioLngrnmoJEnO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5zcGVjdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRIaWdobGlnaHQoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDmuLLmn5Pnu5/orqHvvIhkcmF3Q2FsbCAvIOS4ieinkuW9oiAvIGZwc++8iVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gKGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICAncXVlcnktY29tbWFuZCcgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICB7IGNtZDogJ2dldC1zdGF0cycgfSBhcyBhbnksXG4gICAgICAgICAgICAgICAgKSkgYXMgYW55O1xuICAgICAgICAgICAgICAgIGlmIChzICYmIHR5cGVvZiBzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0NhbGw6IHMuZHJhd0NhbGwgPz8gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlczogcy50cmlhbmdsZXMgPz8gcy50cmlhbmdsZSA/PyAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnBzOiBzLmZwcyA/PyAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVtVXNlZDogcy5tZW1Vc2VkID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1Ub3RhbDogcy5tZW1Ub3RhbCA/PyAwLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8qIOW/veeVpee7n+iuoeWksei0pSAqL1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g54mp55CG6LCD6K+V5L+h5oGv77yI5byA5YWz54q25oCBICsg5Yia5L2TL+eisOaSnuS9k+aVsOmHj++8iVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaCA9IChhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSlNPTi5uYW1lIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXJ5LWNvbW1hbmQnIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgeyBjbWQ6ICdxdWVyeS1waHlzaWNzJyB9IGFzIGFueSxcbiAgICAgICAgICAgICAgICApKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKHBoICYmIHR5cGVvZiBwaCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waHlzaWNzSW5mbyA9IHBoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBoeXNpY3NEZWJ1ZyA9ICEhcGguZGVidWdEcmF3RmxhZ3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLyog5b+955Wl54mp55CG5p+l6K+i5aSx6LSlICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIG9uVG9nZ2xlU2VydmVyKHRoaXM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5ydW5uaW5nKSB7XG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LCAnc3RvcC1zZXJ2ZXInIGFzIGFueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LCAnc3RhcnQtc2VydmVyJyBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0sXG4gICAgYXN5bmMgb25JbnN0YWxsQnJpZGdlKHRoaXM6IGFueSkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KHBhY2thZ2VKU09OLm5hbWUgYXMgYW55LCAnaW5zdGFsbC1icmlkZ2UnIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IGxpbmUgPSByZXM/Lm9rXG4gICAgICAgICAgICA/IGBb5a6J6KOFXSDlt7Llronoo4XliLAgJHtyZXMucGF0aH0ke3Jlcy5vdmVyd3JvdGUgPyAn77yI5bey6KaG55uW5Y6f5pyJ5paH5Lu277yJJyA6ICcnfe+8iOS7pOeJjOWbuuWumiB3d3cueXlrYS5jbu+8iWBcbiAgICAgICAgICAgIDogYFvlronoo4VdIOWksei0pTogJHtyZXM/Lm1zZyA/PyAn5pyq55+l6ZSZ6K+vJ31gO1xuICAgICAgICB0aGlzLmxvZ3MucHVzaChsaW5lKTtcbiAgICB9LFxufTtcbiJdfQ==