diff --git a/js/core/rooms.js b/js/core/rooms.js index 246bf26..b33ec0b 100644 --- a/js/core/rooms.js +++ b/js/core/rooms.js @@ -2671,9 +2671,15 @@ function createNPCSpritesForRoom(roomId, roomData) { if (window.player) { NPCSpriteManager.createNPCCollision(gameRef, sprite, window.player); } - - // Set up wall and chair collisions (same as player gets) - NPCSpriteManager.setupNPCEnvironmentCollisions(gameRef, sprite, roomId); + + // Set up environment collisions (walls, tables, chairs) after a delay + // This ensures table/chair physics bodies are fully initialized first + // (tables use delayedCall for physics body creation) + gameRef.time.delayedCall(10, () => { + if (sprite && sprite.body && !sprite.destroyed) { + NPCSpriteManager.setupNPCEnvironmentCollisions(gameRef, sprite, roomId); + } + }); // Set up NPC-to-NPC collisions with all other NPCs in this room NPCSpriteManager.setupNPCToNPCCollisions(gameRef, sprite, roomId, roomData.npcSprites); diff --git a/js/systems/npc-sprites.js b/js/systems/npc-sprites.js index a31c58d..257fca8 100644 --- a/js/systems/npc-sprites.js +++ b/js/systems/npc-sprites.js @@ -526,17 +526,20 @@ export function setupNPCTableCollisions(scene, npcSprite, roomId) { // Collision with all table objects in the room Object.values(room.objects).forEach(obj => { - // Tables are identified by their object name or by checking if they're static bodies - // Look for objects that came from the 'table' type in processObject - if (obj && obj.body && obj.body.static) { - // Check if this looks like a table (has scenarioData.type === 'table' or name includes 'desk') - const isTable = (obj.scenarioData && obj.scenarioData.type === 'table') || - (obj.name && obj.name.toLowerCase().includes('desk')); - - if (isTable) { - game.physics.add.collider(npcSprite, obj); - tablesAdded++; - } + // Tables are identified primarily by scenarioData.type === 'table' + // Also check for objects with 'desk' or 'table' in their name as fallback + if (!obj || !obj.body) { + return; // Skip objects without physics bodies + } + + const isTable = (obj.scenarioData && obj.scenarioData.type === 'table') || + (obj.name && (obj.name.toLowerCase().includes('desk') || + obj.name.toLowerCase().includes('table'))); + + if (isTable) { + game.physics.add.collider(npcSprite, obj); + tablesAdded++; + console.log(` Added table collision: ${npcSprite.npcId} <-> ${obj.name || 'table'}`); } });