feat(grid): именованные шаблоны сетки кампании

Несколько шаблонов в проекте с ручным сохранением и применением (включает сетку); без автоподстановки.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-09-03 12:04:47 +08:00
parent 278eb78637
commit a4d7ab77e7
14 changed files with 681 additions and 6 deletions
+27
View File
@@ -38,7 +38,9 @@ import type {
SceneMarkerEvent,
SceneMarkerState,
SceneGrid,
SceneGridTemplate,
SceneId,
GridTemplateId,
SceneNpcToken,
NpcMapSpawnDragState,
SceneNpcTokensSessionEvent,
@@ -99,6 +101,10 @@ export const ipcChannels = {
deleteMaterial: 'project.deleteMaterial',
setMaterialsOrder: 'project.setMaterialsOrder',
pickMaterialImage: 'project.pickMaterialImage',
addGridTemplate: 'project.addGridTemplate',
renameGridTemplate: 'project.renameGridTemplate',
deleteGridTemplate: 'project.deleteGridTemplate',
applyGridTemplate: 'project.applyGridTemplate',
upsertNpc: 'project.upsertNpc',
updateNpcFields: 'project.updateNpcFields',
updateNpcPosition: 'project.updateNpcPosition',
@@ -477,6 +483,27 @@ export type IpcInvokeMap = {
| { canceled: true }
| { canceled: false; filePath: string; previewDataUrl: string };
};
[ipcChannels.project.addGridTemplate]: {
req: {
name: string;
type: SceneGridTemplate['type'];
sizeN: number;
color: string;
};
res: { project: Project };
};
[ipcChannels.project.renameGridTemplate]: {
req: { templateId: GridTemplateId; name: string };
res: { project: Project };
};
[ipcChannels.project.deleteGridTemplate]: {
req: { templateId: GridTemplateId };
res: { project: Project };
};
[ipcChannels.project.applyGridTemplate]: {
req: { sceneId: SceneId; templateId: GridTemplateId };
res: { scene: Scene };
};
[ipcChannels.project.upsertNpc]: {
req: {
npcId?: NpcId;