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.
206 lines
6.4 KiB
JavaScript
206 lines
6.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
|
|
// Start Attack
|
|
if(entity in gameData.board && !(entity in gameData.cardStatus.tapped)){
|
|
|
|
// TODO: Make the object within each interationOption a function to return instead of duping
|
|
gameData.interactionOption['Attack'] = {
|
|
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
|
|
}
|
|
}
|
|
// Target Attack Target
|
|
|
|
// 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
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// If selectable, give option to select. If selected, deselect
|
|
if(gameData.cardStatus.targetable[entity] !== undefined){
|
|
|
|
gameData.interactionOption['Target'] = {
|
|
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
|
|
}
|
|
|
|
}
|
|
if(gameData.cardStatus.targetable[entity] !== undefined && gameData.cardStatus.targetted[entity] !== undefined){
|
|
|
|
gameData.interactionOption['Untarget'] = {
|
|
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();
|
|
}
|
|
|
|
// Attack
|
|
// Start Attack (Card that's to attack)
|
|
if(iMenuKey == 'Attack'){
|
|
iMenuStartAttack();
|
|
}
|
|
|
|
// Target
|
|
if(iMenuKey == 'Target'){
|
|
iMenuTarget();
|
|
}
|
|
if(iMenuKey == 'Untarget'){
|
|
iMenuUntarget();
|
|
}
|
|
|
|
}
|
|
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]]);
|
|
}
|
|
function iMenuStartAttack(){
|
|
requestStartAttack(Object.keys(gameData.inInteractionMenu)[0]);
|
|
}
|
|
function iMenuTarget(){
|
|
gameData.cardStatus.targetted[Object.keys(gameData.inInteractionMenu)[0]] = Object.keys(gameData.inInteractionMenu)[0];
|
|
clearInteractionMenu(); // Clears and redraws the board
|
|
console.log('target');
|
|
}
|
|
function iMenuUntarget(){
|
|
delete(gameData.cardStatus.targetted[Object.keys(gameData.inInteractionMenu)[0]]);
|
|
console.log('UNtarget');
|
|
}
|
|
|