diff --git a/index.html b/index.html
index 9277e97..cfc1628 100644
--- a/index.html
+++ b/index.html
@@ -1406,23 +1406,41 @@
let message = `${data.name}\n\n`;
message += `Observations: ${data.observations}\n\n`;
- // Check for locked state in scenarioData
- if (data.locked === true) {
- console.log('Item is locked:', data);
- handleUnlock(sprite, 'item');
+ if (distanceSq > INTERACTION_RANGE_SQ) {
return;
}
+ }
+
+ const data = sprite.scenarioData;
+ let message = `${data.name}\n\n`;
+ message += `Observations: ${data.observations}\n\n`;
+
+ // Check for locked state in scenarioData
+ if (data.locked === true) {
+ console.log('Item is locked:', data);
+ handleUnlock(sprite, 'item');
+ return;
+ }
+
+ if (data.readable && data.text) {
+ message += `Text: ${data.text}\n\n`;
+ }
+
+ // Only handle contents if they exist and haven't been collected yet
+ if (data.contents && data.contents.length > 0) {
+ message += `You found the following items:\n`;
+ data.contents.forEach(item => {
+ message += `- ${item.name}\n`;
+ });
+ alert(message);
- if (data.readable && data.text) {
- message += `Text: ${data.text}\n\n`;
- }
-
- if (data.contents && !data.locked) {
- // Handle container contents
- message += `You found the following items:\n`;
- data.contents.forEach(item => {
- message += `- ${item.name}\n`;
+ // Add all contents to inventory
+ data.contents.forEach(item => {
+ const contentSprite = createInventorySprite({
+ ...item,
+ type: item.type.toLowerCase()
});
+
alert(message);
// Add all contents to inventory
@@ -1847,22 +1865,36 @@
// Handle item unlocking
if (lockable.scenarioData) {
lockable.scenarioData.locked = false;
+ // Set new state for containers with contents
+ if (lockable.scenarioData.contents) {
+ lockable.scenarioData.isUnlockedButNotCollected = true;
+ }
} else {
lockable.locked = false;
- }
-
- // If the item has contents, make them accessible
- if (lockable.scenarioData?.contents) {
- lockable.scenarioData.contents.forEach(item => {
- const sprite = createInventorySprite(item);
- if (sprite) {
- addToInventory(sprite);
- }
- });
+ if (lockable.contents) {
+ lockable.isUnlockedButNotCollected = true;
+ }
}
}
}
+ function collectContainerContents(container) {
+ if (!container.scenarioData?.contents ||
+ !container.scenarioData?.isUnlockedButNotCollected) {
+ return;
+ }
+
+ container.scenarioData.contents.forEach(item => {
+ const sprite = createInventorySprite(item);
+ if (sprite) {
+ addToInventory(sprite);
+ }
+ });
+
+ container.scenarioData.isUnlockedButNotCollected = false;
+ alert('You collected the items from the container.');
+ }
+
// Helper function to create inventory sprites for unlocked container contents
function createInventorySprite(itemData) {
const scene = game.scene.scenes[0]; // Get the main scene
@@ -2034,10 +2066,11 @@
function getLockRequirementsForItem(item) {
return {
lockType: item.lockType || item.scenarioData?.lockType,
- requires: item.requires || item.scenarioData?.requires
+ requires: item.requires || item.scenarioData?.requires,
+ isUnlockedButNotCollected: false
};
}