232 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
	
		
			8.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
let backgroundMusic;
 | 
						|
 | 
						|
 | 
						|
window.addEventListener('message', function(event) {
 | 
						|
    if (event.data.action == "openMenu") {
 | 
						|
        document.body.style.display = "flex";
 | 
						|
        document.getElementById('menu-container').style.display = "flex";
 | 
						|
        document.getElementById('crafting-container').style.display = "none";
 | 
						|
        createMenu(event.data.items);
 | 
						|
        if (event.data.playMusic) {
 | 
						|
            playBackgroundMusic(event.data.volume);
 | 
						|
        }
 | 
						|
    } else if (event.data.action == "closeMenu") {
 | 
						|
        document.getElementById('menu-container').style.display = "none";
 | 
						|
        stopBackgroundMusic();
 | 
						|
        if (document.getElementById('crafting-container').style.display === "none") {
 | 
						|
            document.body.style.display = "none";
 | 
						|
        }
 | 
						|
    } else if (event.data.action == "openCrafting") {
 | 
						|
        document.body.style.display = "flex";
 | 
						|
        document.getElementById('crafting-container').style.display = "flex";
 | 
						|
        document.getElementById('menu-container').style.display = "none";
 | 
						|
        
 | 
						|
        // Pass menuType to differentiate between food and drink
 | 
						|
        createCraftingMenu(event.data.recipes, event.data.menuType); // added menuType here
 | 
						|
 | 
						|
        if (event.data.playMusic) {
 | 
						|
            playBackgroundMusic(event.data.volume);
 | 
						|
        }
 | 
						|
    } else if (event.data.action == "closeCrafting") {
 | 
						|
        document.getElementById('crafting-container').style.display = "none";
 | 
						|
        stopBackgroundMusic();
 | 
						|
        if (document.getElementById('menu-container').style.display === "none") {
 | 
						|
            document.body.style.display = "none";
 | 
						|
        }
 | 
						|
    } else if (event.data.action == "notify") {
 | 
						|
        showNotification(event.data.message, event.data.type);
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
document.getElementById('close-button').addEventListener('click', function() {
 | 
						|
    fetch(`https://${GetParentResourceName()}/close`, {
 | 
						|
        method: 'POST',
 | 
						|
        headers: {
 | 
						|
            'Content-Type': 'application/json; charset=UTF-8',
 | 
						|
        },
 | 
						|
        body: JSON.stringify({})
 | 
						|
    }).then(resp => resp.json()).then(resp => {
 | 
						|
        if (resp == 'ok') {
 | 
						|
            document.getElementById('menu-container').style.display = "none";
 | 
						|
            stopBackgroundMusic();
 | 
						|
            if (document.getElementById('crafting-container').style.display === "none") {
 | 
						|
                document.body.style.display = "none";
 | 
						|
            }
 | 
						|
        }
 | 
						|
    });
 | 
						|
});
 | 
						|
 | 
						|
document.getElementById('close-crafting-button').addEventListener('click', function() {
 | 
						|
    fetch(`https://${GetParentResourceName()}/closeCrafting`, {
 | 
						|
        method: 'POST',
 | 
						|
        headers: {
 | 
						|
            'Content-Type': 'application/json; charset=UTF-8',
 | 
						|
        },
 | 
						|
        body: JSON.stringify({})
 | 
						|
    }).then(resp => resp.json()).then(resp => {
 | 
						|
        if (resp == 'ok') {
 | 
						|
            document.getElementById('crafting-container').style.display = "none";
 | 
						|
            stopBackgroundMusic();
 | 
						|
            if (document.getElementById('menu-container').style.display === "none") {
 | 
						|
                document.body.style.display = "none";
 | 
						|
            }
 | 
						|
        }
 | 
						|
    });
 | 
						|
});
 | 
						|
 | 
						|
function createMenu(items) {
 | 
						|
    const menu = document.getElementById('menu');
 | 
						|
    menu.innerHTML = '';
 | 
						|
    items.forEach(item => {
 | 
						|
        const menuItem = document.createElement('div');
 | 
						|
        menuItem.className = 'menu-item';
 | 
						|
        menuItem.id = item.id;
 | 
						|
 | 
						|
        const itemImg = document.createElement('img');
 | 
						|
        itemImg.src = item.img;
 | 
						|
        itemImg.alt = item.name;
 | 
						|
 | 
						|
        const itemName = document.createElement('span');
 | 
						|
        itemName.innerText = item.name;
 | 
						|
 | 
						|
        const itemPrice = document.createElement('span');
 | 
						|
        itemPrice.className = 'item-price';
 | 
						|
        itemPrice.innerText = `$${item.price}`;
 | 
						|
 | 
						|
        const quantityInput = document.createElement('input');
 | 
						|
        quantityInput.type = 'number';
 | 
						|
        quantityInput.min = '1';
 | 
						|
        quantityInput.value = '1';
 | 
						|
 | 
						|
        const purchaseButton = document.createElement('button');
 | 
						|
        purchaseButton.innerText = 'Purchase';
 | 
						|
 | 
						|
        purchaseButton.addEventListener('click', function() {
 | 
						|
            const clickSound = new Audio('sounds/click.mp3');
 | 
						|
            clickSound.play();
 | 
						|
 | 
						|
            const quantity = quantityInput.value;
 | 
						|
            console.log(`Purchasing ${quantity} of ${item.id}`);
 | 
						|
            fetch(`https://${GetParentResourceName()}/purchase`, {
 | 
						|
                method: 'POST',
 | 
						|
                headers: {
 | 
						|
                    'Content-Type': 'application/json; charset=UTF-8',
 | 
						|
                },
 | 
						|
                body: JSON.stringify({
 | 
						|
                    id: item.id,
 | 
						|
                    quantity: quantity
 | 
						|
                })
 | 
						|
            }).then(resp => resp.json()).then(resp => {
 | 
						|
                console.log('Purchase response:', resp);
 | 
						|
            });
 | 
						|
        });
 | 
						|
 | 
						|
        menuItem.appendChild(itemImg);
 | 
						|
        menuItem.appendChild(itemName);
 | 
						|
        menuItem.appendChild(itemPrice);
 | 
						|
        menuItem.appendChild(quantityInput);
 | 
						|
        menuItem.appendChild(purchaseButton);
 | 
						|
 | 
						|
        menu.appendChild(menuItem);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function createCraftingMenu(recipes, menuType) {
 | 
						|
    const craftingMenu = document.getElementById('crafting-menu');
 | 
						|
    craftingMenu.innerHTML = '';
 | 
						|
 | 
						|
    recipes.forEach(recipe => {
 | 
						|
        const craftingItem = document.createElement('div');
 | 
						|
        craftingItem.className = 'crafting-item';
 | 
						|
        craftingItem.id = recipe.id;
 | 
						|
 | 
						|
        const itemImg = document.createElement('img');
 | 
						|
        itemImg.src = recipe.img;
 | 
						|
        itemImg.alt = recipe.name;
 | 
						|
 | 
						|
        const itemName = document.createElement('span');
 | 
						|
        itemName.innerText = recipe.name.replace(/_/g, ' ');
 | 
						|
 | 
						|
        const requiredItems = document.createElement('div');
 | 
						|
        requiredItems.className = 'required-items';
 | 
						|
 | 
						|
        recipe.requiredItems.forEach(item => {
 | 
						|
            const itemDiv = document.createElement('div');
 | 
						|
            itemDiv.innerText = `${item.quantity}x ${item.id.replace(/_/g, ' ')}`;
 | 
						|
            requiredItems.appendChild(itemDiv);
 | 
						|
        });
 | 
						|
 | 
						|
        const craftButton = document.createElement('button');
 | 
						|
        craftButton.innerText = 'Create';
 | 
						|
 | 
						|
        craftButton.addEventListener('click', function() {
 | 
						|
            const clickSound = new Audio('sounds/click.mp3');
 | 
						|
            clickSound.play();
 | 
						|
 | 
						|
            console.log(`Crafting ${recipe.id} from ${menuType} menu`);
 | 
						|
 | 
						|
            // Send a different callback based on menuType
 | 
						|
            const callbackAction = menuType === 'drink' ? 'craft-drink' : 'craft';
 | 
						|
            fetch(`https://${GetParentResourceName()}/${callbackAction}`, {
 | 
						|
                method: 'POST',
 | 
						|
                headers: {
 | 
						|
                    'Content-Type': 'application/json; charset=UTF-8',
 | 
						|
                },
 | 
						|
                body: JSON.stringify({
 | 
						|
                    id: recipe.id
 | 
						|
                })
 | 
						|
            }).then(resp => resp.json()).then(resp => {
 | 
						|
                console.log(`${menuType.charAt(0).toUpperCase() + menuType.slice(1)} crafting response:`, resp);
 | 
						|
            });
 | 
						|
        });
 | 
						|
 | 
						|
        craftingItem.appendChild(itemImg);
 | 
						|
        craftingItem.appendChild(itemName);
 | 
						|
        craftingItem.appendChild(requiredItems);
 | 
						|
        craftingItem.appendChild(craftButton);
 | 
						|
 | 
						|
        craftingMenu.appendChild(craftingItem);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
function showNotification(message, type) {
 | 
						|
    const notificationContainer = document.getElementById('notification-container');
 | 
						|
    const notification = document.createElement('div');
 | 
						|
    notification.className = 'notification';
 | 
						|
    notification.classList.add(type);
 | 
						|
    notification.innerText = message;
 | 
						|
 | 
						|
    notificationContainer.appendChild(notification);
 | 
						|
 | 
						|
    setTimeout(() => {
 | 
						|
        notification.remove();
 | 
						|
    }, 4000);
 | 
						|
}
 | 
						|
 | 
						|
function playBackgroundMusic(volume) {
 | 
						|
    backgroundMusic = new Audio('sounds/background.mp3');
 | 
						|
    backgroundMusic.loop = true;
 | 
						|
    backgroundMusic.volume = volume;
 | 
						|
    backgroundMusic.play();
 | 
						|
}
 | 
						|
 | 
						|
function stopBackgroundMusic() {
 | 
						|
    if (backgroundMusic) {
 | 
						|
        backgroundMusic.pause();
 | 
						|
        backgroundMusic.currentTime = 0;
 | 
						|
        backgroundMusic = null;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
document.getElementById('more-info-button').addEventListener('click', function() {
 | 
						|
    document.getElementById('info-container').style.display = 'flex';
 | 
						|
    document.getElementById('crafting-container').style.display = 'none';
 | 
						|
});
 | 
						|
 | 
						|
document.getElementById('close-info-button').addEventListener('click', function() {
 | 
						|
    document.getElementById('info-container').style.display = 'none';
 | 
						|
    document.getElementById('crafting-container').style.display = 'flex';
 | 
						|
});
 |