123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- import gsap from 'gsap'
- import '../library/arrayhelpers.js'
- const unknownPotion = {"image": "./images/potion_unknown.png", "title": "Unknown", "properties": []}
- function displaySelectedIngredients(game, stageData) {
- const ingredientSelectedButtons = document.getElementById('brew-selected-container').children
- for(let buttonIndex = 0; buttonIndex < ingredientSelectedButtons.length; buttonIndex++) {
- ingredientSelectedButtons[buttonIndex].classList.add("disabled")
- ingredientSelectedButtons[buttonIndex].getElementsByClassName('disabled-selected-ingredient')[0].style.display = "block"
- ingredientSelectedButtons[buttonIndex].getElementsByClassName('active-selected-ingredient')[0].style.display = "none"
- }
- for(let ingredientIndex = 0; ingredientIndex < stageData.selectedIngredients.length; ingredientIndex++) {
- const ingredientName = stageData.selectedIngredients[ingredientIndex]
- const ingredientData = stageData.ingredientInfo[ingredientName]
- ingredientSelectedButtons[ingredientIndex].classList.remove("disabled")
- ingredientSelectedButtons[ingredientIndex].getElementsByClassName('disabled-selected-ingredient')[0].style.display = "none"
- const selectedIngredient = ingredientSelectedButtons[ingredientIndex].getElementsByClassName('active-selected-ingredient')[0]
- selectedIngredient.style.display = "flex"
- selectedIngredient.getElementsByClassName("selected-ingredient-image")[0].getElementsByTagName('img')[0].src = ingredientData.image
-
- selectedIngredient.getElementsByClassName("selected-ingredient-description")[0].getElementsByTagName('h2')[0].innerText = ingredientData.title
- selectedIngredient.getElementsByClassName("selected-ingredient-description")[0].getElementsByTagName('p')[0].innerText = ingredientData.description
- }
- }
- function displayBrewPotion(game, stageData) {
- const possiblePotions = stageData.potionInfo.filter(potion => stageData.selectedIngredients.equals(potion.ingredients, false))
- let potionToBrew = unknownPotion
- stageData.potionToBrew = null
- if(possiblePotions.length == 1) {
- potionToBrew = possiblePotions[0]
- stageData.potionToBrew = potionToBrew
- }
- document.getElementById('potion-icon').innerHTML = ''
- let potionIcon = document.createElement('img')
- potionIcon.src = potionToBrew.image
- document.getElementById('potion-icon').appendChild(potionIcon)
- const groupedPotionInventory = stageData.potionInventory.groupCount()
- const potionCount = groupedPotionInventory[potionToBrew.name] ?? 0
- const potionCountElement = document.getElementById('potion-icon-container').getElementsByClassName("potion-inventory-count")[0]
- if(potionCount == 0) {
- potionCountElement.style.display = "none"
- } else {
- potionCountElement.style.display = "block"
- potionCountElement.innerHTML = potionCount
- }
- document.getElementById('potion-name').innerText = potionToBrew.title
- document.getElementById('potion-properties-list').innerHTML = ''
- potionToBrew.properties.forEach(property => {
- let propElement = document.createElement('li')
- propElement.innerText = property
- document.getElementById('potion-properties-list').appendChild(propElement)
- })
-
- }
- export function updateIngredients(game, stageData) {
- const container = document.getElementById("brew-ingredients-container")
- container.innerHTML = ''
- const groupedIngredientInventory = stageData.ingredientInventory.groupCount()
- for(let ingredientName in stageData.ingredientInfo) {
- const info = stageData.ingredientInfo[ingredientName]
-
- const ingredientContainer = document.createElement('div')
- ingredientContainer.className = 'ingredient-container'
- ingredientContainer.setAttribute('data-ingredient', ingredientName)
- const ingredientImage = document.createElement('img')
- ingredientImage.src = info.image
- ingredientImage.title = info.title
- const ingredientCount = document.createElement('div')
- ingredientCount.className = 'ingredient-inventory-brew-count'
- ingredientCount.innerHTML = groupedIngredientInventory[ingredientName] ?? 0
- ingredientContainer.appendChild(ingredientImage)
- ingredientContainer.appendChild(ingredientCount)
- ingredientContainer.addEventListener('click', (event) => {
- event.stopPropagation()
- if(stageData.selectedIngredients.length < 2) {
- stageData.soundEffects['audio/click1.ogg'].play()
- const ingredientName = ingredientContainer.getAttribute('data-ingredient')
- stageData.selectedIngredients.push(ingredientName)
- displaySelectedIngredients(game, stageData)
- }
- displayBrewPotion(game, stageData)
- })
- container.appendChild(ingredientContainer)
- }
- }
- export async function brewUI(game, stageData) {
- document.getElementById("brew-container").addEventListener('click', () => {
- closeBrewUI(game, stageData)
- })
- document.getElementById('brew-right-side').addEventListener('click', (event) => {
- event.stopPropagation()
- })
- updateIngredients(game, stageData)
-
- const ingredientSelectedButtons = document.getElementById('brew-selected-container').children
- for(let buttonIndex = 0; buttonIndex < ingredientSelectedButtons.length; buttonIndex++) {
- const button = ingredientSelectedButtons[buttonIndex]
- button.addEventListener("click", (event) => {
- event.stopPropagation()
- if(button.classList.contains('disabled')) {
- return
- }
- stageData.soundEffects['audio/click1.ogg'].play()
- stageData.selectedIngredients.splice(buttonIndex, 1)
- displaySelectedIngredients(game, stageData)
- displayBrewPotion(game, stageData)
- })
- }
- document.getElementById("start-brew").addEventListener('click', () => {
- stageData.beginBrew()
- })
-
- }
- export async function openBrewUI(game,stageData) {
- if(stageData.cauldron.brewMenuOpen) {
- return
- }
-
-
- const brewContainer = document.getElementById("brew-container")
- brewContainer.style.display = "block"
- if(game.canvas.clientWidth >= 1024) {
- let currentPosition = stageData.cameraPositions[stageData.currentRoom-1]
- gsap.to(game.lookAtFocus, {x: currentPosition.focus.x + 2.5, duration: 0.8})
- gsap.to(game.camera.position, {x: currentPosition.camera.x + 2.5, duration: 0.8})
- } else {
- let currentPosition = stageData.cameraPositions[stageData.currentRoom-1]
- gsap.to(game.lookAtFocus, {y: currentPosition.focus.y - 1.5, duration: 0.8})
- gsap.to(game.camera.position, {y: currentPosition.camera.y - 1.5, duration: 0.8})
- }
- updateIngredients(game, stageData)
- displaySelectedIngredients(game, stageData)
- displayBrewPotion(game, stageData)
- stageData.soundEffects['audio/drawKnife2.ogg'].play()
- const brewRightSide = document.getElementById("brew-right-side")
- gsap.to(brewRightSide, {x: 0, duration: 0.8, onComplete: () => {
- stageData.cauldron.brewMenuOpen = true
- }})
- }
- export async function closeBrewUI(game, stageData) {
- if(!stageData.cauldron.brewMenuOpen) {
- return
- }
- stageData.cauldron.brewMenuOpen = false
- const brewContainer = document.getElementById("brew-container")
-
- if(game.canvas.clientWidth >= 1024) {
- let currentPosition = stageData.cameraPositions[stageData.currentRoom-1]
- gsap.to(game.lookAtFocus, {x: currentPosition.focus.x, duration: 0.8})
- gsap.to(game.camera.position, {x: currentPosition.camera.x, duration: 0.8})
- } else {
- let currentPosition = stageData.cameraPositions[stageData.currentRoom-1]
- gsap.to(game.lookAtFocus, {y: currentPosition.focus.y, duration: 0.8})
- gsap.to(game.camera.position, {y: currentPosition.camera.y, duration: 0.8})
- }
- stageData.soundEffects['audio/drawKnife2.ogg'].play()
- const brewRightSide = document.getElementById("brew-right-side")
- gsap.to(brewRightSide, {x: 1024, duration: 0.8, onComplete: () => {
- brewContainer.style.display = "none"
-
- }})
- }
|