From 88a5c973f35c9f99027b669dbf118e37bc001fde Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Sun, 26 Apr 2026 08:36:50 +0700 Subject: [PATCH] feat(audio): wire door-unlock cue on locked-door count delta MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a reactive effect that fires playDoorUnlock when the count of locked doors decreases — i.e. when player.moveTo opens a door with a matching key. Mirrors the existing keysHeld delta pattern. Closes the door-audio gap documented in plans/260425-1907-tight-12-design-uplift/. --- src/scenes/Game.svelte | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/scenes/Game.svelte b/src/scenes/Game.svelte index 7e19a8b..436cde6 100644 --- a/src/scenes/Game.svelte +++ b/src/scenes/Game.svelte @@ -91,10 +91,11 @@ // HUD reactive values let stonesLeft = $derived((renderVersion, throwSystem ? throwSystem.stonesLeft : 0)); let keysHeld = $derived((renderVersion, player ? player.getKeysHeld() : 0)); + let lockedDoorCount = $derived((renderVersion, grid ? grid.getDoorSnapshot().length : 0)); // Audio delta tracking — previous values to detect changes each render let _prevKeysHeld = $state(0); - let _prevOpenDoors = $state(0); // count of open doors tracked via grid cell flags + let _prevLockedDoorCount = $state(0); let _prevSuspicionTier = $state(0); // highest suspicion tier across guards // Fire key-pickup / door-unlock / suspicion audio on state changes @@ -106,6 +107,14 @@ _prevKeysHeld = keysHeld; }); + // Doors: locked-door count drops when player traverses with matching key + $effect(() => { + if (lockedDoorCount < _prevLockedDoorCount) { + playDoorUnlock(); + } + _prevLockedDoorCount = lockedDoorCount; + }); + // Suspicion guard tier monitoring $effect(() => { if (!guards || guards.length === 0) return;