From 0aab6a7da66a900219f09dfb524872bac3dfcf02 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 1 Apr 2026 04:19:31 +0200 Subject: [PATCH] Add function to sync trigger volume flags after mutation --- src/app/App.tsx | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/app/App.tsx b/src/app/App.tsx index 87d1b34b..3e386d8b 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -1550,6 +1550,36 @@ export function App({ store, initialStatusMessage }: AppProps) { setStatusMessage(successMessage); }; + // After any link mutation on a trigger volume, re-derive and persist the + // triggerOnEnter/triggerOnExit flags so the document stays consistent. + const syncTriggerVolumeFlags = (sourceEntityId: string, linksAfterMutation: InteractionLink[]) => { + const entity = editorState.document.entities[sourceEntityId]; + if (entity?.kind !== "triggerVolume") return; + + const triggerOnEnter = linksAfterMutation.some((l) => l.trigger === "enter"); + const triggerOnExit = linksAfterMutation.some((l) => l.trigger === "exit"); + + if (entity.triggerOnEnter === triggerOnEnter && entity.triggerOnExit === triggerOnExit) return; + + try { + const nextEntity = createTriggerVolumeEntity({ + id: entity.id, + position: entity.position, + size: entity.size, + triggerOnEnter, + triggerOnExit + }); + store.executeCommand( + createUpsertEntityCommand({ + entity: nextEntity, + label: "Sync trigger volume flags" + }) + ); + } catch { + // Non-critical — runtime already derives flags from links directly + } + }; + const getInteractionSourceEntityForLink = (link: InteractionLink): InteractionSourceEntity | null => { const sourceEntity = editorState.document.entities[link.sourceEntityId]; return sourceEntity?.kind === "triggerVolume" || sourceEntity?.kind === "interactable" ? sourceEntity : null;