no message
This commit is contained in:
@@ -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}.prefab(Ground / 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];
|
||||
}
|
||||
|
||||
21
extensions/level-map-editor/dist/prefab-sync.js
vendored
21
extensions/level-map-editor/dist/prefab-sync.js
vendored
@@ -6,7 +6,10 @@ const levelIdUtil = require('./level-id');
|
||||
|
||||
const LEVEL_MAP_TYPE = 'd4e5fanuMlNDh8qO0xdbn+K';
|
||||
const DB_REL = 'assets/level-data/levels-database.json';
|
||||
const PREFAB_DIR_REL = 'assets/resources/level-prefabs';
|
||||
const PREFAB_BUNDLE_REL = 'assets/bundle-level-prefabs/level-prefabs';
|
||||
const PREFAB_LEGACY_REL = 'assets/resources/level-prefabs';
|
||||
/** @deprecated 使用 resolvePrefabDirRel */
|
||||
const PREFAB_DIR_REL = PREFAB_LEGACY_REL;
|
||||
const PREFAB_NAME_RE = /^Level(\d+)\.prefab$/i;
|
||||
const TILE_NODE_RE = /^([gb])_(-?\d+)_(-?\d+)$/;
|
||||
|
||||
@@ -20,8 +23,18 @@ function dbPath(projectPath) {
|
||||
return path.join(projectRoot(projectPath), DB_REL);
|
||||
}
|
||||
|
||||
function resolvePrefabDirRel(projectPath) {
|
||||
const root = projectRoot(projectPath);
|
||||
if (fs.existsSync(path.join(root, PREFAB_BUNDLE_REL))) return PREFAB_BUNDLE_REL;
|
||||
return PREFAB_LEGACY_REL;
|
||||
}
|
||||
|
||||
function prefabDir(projectPath) {
|
||||
return path.join(projectRoot(projectPath), PREFAB_DIR_REL);
|
||||
return path.join(projectRoot(projectPath), resolvePrefabDirRel(projectPath));
|
||||
}
|
||||
|
||||
function prefabDbUrl(levelId, projectPath) {
|
||||
return `db://${resolvePrefabDirRel(projectPath)}/Level${levelId}.prefab`;
|
||||
}
|
||||
|
||||
function prefabPath(levelId, projectPath) {
|
||||
@@ -258,6 +271,10 @@ function extractLevelIdFromFilename(name) {
|
||||
module.exports = {
|
||||
DB_REL,
|
||||
PREFAB_DIR_REL,
|
||||
PREFAB_BUNDLE_REL,
|
||||
PREFAB_LEGACY_REL,
|
||||
resolvePrefabDirRel,
|
||||
prefabDbUrl,
|
||||
prefabPath,
|
||||
dbPath,
|
||||
parsePrefabFile,
|
||||
|
||||
Reference in New Issue
Block a user