Manage luck with Edge
This commit is contained in:
@ -136,6 +136,10 @@ export class SoSActorSheet extends ActorSheet {
|
||||
this.actor.resetDeck();
|
||||
this.render(true);
|
||||
});
|
||||
html.find('.discard-card').click((event) => {
|
||||
const cardName = $(event.currentTarget).data("discard");
|
||||
this.actor.discardEdge( cardName );
|
||||
});
|
||||
html.find('.consequence-severity').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
const item = this.actor.getOwnedItem(li.data("item-id"));
|
||||
|
@ -85,6 +85,12 @@ export class SoSActor extends Actor {
|
||||
this.saveDeck();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
discardEdge( cardName ) {
|
||||
this.cardDeck.discardEdge( cardName );
|
||||
this.saveDeck();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
resetDeck( ) {
|
||||
this.cardDeck.resetDeck();
|
||||
@ -221,7 +227,8 @@ export class SoSActor extends Actor {
|
||||
modifierList: SoSUtility.fillRange(-10, +10),
|
||||
tnList: SoSUtility.fillRange(6, 20),
|
||||
consequencesList: duplicate( this.getApplicableConsequences() ),
|
||||
malusConsequence: 0
|
||||
malusConsequence: 0,
|
||||
bonusConsequence: 0
|
||||
}
|
||||
let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/dialog-flip.html', flipData);
|
||||
new SoSFlipDialog(flipData, html).render(true);
|
||||
@ -238,7 +245,8 @@ export class SoSActor extends Actor {
|
||||
actor: this,
|
||||
modifierList: SoSUtility.fillRange(-10, +10),
|
||||
tnList: SoSUtility.fillRange(6, 20),
|
||||
malusConsequence: 0
|
||||
malusConsequence: 0,
|
||||
bonusConsequence: 0
|
||||
}
|
||||
flipData.statList['nostat'] = { label: "No stat (ie defaulting skills)", value: 0, cardsuit: "none" }
|
||||
let html = await renderTemplate('systems/foundryvtt-shadows-over-sol/templates/dialog-flip.html', flipData);
|
||||
|
@ -76,6 +76,13 @@ export class SoSCardDeck {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
discardEdge( cardName ) {
|
||||
let newEdge = this.data.cardEdge.filter( card => card.cardName != cardName);
|
||||
this.data.cardEdge = newEdge; // New edge list
|
||||
this.data.discard.push( { cardName: cardName }); // And push in the discard pile
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
drawEdge( edgeNumber = 1 ) {
|
||||
for (let i=0; i<edgeNumber; i++) {
|
||||
@ -159,6 +166,10 @@ export class SoSCardDeck {
|
||||
flipData.isJoker = false;
|
||||
flipData.fullTrump = false;
|
||||
|
||||
if ( flipData.edgeLuck ) {
|
||||
flipData.cardOrigin == "Deck"; // Force Deck
|
||||
}
|
||||
|
||||
// Select card origin
|
||||
if ( flipData.cardOrigin == "Deck") {
|
||||
flipData.cardSlot[0].card1 = this.drawFromDeck();
|
||||
@ -190,7 +201,7 @@ export class SoSCardDeck {
|
||||
|
||||
// Trump check
|
||||
flipData.cardSlot[0].cardsuit = cardsuit;
|
||||
if ( ! flipData.isJoker && cardsuit == flipData.stat.cardsuit ) {
|
||||
if ( !flipData.isJoker && ( cardsuit == flipData.stat.cardsuit || flipData.edgeLuck) ) {
|
||||
// This is a trump !
|
||||
flipData.cardSlot[1] = { total: 0 };
|
||||
flipData.isTrump = true;
|
||||
@ -293,6 +304,15 @@ export class SoSCardDeck {
|
||||
return html;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getEdgeHTMLForFlip( ) {
|
||||
let html = "";
|
||||
for (let edge of this.data.cardEdge) {
|
||||
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;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDiscardTopHTML( ) {
|
||||
let html = "";
|
||||
|
@ -36,6 +36,7 @@ export class SoSFlipDialog extends Dialog {
|
||||
scoreBase = this.flipData.stat.value;
|
||||
}
|
||||
scoreBase += this.flipData.malusConsequence;
|
||||
scoreBase += this.flipData.bonusConsequence;
|
||||
$('#score-base').text( scoreBase);
|
||||
}
|
||||
|
||||
@ -46,7 +47,7 @@ export class SoSFlipDialog extends Dialog {
|
||||
$("#view-deck").append(await flipData.actor.cardDeck.getDeckHTML());
|
||||
|
||||
$('.view-edge').remove();
|
||||
$("#view-edge").append(await flipData.actor.cardDeck.getEdgeHTML());
|
||||
$("#view-edge").append(await flipData.actor.cardDeck.getEdgeHTMLForFlip());
|
||||
|
||||
this.updateScoreBase();
|
||||
|
||||
@ -55,6 +56,7 @@ export class SoSFlipDialog extends Dialog {
|
||||
flipData.modifier = $('#modifier').val();
|
||||
flipData.tn = (flipData.target) ? flipData.target.actor.data.data.scores.defense.value : $('#tn').val();
|
||||
flipData.edgeName = event.currentTarget.attributes['data-edge-card'].value;
|
||||
flipData.edgeLuck = $('#edge-luck').is(":checked");
|
||||
flipData.cardOrigin = "Edge";
|
||||
if ( flipData.mode == 'skill' || flipData.mode == 'weapon') {
|
||||
flipData.stat = duplicate( flipData.statList[ $('#statSelect').val() ] );
|
||||
@ -67,8 +69,8 @@ export class SoSFlipDialog extends Dialog {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateConsequence(event) {
|
||||
this.flipData.consequencesSelected = $('#consequenceSelect').val();
|
||||
updateConsequenceMalus(event) {
|
||||
this.flipData.consequencesSelected = $('#consequenceSelectMalus').val();
|
||||
let malusConsequence = 0;
|
||||
for (let consequenceId of this.flipData.consequencesSelected) {
|
||||
let consequence = this.flipData.consequencesList.find( item => item._id == consequenceId);
|
||||
@ -80,6 +82,20 @@ export class SoSFlipDialog extends Dialog {
|
||||
this.updateScoreBase();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateConsequenceBonus(event) {
|
||||
this.flipData.consequencesSelected = $('#consequenceSelectBonus').val();
|
||||
let bonusConsequence = 0;
|
||||
for (let consequenceId of this.flipData.consequencesSelected) {
|
||||
let consequence = this.flipData.consequencesList.find( item => item._id == consequenceId);
|
||||
console.log(consequence, consequenceId);
|
||||
bonusConsequence += SoSUtility.getConsequenceBonus( consequence.data.severity );
|
||||
}
|
||||
$('#consequence-bonus').text(bonusConsequence);
|
||||
this.flipData.bonusConsequence = bonusConsequence;
|
||||
this.updateScoreBase();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
@ -90,9 +106,6 @@ export class SoSFlipDialog extends Dialog {
|
||||
|
||||
function onLoad() {
|
||||
let flipData = dialog.flipData;
|
||||
//RdDItemSort.setCoutReveReel(rollData.selectedSort);
|
||||
//$("#diffLibre").val(Misc.toInt(rollData.diffLibre));
|
||||
//$("#diffConditions").val(Misc.toInt(rollData.diffConditions));
|
||||
dialog.updateFlip(flipData);
|
||||
}
|
||||
|
||||
@ -103,8 +116,11 @@ export class SoSFlipDialog extends Dialog {
|
||||
this.updateFlip(dialog.flipData );
|
||||
} );
|
||||
|
||||
html.find('#consequenceSelect').change((event) => {
|
||||
this.updateConsequence( event );
|
||||
html.find('#consequenceSelectMalus').change((event) => {
|
||||
this.updateConsequenceMalus( event );
|
||||
} );
|
||||
html.find('#consequenceSelectBonus').change((event) => {
|
||||
this.updateConsequenceBonus( event );
|
||||
} );
|
||||
|
||||
html.find('.class-view-deck').click((event) => {
|
||||
|
@ -4,6 +4,8 @@ import { SoSDialogCombatActions } from "./sos-dialog-combat-actions.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const severity2malus = { "none": 0, "light": -1, "moderate": -2, "severe": -3, "critical": -4};
|
||||
/* -------------------------------------------- */
|
||||
const severity2bonus = { "none": 0, "light": 1, "moderate": 2, "severe": 3, "critical": 4};
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class SoSUtility extends Entity {
|
||||
@ -98,6 +100,10 @@ export class SoSUtility extends Entity {
|
||||
static getConsequenceMalus(severity) {
|
||||
return severity2malus[severity] ?? 0;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getConsequenceBonus(severity) {
|
||||
return severity2bonus[severity] ?? 0;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeEncumbrance( items) {
|
||||
|
Reference in New Issue
Block a user