Skip to content

Commit

Permalink
More advantage mode coverage; assign counters to parent element.
Browse files Browse the repository at this point in the history
  • Loading branch information
krbz999 committed Dec 31, 2024
1 parent 899639b commit 05a6982
Showing 1 changed file with 34 additions and 28 deletions.
62 changes: 34 additions & 28 deletions module/data/fields/advantage-mode-field.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default class AdvantageModeField extends foundry.data.fields.NumberField
/** @inheritDoc */
static get _defaults() {
return foundry.utils.mergeObject(super._defaults, {
choices: [-1, 0, 1],
choices: AdvantageModeField.#values,
initial: 0,
label: "DND5E.AdvantageMode"
});
Expand All @@ -14,46 +14,52 @@ export default class AdvantageModeField extends foundry.data.fields.NumberField
/* -------------------------------------------- */

/**
* Number of advantage modifications.
* @type {number}
* Allowed advantage mode values.
* @type {number[]}
*/
#advantage;
static #values = [-1, 0, 1];

/* -------------------------------------------- */
/* Active Effect Integration */
/* -------------------------------------------- */

/**
* Number of disadvantage modifications.
* @type {number}
*/
#disadvantage;
/** @override */
_applyChangeAdd(value, delta, model, change) {
if ( ![-1, 1].includes(delta) ) return value;
const roll = foundry.utils.getProperty(model, change.key.substring(0, change.key.lastIndexOf(".")));
roll.advantage ??= 0;
roll.disadvantage ??= 0;
if ( delta === 1 ) roll.advantage++;
else roll.disadvantage++;
const src = foundry.utils.getProperty(model._source, change.key) ?? 0;
return Math.sign(roll.advantage + Number(src === 1)) - Math.sign(roll.disadvantage + Number(src === -1));
}

/* -------------------------------------------- */

/** @inheritDoc */
initialize(value, model, options={}) {
this.#advantage = Number(value === 1);
this.#disadvantage = Number(value === -1);
/** @override */
_applyChangeDowngrade(value, delta, model, change) {
return value;
}

/* -------------------------------------------- */
/* Active Effect Integration */

/** @override */
_applyChangeMultiply(value, delta, model, change) {
return value;
}

/* -------------------------------------------- */

/** @override */
_applyChangeOverride(value, delta, model, change) {
return value;
}

/* -------------------------------------------- */

/** @override */
applyChange(value, model, change) {
const delta = this._castChangeDelta(change.value);
if ( change.mode === CONST.ACTIVE_EFFECT_MODES.CUSTOM ) {
return this._applyChangeCustom(value, delta, model, change);
}
switch (delta) {
case 1:
this.#advantage++;
break;
case -1:
this.#disadvantage++;
break;
}
return Math.sign(this.#advantage) - Math.sign(this.#disadvantage);
_applyChangeUpgrade(value, delta, model, change) {
return value;
}
}

0 comments on commit 05a6982

Please sign in to comment.