You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cardGame/public/js/canvas/interactionMenu.js

147 lines
4.4 KiB
JavaScript

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]]);
}