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.
 
 
 
 

117 lines
17 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 = {
/** 打开面板时自动确保 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==