First flip management

This commit is contained in:
2021-01-24 23:18:50 +01:00
parent 8cd9d638b9
commit 05a2b02482
8 changed files with 252 additions and 38 deletions

View File

@ -71,24 +71,145 @@ export class SoSCardDeck {
}
/* -------------------------------------------- */
doFlipFromDeck( ) {
getCardSuit( cardName ) {
if ( cardName[0] == 'c') return 'club';
if ( cardName[0] == 'd') return 'diamond';
if ( cardName[0] == 'h') return 'hearth';
if ( cardName[0] == 's') return 'spade';
if ( cardName[0] == 'j') return 'joker';
}
/* -------------------------------------------- */
drawFromDeck() {
let card = this.data.deck.pop();
this.data.discard.push( card );
console.log("CARD IS : ", card, this.data.deck.length );
this.data.discard.push( card );
return card;
}
/* -------------------------------------------- */
getFromEdge( cardName) {
let card = this.data.cardEdge.find( card => card.cardName == cardName); // Get the card
let newEdge = this.data.cardEdge.filter(card => card.cardName != cardName); // Remove used card
this.data.cardEdge = newEdge;
return card;
}
/* -------------------------------------------- */
getCardValue( cardName ) {
console.log(cardName);
let parsed = cardName.match( /\w(\d\d)/i );
let value = Number( parsed[1] );
if ( value > 10 ) value -= 10;
return value;
}
/* -------------------------------------------- */
isCardFace(cardName) {
let parsed = cardName.match( /\w(\d\d)/i );
let value = Number( parsed[1] );
return (value > 10) ? true : false;
}
/* -------------------------------------------- */
async doFlipFromDeckOrEdge( flipData ) {
flipData.cardSlot = [ { total: 0}];
flipData.isTrump = false;
flipData.isJoker = false;
flipData.fullTrump = false;
// Select card origin
if ( flipData.cardOrigin == "Deck") {
flipData.cardSlot[0].card1 = this.drawFromDeck();
} else {
flipData.cardSlot[0].card1 = this.getFromEdge( flipData.edgeName );
}
let cardsuit = this.getCardSuit(flipData.cardSlot[0].card1.cardName);
if ( cardsuit == 'joker' ) {
console.log("THIS IS A JOKER !!!!");
flipData.cardSlot[0].total = 0;
flipData.cardSlot[0].isJoker = true;
flipData.cardSlot[0].card1Path = `systems/foundryvtt-shadows-over-sol/img/cards/${flipData.cardSlot[0].card1.cardName}.webp`;
} else {
console.log("First card : ", flipData.cardSlot[0].card1);
// Face check for first card
flipData.cardSlot[0].value1 = this.getCardValue(flipData.cardSlot[0].card1.cardName);
flipData.cardSlot[0].isFace1 = this.isCardFace(flipData.cardSlot[0].card1.cardName);
flipData.cardSlot[0].card1Path = `systems/foundryvtt-shadows-over-sol/img/cards/${flipData.cardSlot[0].card1.cardName}.webp`;
flipData.cardSlot[0].card2 = false;
if ( flipData.cardSlot[0].isFace1 ) {
flipData.cardSlot[0].card2 = this.drawFromDeck();
flipData.cardSlot[0].value2 = this.getCardValue(flipData.cardSlot[0].card2.cardName);
flipData.cardSlot[0].isFace2 = this.isCardFace(flipData.cardSlot[0].card2.cardName);
flipData.cardSlot[0].card2Path = `systems/foundryvtt-shadows-over-sol/img/cards/${flipData.cardSlot[0].card2.cardName}.webp`;
} else {
flipData.cardSlot[0].value2 = 0; // Safe init
}
flipData.cardSlot[0].total = flipData.cardSlot[0].value1 + flipData.cardSlot[0].value2;
// Trump check
flipData.cardSlot[0].cardsuit = cardsuit;
if ( cardsuit == flipData.stat.cardsuit ) {
// This is a trump !
flipData.cardSlot[1] = { total: 0 };
flipData.isTrump = true;
flipData.cardSlot[1].card1 = this.drawFromDeck();
flipData.cardSlot[1].card1Path = `systems/foundryvtt-shadows-over-sol/img/cards/${flipData.cardSlot[1].card1.cardName}.webp`;
flipData.cardSlot[1].cardsuit = this.getCardSuit(flipData.cardSlot[1].card1.cardName);
flipData.cardSlot[1].value1 = this.getCardValue(flipData.cardSlot[1].card1.cardName);
flipData.cardSlot[1].isFace1 = this.isCardFace(flipData.cardSlot[1].card1.cardName);
if ( flipData.cardSlot[1].isFace1 ) {
flipData.cardSlot[1].card2 = this.drawFromDeck();
flipData.cardSlot[1].value2 = this.getCardValue(flipData.cardSlot[1].card2.cardName);
flipData.cardSlot[1].isFace2 = this.isCardFace(flipData.cardSlot[1].card2.cardName);
flipData.cardSlot[1].card2Path = `systems/foundryvtt-shadows-over-sol/img/cards/${flipData.cardSlot[1].card2.cardName}.webp`;
} else {
flipData.cardSlot[1].value2 = 0; // Safe init
}
if ( flipData.cardSlot[1].cardsuit == cardsuit ) {
flipData.fullTrump = true;
}
flipData.cardSlot[1].total = flipData.cardSlot[1].value1 + flipData.cardSlot[1].value2;
}
}
// Card Total
flipData.cardTotal = flipData.cardSlot[0].total;
if ( flipData.fullTrump ) {
flipData.cardTotal = flipData.cardSlot[0].total + flipData.cardSlot[1].total;
} else if (flipData.isTrump) {
flipData.cardTotal = (flipData.cardSlot[0].total > flipData.cardSlot[1].total) ? flipData.cardSlot[0].total : flipData.cardSlot[1].total;
}
// Compute final result and compare
if ( flipData.mode == 'stat' ) {
flipData.baseScore = flipData.stat.value;
} else if (flipData.mode == 'skill') {
flipData.baseScore = Math.floor(flipData.stat.value/2) + flipData.skill.data.value;
}
flipData.finalScore = flipData.baseScore + flipData.cardTotal + Number(flipData.modifier);
flipData.magnitude = flipData.finalScore - flipData.tn;
flipData.result = (flipData.magnitude >= 0) ? "Success": "Failure";
console.log(flipData);
this.data.actor.saveDeck();
flipData.alias = this.data.actor.name;
let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/chat-flip.html', flipData);
ChatMessage.create( { content: html });
}
/* -------------------------------------------- */
getDeckHTML( ) {
return "<img class='view-deck flip-card' src='systems/foundryvtt-shadows-over-sol/img/cards/card_back.webp' />";
return "<a class='view-deck'><img class='flip-card deck-card' src='systems/foundryvtt-shadows-over-sol/img/cards/card_back.webp' /></a>";
}
/* -------------------------------------------- */
getEdgeHTML( ) {
let html = "";
for (let edge of this.data.cardEdge) {
html += `<img class='view-discard flip-card' src='systems/foundryvtt-shadows-over-sol/img/cards/${edge.cardName}.webp' />`
html += `<a class='view-edge'><img class='flip-card edge-card' data-edge-card='${edge.cardName}' src='systems/foundryvtt-shadows-over-sol/img/cards/${edge.cardName}.webp' /></a>`
}
return html;
}