From 86f3da8ac7aff0568f3ca1be05696affcf73f173 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sun, 15 Mar 2026 15:50:30 +0100 Subject: [PATCH] Added initiator handling --- module/applications/dialogs/tagTeamDialog.mjs | 24 +++++++++++++++---- module/applications/sheets/actors/party.mjs | 1 + module/data/tagTeamData.mjs | 7 ++++++ .../tag-team-dialog/initialization.less | 15 ++++++++++++ styles/less/sheets/actors/party/sheet.less | 4 ++++ .../dialogs/tagTeamDialog/initialization.hbs | 21 +++++++++++++--- .../sheets/actors/party/party-members.hbs | 2 +- 7 files changed, 66 insertions(+), 8 deletions(-) diff --git a/module/applications/dialogs/tagTeamDialog.mjs b/module/applications/dialogs/tagTeamDialog.mjs index 6a1a8bde..42802adc 100644 --- a/module/applications/dialogs/tagTeamDialog.mjs +++ b/module/applications/dialogs/tagTeamDialog.mjs @@ -17,6 +17,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio id: member.id, selected: false })); + this.intiator = null; this.tabGroups.application = Object.keys(party.system.tagTeam.members).length ? 'tagTeamRoll' @@ -81,8 +82,16 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio const partContext = await super._preparePartContext(partId, context, options); switch (partId) { case 'initialization': + partContext.tagTeamFields = this.party.system.schema.fields.tagTeam.fields; partContext.memberSelection = this.partyMembers; - partContext.allSelected = partContext.memberSelection.filter(x => x.selected).length >= 2; + const selectedMembers = partContext.memberSelection.filter(x => x.selected); + + partContext.allSelected = selectedMembers.length === 2; + partContext.canStartTagTeam = partContext.allSelected && this.initiator; + partContext.initiator = this.initiator; + partContext.initiatorOptions = selectedMembers.map(x => ({ value: x.id, label: x.name })); + partContext.initiatorDisabled = !selectedMembers.length; + break; case 'tagTeamRoll': partContext.fields = this.party.system.schema.fields.tagTeam.fields; @@ -152,14 +161,17 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio } static async updateData(_event, _, formData) { - const form = foundry.utils.expandObject(formData.object); - await this.party.update(form); + const { initiator, ...partyData } = foundry.utils.expandObject(formData.object); + this.initiator = initiator; + await this.party.update(partyData); this.render(true); } //#region Initialization static #toggleSelectMember(_, button) { const member = this.partyMembers.find(x => x.id === button.dataset.id); + if (member.selected && this.initiator?.memberId === member.id) this.initiator = null; + member.selected = !member.selected; this.render(); } @@ -168,6 +180,7 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio await this.party.update({ 'system.==tagTeam': new game.system.api.data.TagTeamData({ ...this.party.system.tagTeam.toObject(), + initiator: this.initiator, members: this.partyMembers.reduce((acc, member) => { if (member.selected) acc[member.id] = { @@ -461,7 +474,10 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio static async #cancelRoll() { await this.party.update({ - 'system.tagTeam.==members': {} + 'system.==tagTeam': { + initiator: null, + members: {} + } }); this.close(); } diff --git a/module/applications/sheets/actors/party.mjs b/module/applications/sheets/actors/party.mjs index d6034d8d..45bdb679 100644 --- a/module/applications/sheets/actors/party.mjs +++ b/module/applications/sheets/actors/party.mjs @@ -118,6 +118,7 @@ export default class Party extends DHBaseActorSheet { secrets: this.document.isOwner, relativeTo: this.document }); + context.tagTeamActive = Boolean(this.document.system.tagTeam.initiator); } /** diff --git a/module/data/tagTeamData.mjs b/module/data/tagTeamData.mjs index 95ba83a9..120894d5 100644 --- a/module/data/tagTeamData.mjs +++ b/module/data/tagTeamData.mjs @@ -3,6 +3,13 @@ export default class TagTeamData extends foundry.abstract.DataModel { const fields = foundry.data.fields; return { + initiator: new fields.SchemaField( + { + memberId: new fields.StringField({ required: true, label: 'Initiating Character' }), + cost: new fields.NumberField({ integer: true, initial: 3, label: 'Initiation Cost' }) + }, + { nullable: true, initial: null } + ), members: new fields.TypedObjectField(new fields.EmbeddedDataField(MemberData)) }; } diff --git a/styles/less/dialog/tag-team-dialog/initialization.less b/styles/less/dialog/tag-team-dialog/initialization.less index e059d2d6..1b0c9185 100644 --- a/styles/less/dialog/tag-team-dialog/initialization.less +++ b/styles/less/dialog/tag-team-dialog/initialization.less @@ -1,5 +1,9 @@ .daggerheart.dialog.dh-style.views.tag-team-dialog { .initialization-container { + h2 { + text-align: center; + } + .members-container { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr; @@ -20,6 +24,17 @@ } } + .intiator-container { + margin-top: 8px; + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; + + &.inactive { + opacity: 0.4; + } + } + footer { margin-top: 8px; display: flex; diff --git a/styles/less/sheets/actors/party/sheet.less b/styles/less/sheets/actors/party/sheet.less index 2d1344e8..0ed80744 100644 --- a/styles/less/sheets/actors/party/sheet.less +++ b/styles/less/sheets/actors/party/sheet.less @@ -40,6 +40,10 @@ font-size: 12px; } } + + .active-action { + animation: glow 0.75s infinite alternate; + } } } } diff --git a/templates/dialogs/tagTeamDialog/initialization.hbs b/templates/dialogs/tagTeamDialog/initialization.hbs index 722f6414..d89397a9 100644 --- a/templates/dialogs/tagTeamDialog/initialization.hbs +++ b/templates/dialogs/tagTeamDialog/initialization.hbs @@ -2,14 +2,29 @@

{{localize "Select the two participants"}}

{{#each memberSelection as |member|}} - + {{member.name}} - {{/each}} + {{/each}} +
+ +
+
+ +
+ +
+
+ {{formGroup tagTeamFields.initiator.fields.cost name="initiator.cost" value=initiator.cost disabled=initiatorDisabled localize=true }}
\ No newline at end of file diff --git a/templates/sheets/actors/party/party-members.hbs b/templates/sheets/actors/party/party-members.hbs index b5903cfc..b3dd53e6 100644 --- a/templates/sheets/actors/party/party-members.hbs +++ b/templates/sheets/actors/party/party-members.hbs @@ -5,7 +5,7 @@ >
-