diff --git a/public/break_escape/js/core/game.js b/public/break_escape/js/core/game.js index 9a955e0..4b3afd5 100644 --- a/public/break_escape/js/core/game.js +++ b/public/break_escape/js/core/game.js @@ -1,8 +1,8 @@ -import { initializeRooms, calculateWorldBounds, calculateRoomPositions, createRoom, revealRoom, updatePlayerRoom, rooms } from './rooms.js?v=16'; +import { initializeRooms, calculateWorldBounds, calculateRoomPositions, createRoom, revealRoom, updatePlayerRoom, rooms } from './rooms.js?v=17'; import { createPlayer, updatePlayerMovement, movePlayerToPoint, facePlayerToward, player } from './player.js?v=8'; import { initializePathfinder } from './pathfinding.js?v=7'; import { initializeInventory, processInitialInventoryItems } from '../systems/inventory.js?v=9'; -import { checkObjectInteractions, setGameInstance, isObjectInInteractionRange } from '../systems/interactions.js?v=30'; +import { checkObjectInteractions, setGameInstance, isObjectInInteractionRange } from '../systems/interactions.js?v=31'; import { introduceScenario } from '../utils/helpers.js?v=19'; import '../minigames/index.js?v=2'; import SoundManager from '../systems/sound-manager.js?v=1'; diff --git a/public/break_escape/js/core/pathfinding.js b/public/break_escape/js/core/pathfinding.js index 7f06ee2..c804c5b 100644 --- a/public/break_escape/js/core/pathfinding.js +++ b/public/break_escape/js/core/pathfinding.js @@ -3,7 +3,7 @@ // Pathfinding system using EasyStar.js import { GRID_SIZE, TILE_SIZE } from '../utils/constants.js?v=8'; -import { rooms } from './rooms.js?v=16'; +import { rooms } from './rooms.js?v=17'; let pathfinder = null; let gameRef = null; diff --git a/public/break_escape/js/core/rooms.js b/public/break_escape/js/core/rooms.js index 94f8eef..c6c0838 100644 --- a/public/break_escape/js/core/rooms.js +++ b/public/break_escape/js/core/rooms.js @@ -56,7 +56,7 @@ import { } from '../utils/constants.js?v=8'; // Import the new system modules -import { initializeDoors, createDoorSpritesForRoom, checkDoorTransitions, updateDoorSpritesVisibility } from '../systems/doors.js'; +import { initializeDoors, createDoorSpritesForRoom, checkDoorTransitions, updateDoorSpritesVisibility } from '../systems/doors.js?v=2'; import { initializeObjectPhysics, setupChairCollisions, setupExistingChairsWithNewRoom, calculateChairSpinDirection, updateSwivelChairRotation, updateSpriteDepth } from '../systems/object-physics.js'; import { initializePlayerEffects, createPlayerBumpEffect, createPlantBumpEffect } from '../systems/player-effects.js'; import { initializeCollision, createWallCollisionBoxes, removeTilesUnderDoor, removeWallTilesForDoorInRoom, removeWallTilesAtWorldPosition } from '../systems/collision.js'; diff --git a/public/break_escape/js/systems/collision.js b/public/break_escape/js/systems/collision.js index 577f240..20260e6 100644 --- a/public/break_escape/js/systems/collision.js +++ b/public/break_escape/js/systems/collision.js @@ -7,7 +7,7 @@ */ import { TILE_SIZE } from '../utils/constants.js'; -import { getOppositeDirection, calculateDoorPositionsForRoom } from './doors.js'; +import { getOppositeDirection, calculateDoorPositionsForRoom } from './doors.js?v=2'; let gameRef = null; let rooms = null; diff --git a/public/break_escape/js/systems/doors.js b/public/break_escape/js/systems/doors.js index 60688f5..c39b4cf 100644 --- a/public/break_escape/js/systems/doors.js +++ b/public/break_escape/js/systems/doors.js @@ -688,6 +688,15 @@ function openDoor(doorSprite) { delete doorSprite.interactionIndicator; } + // Clean up proximity ghost (created by interaction system when door was in range) + if (doorSprite.proximityGhost) { + if (doorSprite.scene && doorSprite.scene.tweens) { + doorSprite.scene.tweens.killTweensOf(doorSprite.proximityGhost); + } + doorSprite.proximityGhost.destroy(); + delete doorSprite.proximityGhost; + } + // Remove the door sprite doorSprite.destroy(); if (doorSprite.interactionZone) { @@ -800,6 +809,28 @@ function removeMatchingDoorSprite(roomId, fromRoomId, direction, doorWorldX, doo if (matchingDoorSprite) { console.log(`Found matching door sprite in room ${roomId} at (${matchingDoorSprite.x}, ${matchingDoorSprite.y}), removing it`); + + // Clean up lock icon indicator before destroying + if (matchingDoorSprite.interactionIndicator) { + if (matchingDoorSprite.interactionIndicator.anims?.isPlaying) { + matchingDoorSprite.interactionIndicator.anims.stop(); + } + if (matchingDoorSprite.scene?.tweens) { + matchingDoorSprite.scene.tweens.killTweensOf(matchingDoorSprite.interactionIndicator); + } + matchingDoorSprite.interactionIndicator.destroy(); + delete matchingDoorSprite.interactionIndicator; + } + + // Clean up proximity ghost if present + if (matchingDoorSprite.proximityGhost) { + if (matchingDoorSprite.scene?.tweens) { + matchingDoorSprite.scene.tweens.killTweensOf(matchingDoorSprite.proximityGhost); + } + matchingDoorSprite.proximityGhost.destroy(); + delete matchingDoorSprite.proximityGhost; + } + matchingDoorSprite.destroy(); if (matchingDoorSprite.interactionZone) { matchingDoorSprite.interactionZone.destroy(); diff --git a/public/break_escape/js/systems/interactions.js b/public/break_escape/js/systems/interactions.js index 9be73a7..abe147e 100644 --- a/public/break_escape/js/systems/interactions.js +++ b/public/break_escape/js/systems/interactions.js @@ -1,8 +1,8 @@ // Object interaction system import { INTERACTION_RANGE, INTERACTION_RANGE_SQ, INTERACTION_CHECK_INTERVAL } from '../utils/constants.js?v=8'; -import { rooms } from '../core/rooms.js?v=16'; +import { rooms } from '../core/rooms.js?v=17'; import { handleUnlock } from './unlock-system.js'; -import { handleDoorInteraction } from './doors.js'; +import { handleDoorInteraction } from './doors.js?v=2'; import { collectFingerprint, handleBiometricScan } from './biometrics.js'; import { addToInventory, removeFromInventory, createItemIdentifier } from './inventory.js?v=9'; import { playUISound, playGameSound } from './ui-sounds.js?v=1'; @@ -413,6 +413,7 @@ function addProximityGhost(obj) { if (!obj.scene || !obj.scene.add) return; if (obj.proximityGhost) return; // Already exists if (obj._isNPC) return; // NPCs use the talk-icon system instead + if (obj.doorProperties) return; // Doors are always visible; their lock icon is the interactionIndicator try { const textureKey = obj.texture && obj.texture.key; diff --git a/public/break_escape/js/systems/unlock-system.js b/public/break_escape/js/systems/unlock-system.js index f593f27..8b66dcf 100644 --- a/public/break_escape/js/systems/unlock-system.js +++ b/public/break_escape/js/systems/unlock-system.js @@ -9,7 +9,7 @@ import { DOOR_ALIGN_OVERLAP } from '../utils/constants.js'; import { rooms } from '../core/rooms.js'; -import { unlockDoor } from './doors.js'; +import { unlockDoor } from './doors.js?v=2'; import { startLockpickingMinigame, startKeySelectionMinigame, startPinMinigame, startPasswordMinigame } from './minigame-starters.js'; import { playUISound } from './ui-sounds.js?v=1';