Compare commits

...

4 commits

7 changed files with 67 additions and 84 deletions

View file

@ -16,9 +16,11 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
...member.toObject(),
uuid: member.uuid,
id: member.id,
selected: false
selected: false,
owned: member.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
}));
this.intiator = null;
this.initiator = null;
this.openForAllPlayers = true;
this.tabGroups.application = Object.keys(party.system.tagTeam.members).length
@ -80,6 +82,18 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
for (const element of htmlElement.querySelectorAll('.roll-type-select'))
element.addEventListener('change', this.updateRollType.bind(this));
htmlElement
.querySelector('.initiator-member-field')
?.addEventListener('input', this.updateInitiatorMemberField.bind(this));
htmlElement
.querySelector('.initiator-cost-field')
?.addEventListener('input', this.updateInitiatorCostField.bind(this));
htmlElement
.querySelector('.openforall-field')
?.addEventListener('change', this.updateOpenForAllField.bind(this));
}
_configureRenderParts(options) {
@ -135,9 +149,12 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
const selectedMembers = partContext.memberSelection.filter(x => x.selected);
partContext.allSelected = selectedMembers.length === 2;
partContext.canStartTagTeam = partContext.allSelected && this.initiator;
partContext.canStartTagTeam =
partContext.allSelected && this.initiator?.memberId && typeof this.initiator?.cost === 'number';
partContext.initiator = this.initiator;
partContext.initiatorOptions = selectedMembers.map(x => ({ value: x.id, label: x.name }));
partContext.initiatorOptions = selectedMembers
.filter(actor => actor.owned)
.map(x => ({ value: x.id, label: x.name }));
partContext.initiatorDisabled = !selectedMembers.length;
partContext.openForAllPlayers = this.openForAllPlayers;
@ -230,14 +247,15 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
}
static async updateData(event, _, formData) {
const { initiator, openForAllPlayers, ...partyData } = foundry.utils.expandObject(formData.object);
this.initiator = initiator;
this.openForAllPlayers = openForAllPlayers !== undefined ? openForAllPlayers : this.openForAllPlayers;
const partyData = foundry.utils.expandObject(formData.object);
this.updatePartyData(partyData, this.getUpdatingParts(event.target));
}
async updatePartyData(update, updatingParts, options = { render: true }) {
if (!game.users.activeGM)
return ui.notifications.error(game.i18n.localize('DAGGERHEART.UI.Notifications.gmRequired'));
const gmUpdate = async update => {
await this.party.update(update);
this.render({ parts: updatingParts });
@ -374,6 +392,23 @@ export default class TagTeamDialog extends HandlebarsApplicationMixin(Applicatio
);
}
updateInitiatorMemberField(event) {
if (!this.initiator) this.initiator = {};
this.initiator.memberId = event.target.value;
this.render();
}
updateInitiatorCostField(event) {
if (!this.initiator) this.initiator = {};
this.initiator.cost = event.target.value ? Number.parseInt(event.target.value) : null;
this.render();
}
updateOpenForAllField(event) {
this.openForAllPlayers = event.target.checked;
this.render();
}
static async #removeRoll(_, button) {
this.updatePartyData(
{

View file

@ -95,7 +95,7 @@ export default class DhTokenManager {
: this.#actor;
const tokenData = await actor.getTokenDocument();
const result = await canvas.scene.createEmbeddedDocuments('Token', [
{ ...tokenData, x: this.#activePreview.document.x, y: this.#activePreview.document.y }
{ ...tokenData.toObject(), x: this.#activePreview.document.x, y: this.#activePreview.document.y }
]);
this.#activePreview = undefined;

View file

@ -44,7 +44,9 @@
"flatMultiplier": 1
},
"applyTo": "hitPoints",
"type": [],
"type": [
"magical"
],
"base": false,
"valueAlt": {
"multiplier": "prof",
@ -87,57 +89,6 @@
"name": "Cast",
"img": "icons/skills/melee/spear-tips-three-green.webp",
"range": "veryClose"
},
"CUKoYyDxQhNc0pLs": {
"type": "damage",
"_id": "CUKoYyDxQhNc0pLs",
"systemPath": "actions",
"description": "<p>If a target you hit is <em>Vulnerable</em>, they take an extra <strong>1d8</strong> damage.</p>",
"chatDisplay": true,
"actionType": "action",
"cost": [],
"uses": {
"value": null,
"max": "",
"recovery": null
},
"damage": {
"parts": {
"hitPoints": {
"value": {
"custom": {
"enabled": false
},
"multiplier": "flat",
"flatMultiplier": 1,
"dice": "d8",
"bonus": null
},
"applyTo": "hitPoints",
"type": [],
"base": false,
"resultBased": false,
"valueAlt": {
"multiplier": "prof",
"flatMultiplier": 1,
"dice": "d6",
"bonus": null,
"custom": {
"enabled": false
}
}
}
},
"includeBase": false
},
"target": {
"type": "any",
"amount": null
},
"effects": [],
"name": "Damage Against Vulnerable",
"img": "icons/skills/melee/spear-tips-three-purple.webp",
"range": ""
}
},
"attribution": {

View file

@ -5,22 +5,14 @@
"_id": "ijWppQzSOqVCb3rE",
"img": "icons/weapons/axes/axe-battle-jagged.webp",
"system": {
"description": "",
"description": "<strong>Protective:</strong> +1 to Armor Score",
"actions": {},
"attached": [],
"tier": 3,
"equipped": false,
"secondary": false,
"burden": "twoHanded",
"weaponFeatures": [
{
"value": "protective",
"effectIds": [
"qTxADRsQnKiYfOiQ"
],
"actionIds": []
}
],
"weaponFeatures": [],
"attack": {
"name": "Attack",
"img": "icons/skills/melee/blood-slash-foam-red.webp",
@ -111,8 +103,8 @@
"effects": [
{
"name": "Protective",
"description": "Add your character's Tier to your Armor Score",
"img": "icons/skills/melee/shield-block-gray-orange.webp",
"description": "+1 to Armor Score",
"img": "icons/magic/defensive/shield-barrier-deflect-teal.webp",
"_id": "vnR4Zhnb0rOqwrFw",
"type": "base",
"system": {
@ -122,7 +114,7 @@
"phase": "initial",
"priority": 20,
"value": {
"max": "ITEM.@system.tier"
"max": "1"
}
}
]

View file

@ -17,19 +17,24 @@
<div class="form-group">
<label>{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.FIELDS.initiator.memberId.label"}}</label>
<div class="form-fields">
<select name="initiator.memberId" {{#if initiatorDisabled}}disabled{{/if}}>
<select class="initiator-member-field" {{#if initiatorDisabled}}disabled{{/if}}>
{{selectOptions initiatorOptions selected=initiator.memberId blank="" }}
</select>
</div>
</div>
{{formGroup tagTeamFields.initiator.fields.cost name="initiator.cost" value=initiator.cost disabled=initiatorDisabled localize=true }}
<div class="form-group">
<label>{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.FIELDS.initiator.cost.label"}}</label>
<div class="form-fields">
<input type="text" data-dtype="Number" value="{{initiator.cost}}" class="initiator-cost-field" {{#if initiatorDisabled}}disabled{{/if}} />
</div>
</div>
</div>
<footer>
<button type="button" data-action="startTagTeamRoll" {{#unless canStartTagTeam}}disabled{{/unless}}>{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.startTagTeamRoll"}} <i class="fa-solid fa-arrow-right-long"></i></button>
<div class="finish-tools {{#unless canStartTagTeam}}inactive{{/unless}}">
<span>{{localize "DAGGERHEART.APPLICATIONS.TagTeamSelect.openDialogForAll"}}</span>
<input type="checkbox" name="openForAllPlayers" {{#unless canStartTagTeam}}disabled{{/unless}} {{checked openForAllPlayers}} />
<input type="checkbox" class="openforall-field" {{#unless canStartTagTeam}}disabled{{/unless}} {{checked openForAllPlayers}} />
</div>
</footer>
</section>

View file

@ -1,9 +1,9 @@
<div class="item-description-outer-container">
{{#if features.length}}
{{#if features.length}}
<div class="item-description-outer-container">
<div class="item-description-container">
{{#each features as | feature |}}
<div><strong>{{localize feature.label}}</strong>: {{{localize feature.description}}}</div>
{{/each}}
</div>
{{/if}}
</div>
</div>
{{/if}}

View file

@ -1,9 +1,9 @@
<div class="item-description-outer-container">
{{#if features.length}}
{{#if features.length}}
<div class="item-description-outer-container">
<div class="item-description-container">
{{#each features as | feature |}}
<div><strong>{{localize feature.label}}</strong>: {{{localize feature.description}}}</div>
{{/each}}
</div>
{{/if}}
</div>
</div>
{{/if}}