Add Reroll and Swap visualisation in chatlog

This commit is contained in:
Vlyan
2021-02-04 10:04:45 +01:00
parent 78568ded55
commit 84b160b50d
6 changed files with 69 additions and 28 deletions

View File

@@ -91,6 +91,9 @@ export class L5rBaseDie extends DiceTerm {
["success", "explosive", "opportunity", "strife"].forEach((props) => { ["success", "explosive", "opportunity", "strife"].forEach((props) => {
this.l5r5e[props] += parseInt(face[props]); this.l5r5e[props] += parseInt(face[props]);
}); });
if (face.explosive) {
term.exploded = true;
}
}); });
} }

View File

@@ -507,12 +507,23 @@ export class RollnKeepDialog extends FormApplication {
*/ */
async _rebuildRoll() { async _rebuildRoll() {
// Get all kept dices + new (choice null) // Get all kept dices + new (choice null)
const diceList = this.object.dicesList.reduce((acc, step) => { const diceList = this.object.dicesList.reduce((acc, step, stepIdx) => {
step.forEach((die) => { step.forEach((die, idx) => {
if (!!die && [RollnKeepDialog.CHOICES.keep, RollnKeepDialog.CHOICES.nothing].includes(die.choice)) { if (!!die && [RollnKeepDialog.CHOICES.keep, RollnKeepDialog.CHOICES.nothing].includes(die.choice)) {
if (!acc[die.type]) { if (!acc[die.type]) {
acc[die.type] = []; acc[die.type] = [];
} }
// Check previous dice, to add html classes in chat
if (stepIdx > 0 && this.object.dicesList[stepIdx - 1][idx]) {
switch (this.object.dicesList[stepIdx - 1][idx].choice) {
case RollnKeepDialog.CHOICES.reroll:
die.class = "rerolled";
break;
case RollnKeepDialog.CHOICES.swap:
die.class = "swapped";
break;
}
}
acc[die.type].push(die); acc[die.type].push(die);
} }
}); });
@@ -535,6 +546,11 @@ export class RollnKeepDialog extends FormApplication {
term.results.map((res) => { term.results.map((res) => {
const die = diceList[term.constructor.name].shift(); const die = diceList[term.constructor.name].shift();
res.result = die.face; res.result = die.face;
// add class to term result
if (die.class) {
res[die.class] = true;
}
return res; return res;
}); });
term.l5rSummary(); term.l5rSummary();

View File

@@ -104,11 +104,14 @@ export class RollL5r5e extends Roll {
); // ignore math symbols ); // ignore math symbols
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof game.l5r5e.L5rBaseDie); this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof game.l5r5e.L5rBaseDie);
summary.totalBonus = Math.max(0, summary.totalSuccess - this.l5r5e.difficulty); summary.totalBonus = Math.max(0, summary.totalSuccess - this.l5r5e.difficulty);
if (!this.l5r5e.keepLimit) {
this.l5r5e.keepLimit = this.dice.reduce( this.l5r5e.keepLimit = this.dice.reduce(
(acc, term) => (term instanceof game.l5r5e.RingDie ? acc + term.number : acc), (acc, term) => (term instanceof game.l5r5e.RingDie ? acc + term.number : acc),
0 0
); );
} }
}
/** /**
* Summarise the total of success, strife... for L5R dices for the current term * Summarise the total of success, strife... for L5R dices for the current term
@@ -183,8 +186,9 @@ export class RollL5r5e extends Roll {
classes: [ classes: [
cls.name.toLowerCase(), cls.name.toLowerCase(),
"d" + term.faces, "d" + term.faces,
!isL5rDie && r.rerolled ? "rerolled" : null, isL5rDie && r.swapped ? "swapped" : null,
!isL5rDie && r.exploded ? "exploded" : null, r.rerolled ? "rerolled" : null,
r.exploded ? "exploded" : null,
!isL5rDie && r.discarded ? "discarded" : null, !isL5rDie && r.discarded ? "discarded" : null,
!isL5rDie && r.result === 1 ? "min" : null, !isL5rDie && r.result === 1 ? "min" : null,
!isL5rDie && r.result === term.faces ? "max" : null, !isL5rDie && r.result === term.faces ? "max" : null,
@@ -240,12 +244,20 @@ export class RollL5r5e extends Roll {
? {} ? {}
: { : {
...this.l5r5e, ...this.l5r5e,
dices: this.dice.map((d) => { dices: this.dice.map((term) => {
const isL5rDie = term instanceof game.l5r5e.L5rBaseDie;
return { return {
diceTypeL5r: d instanceof game.l5r5e.L5rBaseDie, diceTypeL5r: isL5rDie,
rolls: d.results.map((r) => { rolls: term.results.map((r) => {
return { return {
result: d.constructor.getResultLabel(r.result), result: term.constructor.getResultLabel(r.result),
classes: [
isL5rDie && r.swapped ? "swapped" : null,
r.rerolled ? "rerolled" : null,
r.exploded ? "exploded" : null,
]
.filter((c) => !!c)
.join(" "),
}; };
}), }),
}; };

File diff suppressed because one or more lines are too long

View File

@@ -9,7 +9,16 @@
} }
// Dice in chat // Dice in chat
.chat-dice > img { .chat-dice {
&.rerolled > img {
border-bottom: 3px solid orangered;
}
&.swapped > img {
border-bottom: 3px solid fuchsia;
}
img {
border: 1px solid transparent; border: 1px solid transparent;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
@@ -24,6 +33,7 @@
flex: 0 0 20px; flex: 0 0 20px;
display: inline-block; display: inline-block;
} }
}
.chat-profil { .chat-profil {
text-align: center; text-align: center;

View File

@@ -49,7 +49,7 @@
{{#each l5r5e.dices}} {{#each l5r5e.dices}}
{{#if this.diceTypeL5r}} {{#if this.diceTypeL5r}}
{{#each this.rolls}} {{#each this.rolls}}
<span class="l5r5e chat-dice">{{{this.result}}}</span> <span class="l5r5e chat-dice {{this.classes}}">{{{this.result}}}</span>
{{/each}} {{/each}}
{{/if}} {{/if}}
{{/each}} {{/each}}