diff --git a/scripts/allPowers.js b/scripts/allPowers.js index 631bd79..29cf1ee 100644 --- a/scripts/allPowers.js +++ b/scripts/allPowers.js @@ -69,6 +69,9 @@ class PowerEffect { get duration () { return 5 } get basePowerPoints () { return 0 } get usePrimaryEffect () { return true } + get hasAdditionalRecipients () { return false } + get additionalRecipientCost () { return 0 } + get isTargeted () { return false } get modifiers () { return [ { name: 'Glow', @@ -122,10 +125,15 @@ class PowerEffect { { type: 'header', label: `${this.name} Effect` }, { type: 'info', label: `Apply ${this.name} Effect` }, ] - if (this.targets.length > 0) { + if (this.isTargeted) { + let label = `Targets: ${this.targets.map(t => t.name).join(',')}` + if (this.targets.length > 1 && this.hasAdditionalRecipients) { + label += ` (${this.targets.length - 1} additional recipients ` + + `+${this.additionalRecipientCost} ea.)` + } data.push({ type: 'info', - label: `Targets: ${this.targets.map(t => t.name).join(',')}` + label: label }) } for (const mod of this.modifiers) { @@ -174,7 +182,10 @@ class PowerEffect { async parseValues () { this.data.rawValues = deepClone(this.data.values) this.data.raise = this.data.button === 'raise' - for (let i = 0; i < 3; i++) { + for (let i = 0; i < 2; i++) { + this.data.values.shift() + } + if (this.isTargeted) { this.data.values.shift() } this.data.mods = new Set() @@ -272,6 +283,9 @@ class PowerEffect { total += mod.value } } + if (this.targets.length > 1 && this.hasAdditionalRecipients) { + total += (this.targets.length - 1) * this.additionalRecipientCost + } return total } @@ -289,34 +303,16 @@ class PowerEffect { } } - -class AdditionalRecipientsMixin extends PowerEffect { - get additionalRecipientCost () { return 1 } - get menuInputs () { - const inputs = super.menuInputs - if (this.targets.length > 1) { - inputs[2].label += ` (${this.targets.length - 1} additional recipients ` + - ` +${this.additionalRecipientCost} ea.)` - } - return inputs - } - - get powerPoints () { - let pp = super.powerPoints - if (this.targets.length > 1) { - pp += (this.targets.length - 1) * this.additionalRecipientCost - } - return pp - } -} - - -class BurrowEffect extends PowerEffect, AdditionalRecipientsMixin { +class BurrowEffect extends PowerEffect { get name () { return 'Burrow' } get duration () { return 5 } get icon () { return 'icons/magic/earth/projectile-stone-landslide.webp' } + get hasAdditionalRecipients () { return true } + get additionalRecipientCost () { return 1 } + get basePowerPoints () { return 1 } + get isTargeted () { return true } get effectName () { - return `${this.name} (${this.data.raise ? 'half' : 'full'} pace)` + return `${this.name} (${this.data.raise ? 'full' : 'half'} pace)` } }