function clearInteractionMenu(){ // Clear the existing interaction menu gameData.inInteractionMenu = {}; gameData.interactionOption = {}; drawGameBoard(); } function openInteractionMenu(entity){ console.log('open interaction menu: '+entity); // Only one interaction menu up at once (for now) clearInteractionMenu(); // Add the 'new' entity interactionMenu gameData.inInteractionMenu[entity] = entity; // Add the available interaction(s) with size+positions // TODO: Actually add the corresponding interactions depending on card, and boardElement if(entity in gameData.hand){ gameData.interactionOption['Play to Board'] = { x: gameData.position[entity][0] + gameData.size[entity][0]*.1/2, y: gameData.position[entity][1] + gameData.size[entity][1] - (35 * (Object.entries(gameData.interactionOption).length + 1)), width: gameData.size[entity][0]*.9, height: 30 } gameData.interactionOption['Play as Mana'] = { x: gameData.position[entity][0] + gameData.size[entity][0]*.1/2, y: gameData.position[entity][1] + gameData.size[entity][1] - (35 * (Object.entries(gameData.interactionOption).length + 1)), width: gameData.size[entity][0]*.9, height: 30 } } // Interact // Attack // Tap // TAP (TEMP TODO: remove or add in a statement to hide) if(entity in gameData.cardStatus.tapped){ gameData.interactionOption['Untap'] = { x: gameData.position[entity][0] + gameData.size[entity][0]*.1/2, y: gameData.position[entity][1] + gameData.size[entity][1] - (35 * (Object.entries(gameData.interactionOption).length + 1)), width: gameData.size[entity][0]*.9, height: 30 } }else{ gameData.interactionOption['Tap'] = { x: gameData.position[entity][0] + gameData.size[entity][0]*.1/2, y: gameData.position[entity][1] + gameData.size[entity][1] - (35 * (Object.entries(gameData.interactionOption).length + 1)), width: gameData.size[entity][0]*.9, height: 30 } } let addEffects = true; if(entity in gameData.shield || entity in gameData.mana){ addEffects = false; } // Add interaction options for effects of the card if(addEffects && gameData.cardData[entity] !== undefined && gameData.cardData[entity].effect.length > 0){ for(let i = 0; i < gameData.cardData[entity].effect.length; i++){ // TODO: Check if effect is triggerable from it's location // If not don't add effect trigger. If it is, but criteria not met // add but grey out (need to add this functionality to interaction menu) gameData.interactionOption['Trigger Effect '+(i+1)] = { x: gameData.position[entity][0] + gameData.size[entity][0]*.1/2, y: gameData.position[entity][1] + gameData.size[entity][1] - (35 * (Object.entries(gameData.interactionOption).length + 1)), width: gameData.size[entity][0]*.9, height: 30 } } } drawGameBoard(); } function interactionMenuAvailable(){ if(Object.entries(gameData.inInteractionMenu).length == 0){ return false; } if(Object.entries(gameData.interactionOption).length == 0){ return false; } return true; } function doiMenuPressed(iMenuKey){ console.log(iMenuKey); // TODO: Checks for the actual entities position too if(iMenuKey == 'Play to Board'){ iMenuPlayToBoard(); } if(iMenuKey == 'Play as Mana'){ iMenuPlayAsMana(); } // TODO: Trigger effect if(iMenuKey == 'Tap'){ iMenuTap(); } if(iMenuKey == 'Untap'){ iMenuUntap(); } } function iMenuPlayToBoard(){ requestPlayFromHand(gameData.listPosition[gameData.inInteractionMenu[Object.keys(gameData.inInteractionMenu)[0]]]) } function iMenuPlayAsMana(){ requestPlayManaFromHand(gameData.listPosition[gameData.inInteractionMenu[Object.keys(gameData.inInteractionMenu)[0]]]) } function iMenuTriggerEffect(){ console.log('iMenuTriggerEffect'); } function iMenuTap(){ console.log('iMenuTap'); // This gets the entity ID (the key of entity that's iMenu has been clicked) console.log(Object.keys(gameData.inInteractionMenu)[0]); // TEMP for testing, should select all 'target' cards, and 'accept' then server will tap // them all and return the new tapped list requestTapCard(gameData.inInteractionMenu[Object.keys(gameData.inInteractionMenu)[0]]); } function iMenuUntap(){ // Like above, TEMP for testing TODO: get rid of these and let server do it when things are further on console.log('iMenuTap'); // This gets the entity ID (the key of entity that's iMenu has been clicked) console.log(Object.keys(gameData.inInteractionMenu)[0]); requestUntapCard(gameData.inInteractionMenu[Object.keys(gameData.inInteractionMenu)[0]]); }