From 98c142bbb1ae416608ea34219d7569402f352d83 Mon Sep 17 00:00:00 2001 From: luoyifan Date: Tue, 22 Jul 2025 20:43:52 +0800 Subject: [PATCH] =?UTF-8?q?AmrMapConvert=20=E4=BB=8E=20AMR=20=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E8=BD=AC=E6=8D=A2=E4=B8=BA=20LCC=20=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/editor/Model2DEditor.vue | 33 +- src/editor/widgets/server/EnvSelectConnect.vue | 3 +- src/utils/AmrMapConvert.md | 930 +++++++++++++++++++++++++ src/utils/AmrMapConvert.ts | 478 ++++++++++++- 4 files changed, 1440 insertions(+), 4 deletions(-) create mode 100644 src/utils/AmrMapConvert.md diff --git a/src/editor/Model2DEditor.vue b/src/editor/Model2DEditor.vue index 2409868..cd10a4f 100644 --- a/src/editor/Model2DEditor.vue +++ b/src/editor/Model2DEditor.vue @@ -306,6 +306,19 @@ export default defineComponent({ taskManager.runTask() }, addAmrMap(file) { + if (!this.viewport) { + system.showErrorDialog('请先加载地图') + return + } + if (!worldModel.state.isOpened) { + system.showErrorDialog('请先打开地图') + return + } + if (worldModel.state.runState.isRunning) { + system.showErrorDialog('请先停止地图运行') + return + } + if (!file) return file = file.raw if (!file) { @@ -327,7 +340,25 @@ export default defineComponent({ system.showErrorDialog('无效的AMR地图文件') return } - AmrMapConvert(this.viewport, jsonData) + const items = AmrMapConvert(jsonData) + if (!items || items.length === 0) { + system.showErrorDialog('AMR地图文件中没有有效的地图数据') + return + } + const viewport = this.viewport + // 清除当前地图 + viewport.stateManager.update(({ deleteEntity }) => { + _.forEach(viewport.entityManager.getAllEntityForGrid(), item => { + deleteEntity(item.id) + }) + }) + // 添加新地图 + viewport.stateManager.update(({ addEntity }) => { + items.forEach(item => { + addEntity(item) + }) + }) + system.showInfoDialog('AMR地图加载完毕') } catch (error) { diff --git a/src/editor/widgets/server/EnvSelectConnect.vue b/src/editor/widgets/server/EnvSelectConnect.vue index 5dfda8c..4483d35 100644 --- a/src/editor/widgets/server/EnvSelectConnect.vue +++ b/src/editor/widgets/server/EnvSelectConnect.vue @@ -3,7 +3,8 @@ :disabled="worldModelState.runState.currentEnvId && worldModelState.runState.isRunning" :model-value="worldModelState.runState.currentEnvId" @change="setEnvId"> - +