feat: save games and edit scene darkness

Persist show state to local saves; author map darkness in scene editor with bake-to-scene and help updates.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-10-06 11:41:42 +08:00
parent f6c301a12b
commit 877fbaa8e7
43 changed files with 2086 additions and 72 deletions
+21 -2
View File
@@ -34,6 +34,7 @@ import type {
DisplayInfo,
Scene,
SceneDarknessEvent,
SceneDarknessRevealStroke,
SceneDarknessState,
SceneMarkerEvent,
SceneMarkerState,
@@ -166,6 +167,11 @@ export const ipcChannels = {
materialUpsertProgress: 'project.materialUpsertProgress',
npcUpsertProgress: 'project.npcUpsertProgress',
},
gameSave: {
list: 'gameSave.list',
write: 'gameSave.write',
isDirty: 'gameSave.isDirty',
},
windows: {
openMultiWindow: 'windows.openMultiWindow',
closeMultiWindow: 'windows.closeMultiWindow',
@@ -787,8 +793,20 @@ export type IpcInvokeMap = {
res: { ok: true };
};
[ipcChannels.windows.openMultiWindow]: {
req: { playerIds?: string[] };
res: { ok: true };
req: { playerIds?: string[]; saveId?: string };
res: { ok: true; project: Project | null };
};
[ipcChannels.gameSave.list]: {
req: Record<string, never>;
res: { saves: { id: string; name: string; savedAt: string }[] };
};
[ipcChannels.gameSave.write]: {
req: { id: string | null; name: string };
res: { save: { id: string; name: string; savedAt: string } };
};
[ipcChannels.gameSave.isDirty]: {
req: Record<string, never>;
res: { dirty: boolean };
};
[ipcChannels.windows.closeMultiWindow]: {
req: Record<string, never>;
@@ -1268,6 +1286,7 @@ export type ScenePatch = {
previewVideoAutostart?: boolean;
previewRotationDeg?: 0 | 90 | 180 | 270;
darkenScene?: boolean;
darknessStrokes?: SceneDarknessRevealStroke[];
traps?: SceneTrap[];
tokens?: SceneToken[];
npcTokens?: SceneNpcToken[];