no message

This commit is contained in:
2026-07-06 09:43:46 +08:00
parent 4564ac5f47
commit ff1542c24f
22 changed files with 8771 additions and 309 deletions

View File

@@ -70,8 +70,7 @@ exports.template = `
<ui-button id="btn-next">下一关</ui-button>
<ui-button id="btn-load">加载</ui-button>
<ui-button id="btn-new">新建</ui-button>
<ui-button id="btn-save" type="primary">保存 JSON</ui-button>
<ui-button id="btn-bake">烘焙预制体</ui-button>
<ui-button id="btn-save" type="primary">保存地图</ui-button>
<ui-button id="btn-import-prefab">从预制体同步</ui-button>
<ui-button id="btn-open-prefab">打开 Level 预制体</ui-button>
<ui-button id="btn-scene-snap">场景选中吸附</ui-button>
@@ -118,7 +117,7 @@ exports.template = `
<div class="lme-canvas-wrap">
<canvas id="lme-canvas" width="720" height="520"></canvas>
</div>
<div class="lme-status" id="status">地图/出生点编辑 · 自动保存 JSON 并烘焙 · 60×60 网格 · 滚轮缩放 · 长按右键拖动</div>
<div class="lme-status" id="status">地图/出生点编辑 · 绘制后自动暂存 · 点「保存地图」写入 JSON 并烘焙预制体 · 滚轮缩放 · 长按右键拖动</div>
</div>
<div class="lme-palette">
<h4 id="palette-title">平铺调色板</h4>
@@ -135,7 +134,6 @@ exports.$ = {
btnLoad: '#btn-load',
btnNew: '#btn-new',
btnSave: '#btn-save',
btnBake: '#btn-bake',
btnImportPrefab: '#btn-import-prefab',
btnOpenPrefab: '#btn-open-prefab',
btnSceneSnap: '#btn-scene-snap',
@@ -561,11 +559,12 @@ exports.ready = function () {
persistMapChanges({ quiet: true, skipBake: true });
try {
bakeIgnore.markBakePending(state.levelId);
const outDir = prefabSync.resolvePrefabDirRel(projectPath());
execSync(
`python3 tools/bake_cocos_level_prefabs.py --db ${DB_REL} --out-dir assets/resources/level-prefabs --level-id ${state.levelId} --theme ${state.theme}`,
`python3 tools/bake_cocos_level_prefabs.py --db ${DB_REL} --out-dir ${outDir} --level-id ${state.levelId} --theme ${state.theme}`,
{ cwd: projectPath(), stdio: 'pipe' },
);
const prefabUrl = `db://assets/resources/level-prefabs/Level${state.levelId}.prefab`;
const prefabUrl = prefabSync.prefabDbUrl(state.levelId, projectPath());
try {
Editor.Message.request('asset-db', 'refresh-asset', prefabUrl);
} catch (e) {
@@ -574,7 +573,8 @@ exports.ready = function () {
if (options.auto) {
setStatus(`关卡 ${state.levelId} 已自动保存并烘焙 → Level${state.levelId}.prefab`);
} else {
setStatus(`关卡 ${state.levelId} 已烘焙(主题 ${state.theme})→ level-prefabs/Level${state.levelId}.prefab`);
const outDir = prefabSync.resolvePrefabDirRel(projectPath());
setStatus(`关卡 ${state.levelId} 已保存地图 → JSON + ${outDir}/Level${state.levelId}.prefab`);
}
console.log(`[level-map-editor] baked Level${state.levelId}.prefab`);
} catch (e) {
@@ -587,25 +587,25 @@ exports.ready = function () {
}
};
const saveLevel = () => {
/** 保存 JSON + 烘焙预制体(运行时分包 bundle-level-prefabs */
const saveMapLevel = () => {
cancelAutoBake();
persistMapChanges({ quiet: true, skipBake: true });
setStatus(`已保存关卡 ${state.levelId}(主题 ${state.theme}`);
if (!state.config || !state.db) {
setStatus('请先加载或新建关卡');
return;
}
if (!persistMapChanges({ quiet: true, skipBake: true })) return;
runBake.call(this, { auto: false });
};
/** 每次改地图立即写 JSON */
/** 绘制时暂存 JSON延迟自动烘焙 */
const scheduleMapPersist = () => {
persistMapChanges();
};
const bakeLevel = () => {
cancelAutoBake();
runBake.call(this, { auto: false });
};
const openLevelPrefab = async () => {
const id = state.levelId;
const uuid = await Editor.Message.request('asset-db', 'query-uuid', `db://assets/resources/level-prefabs/Level${id}.prefab`);
const uuid = await Editor.Message.request('asset-db', 'query-uuid', prefabSync.prefabDbUrl(id, projectPath()));
if (uuid) {
await Editor.Message.request('asset-db', 'open-asset', uuid);
setStatus(`已打开 Level${id}.prefabGround / Border 子节点,贴图主题 ${state.theme}`);
@@ -952,8 +952,7 @@ exports.ready = function () {
}
});
bindOnce(this.$.btnNew, 'click', () => createNewLevel.call(this));
bindOnce(this.$.btnSave, 'click', () => saveLevel.call(this));
bindOnce(this.$.btnBake, 'click', () => bakeLevel.call(this));
bindOnce(this.$.btnSave, 'click', () => saveMapLevel.call(this));
bindOnce(this.$.btnImportPrefab, 'click', () => importFromPrefab.call(this));
bindOnce(this.$.btnOpenPrefab, 'click', () => openLevelPrefab.call(this));
@@ -991,7 +990,7 @@ exports.ready = function () {
const prefabUuid = await Editor.Message.request(
'asset-db',
'query-uuid',
`db://assets/resources/level-prefabs/Level${state.levelId}.prefab`,
prefabSync.prefabDbUrl(state.levelId, projectPath()),
);
if (prefabUuid) uuids = [prefabUuid];
}