diff --git a/daggerheart.mjs b/daggerheart.mjs index 2cb02170..82fae3c9 100644 --- a/daggerheart.mjs +++ b/daggerheart.mjs @@ -35,7 +35,7 @@ CONFIG.Dice.daggerheart = { FateRoll: FateRoll }; -CONFIG.Dice.termTypes.DualityDie = dice.diceTypes.DualityDie; +Object.assign(CONFIG.Dice.termTypes, dice.diceTypes); CONFIG.Actor.documentClass = documents.DhpActor; CONFIG.Actor.dataModels = models.actors.config; diff --git a/module/dice/_module.mjs b/module/dice/_module.mjs index 523f15c1..e1206f82 100644 --- a/module/dice/_module.mjs +++ b/module/dice/_module.mjs @@ -4,4 +4,4 @@ export { default as DamageRoll } from './damageRoll.mjs'; export { default as DHRoll } from './dhRoll.mjs'; export { default as DualityRoll } from './dualityRoll.mjs'; export { default as FateRoll } from './fateRoll.mjs'; -export { Dice, diceTypes } from './die/_module.mjs'; +export { diceTypes } from './die/_module.mjs'; diff --git a/module/dice/die/_module.mjs b/module/dice/die/_module.mjs index e2a96208..ed892f6a 100644 --- a/module/dice/die/_module.mjs +++ b/module/dice/die/_module.mjs @@ -1,7 +1,9 @@ import DualityDie from './dualityDie.mjs'; - -export const Dice = [DualityDie]; +import AdvantageDie from './advantageDie.mjs'; +import DisadvantageDie from './disadvantageDie.mjs'; export const diceTypes = { - DualityDie + DualityDie, + AdvantageDie, + DisadvantageDie }; diff --git a/module/dice/die/advantageDie.mjs b/module/dice/die/advantageDie.mjs new file mode 100644 index 00000000..9c2f0b03 --- /dev/null +++ b/module/dice/die/advantageDie.mjs @@ -0,0 +1,7 @@ +export default class AdvantageDie extends foundry.dice.terms.Die { + constructor(options) { + super(options); + + this.modifiers = []; + } +} diff --git a/module/dice/die/disadvantageDie.mjs b/module/dice/die/disadvantageDie.mjs new file mode 100644 index 00000000..f56ebe96 --- /dev/null +++ b/module/dice/die/disadvantageDie.mjs @@ -0,0 +1,7 @@ +export default class DisadvantageDie extends foundry.dice.terms.Die { + constructor(options) { + super(options); + + this.modifiers = []; + } +} diff --git a/module/dice/dualityRoll.mjs b/module/dice/dualityRoll.mjs index 56cecfd7..be935d4b 100644 --- a/module/dice/dualityRoll.mjs +++ b/module/dice/dualityRoll.mjs @@ -17,22 +17,6 @@ export default class DualityRoll extends D20Roll { static DefaultDialog = D20RollDialog; - /**@inheritdoc */ - static instantiateAST(ast) { - /* First two dice are always the DualityDice */ - const nodes = CONFIG.Dice.parser.flattenTree(ast); - const dieNodes = nodes.filter(x => x.class === 'DiceTerm'); - if (dieNodes.length > 1) { - dieNodes[0].class = 'DualityDie'; - dieNodes[1].class = 'DualityDie'; - } - - return nodes.map(node => { - const cls = foundry.dice.terms[node.class] ?? foundry.dice.terms.RollTerm; - return cls.fromParseNode(node); - }); - } - get title() { return game.i18n.localize( `DAGGERHEART.GENERAL.${this.options?.actionType === 'reaction' ? 'reactionRoll' : 'dualityRoll'}` @@ -40,27 +24,31 @@ export default class DualityRoll extends D20Roll { } get dHope() { - if (!(this.dice[0] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); return this.dice[0]; } set dHope(faces) { - if (!(this.dice[0] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); this.dice[0].faces = this.getFaces(faces); } get dFear() { - if (!(this.dice[1] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[1] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); return this.dice[1]; } set dFear(faces) { - if (!(this.dice[1] instanceof foundry.dice.terms.Die)) this.createBaseDice(); + if (!(this.dice[1] instanceof game.system.api.dice.diceTypes.DualityDie)) this.createBaseDice(); this.dice[1].faces = this.getFaces(faces); } get dAdvantage() { - return this.dice[2]; + return this.dice[2] instanceof game.system.api.dice.diceTypes.AdvantageDie ? this.dice[2] : null; + } + + get dDisadvantage() { + return this.dice[2] instanceof game.system.api.dice.diceTypes.DisadvantageDie ? this.dice[2] : null; } get advantageFaces() { @@ -145,6 +133,16 @@ export default class DualityRoll extends D20Roll { return [...(hooks ?? []), 'Duality']; } + /** @inheritDoc */ + static fromData(data) { + data.terms[0].class = 'DualityDie'; + data.terms[2].class = 'DualityDie'; + + if (data.options.roll.advantage?.type === 1) data.terms[4].class = 'AdvantageDie'; + else if (data.options.roll.advantage?.type === -1) data.terms[4].class = 'DisadvantageDie'; + return super.fromData(data); + } + createBaseDice() { if ( this.dice[0] instanceof game.system.api.dice.diceTypes.DualityDie && diff --git a/templates/dialogs/dice-roll/rollSelection.hbs b/templates/dialogs/dice-roll/rollSelection.hbs index 4451160b..64a3cdcb 100644 --- a/templates/dialogs/dice-roll/rollSelection.hbs +++ b/templates/dialogs/dice-roll/rollSelection.hbs @@ -53,14 +53,14 @@ {{#if @root.advantage}} {{#if (eq @root.advantage 1)}}