From dbb08fec8c73d672344c2e3f33ef96a73fba90f8 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Tue, 28 Apr 2026 20:30:32 +0200 Subject: [PATCH] Initial --- lang/en.json | 3 +- .../sheets-configs/action-base-config.mjs | 35 ++++++++++++++++ module/data/fields/action/damageField.mjs | 40 ++++++++++++++++--- styles/less/sheets/actions/actions.less | 19 +++++++++ .../action-settings/configuration.hbs | 4 +- .../action-settings/effect.hbs | 16 ++++++-- .../sheets-settings/action-settings/range.hbs | 8 ++++ 7 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 templates/sheets-settings/action-settings/range.hbs diff --git a/lang/en.json b/lang/en.json index b4b1410e..0d09acf9 100755 --- a/lang/en.json +++ b/lang/en.json @@ -2347,7 +2347,8 @@ "triggers": "Triggers", "deathMoves": "Deathmoves", "sources": "Sources", - "packs": "Packs" + "packs": "Packs", + "range": "Range" }, "Tiers": { "singular": "Tier", diff --git a/module/applications/sheets-configs/action-base-config.mjs b/module/applications/sheets-configs/action-base-config.mjs index 7406b084..a20cc251 100644 --- a/module/applications/sheets-configs/action-base-config.mjs +++ b/module/applications/sheets-configs/action-base-config.mjs @@ -62,6 +62,10 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) id: 'configuration', template: 'systems/daggerheart/templates/sheets-settings/action-settings/configuration.hbs' }, + configuration: { + id: 'range', + template: 'systems/daggerheart/templates/sheets-settings/action-settings/range.hbs' + }, effect: { id: 'effect', template: 'systems/daggerheart/templates/sheets-settings/action-settings/effect.hbs' @@ -89,6 +93,14 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) icon: null, label: 'DAGGERHEART.GENERAL.Tabs.configuration' }, + range: { + active: false, + cssClass: '', + group: 'primary', + id: 'range', + icon: null, + label: 'DAGGERHEART.GENERAL.Tabs.range' + }, effect: { active: false, cssClass: '', @@ -107,6 +119,25 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) } }; + static OUTCOME_TABS = { + successWithHope: { + active: true, + cssClass: '', + group: 'outcomes', + id: 'successWithHope', + icon: null, + label: 'Success With Hope' + }, + successWithFear: { + active: false, + cssClass: '', + group: 'outcomes', + id: 'successWithFear', + icon: null, + label: 'Success With Fear' + }, + }; + static CLEAN_ARRAYS = ['cost', 'effects', 'summon']; _getTabs(tabs) { @@ -155,6 +186,10 @@ export default class DHActionBaseConfig extends DaggerheartSheet(ApplicationV2) context.openSection = this.openSection; context.tabs = this._getTabs(this.constructor.TABS); + + context.outcomeTabs = this._getTabs(this.constructor.OUTCOME_TABS); + context.outcomeData = context.outcomeTabs.successWithHope.active ? context.source.damage : context.source.damage.altOutcomes.successWithFear; + context.config = CONFIG.DH; if (this.action.damage) { context.allDamageTypesUsed = !getUnusedDamageTypes(this.action.damage.parts).length; diff --git a/module/data/fields/action/damageField.mjs b/module/data/fields/action/damageField.mjs index 30a5ad7c..ba8277ef 100644 --- a/module/data/fields/action/damageField.mjs +++ b/module/data/fields/action/damageField.mjs @@ -4,6 +4,15 @@ import IterableTypedObjectField from '../iterableTypedObjectField.mjs'; const fields = foundry.data.fields; +const getDamageBaseFields = () => ({ + parts: new IterableTypedObjectField(DHDamageData), + includeBase: new fields.BooleanField({ + initial: false, + label: 'DAGGERHEART.ACTIONS.Settings.includeBase.label' + }), + direct: new fields.BooleanField({ initial: false, label: 'DAGGERHEART.CONFIG.DamageType.direct.name' }), +}); + export default class DamageField extends fields.SchemaField { /** * Action Workflow order @@ -13,12 +22,13 @@ export default class DamageField extends fields.SchemaField { /** @inheritDoc */ constructor(options, context = {}) { const damageFields = { - parts: new IterableTypedObjectField(DHDamageData), - includeBase: new fields.BooleanField({ - initial: false, - label: 'DAGGERHEART.ACTIONS.Settings.includeBase.label' + ...getDamageBaseFields(), + altOutcomes: new fields.SchemaField({ + successFear: new fields.EmbeddedDataField(AltDamageOutcome, { nullable: true, initial: null }), + failureHope: new fields.EmbeddedDataField(AltDamageOutcome, { nullable: true, initial: null }), + failureFear: new fields.EmbeddedDataField(AltDamageOutcome, { nullable: true, initial: null }), + critical: new fields.EmbeddedDataField(AltDamageOutcome, { nullable: true, initial: null }) }), - direct: new fields.BooleanField({ initial: false, label: 'DAGGERHEART.CONFIG.DamageType.direct.name' }), groupAttack: new fields.StringField({ choices: CONFIG.DH.GENERAL.groupAttackRange, blank: true, @@ -28,6 +38,12 @@ export default class DamageField extends fields.SchemaField { super(damageFields, options, context); } + getDamageData(outcome) { + if (outcome === 'successHope') return this; + + return this.altOutcomes[outcome].data; + } + /** * Roll Damage/Healing Action Workflow part. * Must be called within Action context or similar. @@ -326,3 +342,17 @@ export class DHDamageData extends DHResourceData { }; } } + +class AltDamageOutcome extends foundry.abstract.DataModel { + static defineSchema() { + return { + copyStandard: new fields.BooleanField({ required: true, initial: true }), + ...getDamageBaseFields(), + /* Stuff */ + } + } + + get data() { + return this.copyStandard ? this.parent : {}; // If not copying, return data from the this alternate outcome + } +} \ No newline at end of file diff --git a/styles/less/sheets/actions/actions.less b/styles/less/sheets/actions/actions.less index 485f8e91..19912a98 100644 --- a/styles/less/sheets/actions/actions.less +++ b/styles/less/sheets/actions/actions.less @@ -153,4 +153,23 @@ align-items: center; gap: 4px; } + + .inner-tabs { + justify-content: left; + + .inner-tab { + line-height: 1.5; + border: 1px solid light-dark(@beige, @beige); + border-radius: 6px; + padding: 0 4px; + background: light-dark(@beige, @dark-blue); + color: light-dark(@dark-blue, @beige); + + a { + &.active { + + } + } + } + } } diff --git a/templates/sheets-settings/action-settings/configuration.hbs b/templates/sheets-settings/action-settings/configuration.hbs index 8df528c9..9fb54cc8 100644 --- a/templates/sheets-settings/action-settings/configuration.hbs +++ b/templates/sheets-settings/action-settings/configuration.hbs @@ -3,8 +3,8 @@ data-group="primary" data-tab="config" > + {{#if fields.roll}}{{> 'systems/daggerheart/templates/actionTypes/roll.hbs' fields=fields.roll.fields source=source.roll}}{{/if}} + {{#if fields.save}}{{> 'systems/daggerheart/templates/actionTypes/save.hbs' fields=fields.save.fields source=source.save}}{{/if}} {{> 'systems/daggerheart/templates/actionTypes/uses.hbs' fields=fields.uses.fields source=source.uses}} {{> 'systems/daggerheart/templates/actionTypes/cost.hbs' fields=fields.cost.element.fields source=source.cost costOptions=costOptions}} - {{> 'systems/daggerheart/templates/actionTypes/range-target.hbs' fields=(object range=fields.range target=fields.target.fields) source=(object target=source.target range=source.range)}} - {{> 'systems/daggerheart/templates/actionTypes/areas.hbs' fields=fields.areas.element.fields source=source.areas}} \ No newline at end of file diff --git a/templates/sheets-settings/action-settings/effect.hbs b/templates/sheets-settings/action-settings/effect.hbs index 567cb81c..aa22a28e 100644 --- a/templates/sheets-settings/action-settings/effect.hbs +++ b/templates/sheets-settings/action-settings/effect.hbs @@ -1,11 +1,19 @@ -
- {{#if fields.roll}}{{> 'systems/daggerheart/templates/actionTypes/roll.hbs' fields=fields.roll.fields source=source.roll}}{{/if}} - {{#if fields.save}}{{> 'systems/daggerheart/templates/actionTypes/save.hbs' fields=fields.save.fields source=source.save}}{{/if}} - {{#if fields.damage}}{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=fields.damage.fields.parts.element.fields source=source.damage baseFields=fields.damage.fields }}{{/if}} + + + {{#if fields.damage}}{{> 'systems/daggerheart/templates/actionTypes/damage.hbs' fields=fields.damage.fields.parts.element.fields source=outcomeData baseFields=fields.damage.fields }}{{/if}} {{#if fields.macro}}{{> 'systems/daggerheart/templates/actionTypes/macro.hbs' fields=fields.macro source=source.macro}}{{/if}} {{#if fields.effects}}{{> 'systems/daggerheart/templates/actionTypes/effect.hbs' fields=fields.effects.element.fields source=source.effects}}{{/if}} {{#if fields.beastform}}{{> 'systems/daggerheart/templates/actionTypes/beastform.hbs' fields=fields.beastform.fields source=source.beastform}}{{/if}} diff --git a/templates/sheets-settings/action-settings/range.hbs b/templates/sheets-settings/action-settings/range.hbs new file mode 100644 index 00000000..273e89c9 --- /dev/null +++ b/templates/sheets-settings/action-settings/range.hbs @@ -0,0 +1,8 @@ +
+ {{> 'systems/daggerheart/templates/actionTypes/range-target.hbs' fields=(object range=fields.range target=fields.target.fields) source=(object target=source.target range=source.range)}} + {{> 'systems/daggerheart/templates/actionTypes/areas.hbs' fields=fields.areas.element.fields source=source.areas}} +
\ No newline at end of file