mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-18 07:59:03 +01:00
* Update the death move descriptions * Renamed to DhDeathMove * Partial Fate Roll creation and Fate Roll Enricher (/fr) * Hide stuff not required for fate roll * Hide formula display; code removal; start to add Fear die as a choice for Fate roll * Fix chat message display; start moving towards supporting Hope and Fear for Fate roll * /fr now supports type=X, where X is Hope or Fear, if not supplied, defaults to Hope * Fixed DSN rolling; removed console messages; chat message clean up * Add localisation entry * Trying to sort out the button for the fate roll * Style the fate message based on Hope/Fear colors. * Partial improvement on the fate template buttons - chat display is correct, but the roll dialog is wrong * Fixed enricher button; localization fixes; debug cleanup * Error checking for the fate type parsing in all potential problem locations * Added localization for the fate type parsing error * Start on Avoid Death death move * debug stuff * More death moves setup/testing * Avoid fate scars update in place, with scars migrating to an integer value. * Remove some debug code; add Blaze Of Glory shell * Start on Guaranteed Critical for Blaze of Glory * Partial implementation of Blaze of Glory * Dice/critical checks/tests * Moved detection of guaranteed critical to before the roll dialog is created, so it can be skipped; removed debug code * Remove debug * Update Blaze of Glory effect description * Risk It All - critical roll - clear all stress and HP * Auto remove all marked stress and HP for Risk It All, if Hope value rolled covers it. * Display the Death Move description in chat expanded if the appropriate config setting is on * Made the Blaze of Glory ActiveEffect image use configured version * Update the current Hope value if the scar value change affects it * Scars management in the Character details editor * Separate less file for the Death Moves instead of reusing Downtime * Added result messages to the Death Move chat output and removed debug statements * Some localization, style and smaller changes * Fixed RiskItAll resource handling method * Risk It All success chat message start * [Add] Hope/Scar Interplay (#1531) * Migrated character.maxHope to homebrew settings * Added a visual for scars * . * . * Pass the hope value in the button data; skeleton risk it all dialog to fill out. * Start on risk it dialog * More dialog stuff * Remove non-existent field * Dialog templating and logic * . * Ensure effect is Applied to Actor (#1547) Co-authored-by: Chris Ryan <chrisr@blackhole> * [Fix] 1548 - Standalone Item Add Actions (#1549) * Fixed so that items not on an actor don't error out on creating actions * Fixed deletion of items error * Raised version * Fix the sliders to do the correct maximums * Pass the actor id through the button; fix /dr and /fr flavor text * Remove debug message --------- Co-authored-by: Chris Ryan <chrisr@blackhole> Co-authored-by: WBHarry <williambjrklund@gmail.com> Co-authored-by: WBHarry <89362246+WBHarry@users.noreply.github.com>
94 lines
3.4 KiB
JavaScript
94 lines
3.4 KiB
JavaScript
const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api;
|
|
export default class RiskItAllDialog extends HandlebarsApplicationMixin(ApplicationV2) {
|
|
constructor(actor, resourceValue) {
|
|
super({});
|
|
|
|
this.actor = actor;
|
|
this.resourceValue = resourceValue;
|
|
this.choices = {
|
|
hitPoints: 0,
|
|
stress: 0
|
|
};
|
|
}
|
|
|
|
get title() {
|
|
return game.i18n.format('DAGGERHEART.APPLICATIONS.RiskItAllDialog.title', { name: this.actor.name });
|
|
}
|
|
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ['daggerheart', 'dh-style', 'dialog', 'views', 'risk-it-all'],
|
|
position: { width: 280, height: 'auto' },
|
|
window: { icon: 'fa-solid fa-dice fa-xl' },
|
|
actions: {
|
|
finish: RiskItAllDialog.#finish
|
|
}
|
|
};
|
|
|
|
static PARTS = {
|
|
application: {
|
|
id: 'risk-it-all',
|
|
template: 'systems/daggerheart/templates/dialogs/riskItAllDialog.hbs'
|
|
}
|
|
};
|
|
|
|
_attachPartListeners(partId, htmlElement, options) {
|
|
super._attachPartListeners(partId, htmlElement, options);
|
|
|
|
for (const input of htmlElement.querySelectorAll('.resource-container input'))
|
|
input.addEventListener('change', this.updateChoice.bind(this));
|
|
}
|
|
|
|
async _prepareContext(_options) {
|
|
const context = await super._prepareContext(_options);
|
|
context.resourceValue = this.resourceValue;
|
|
context.maxHitPointsValue = Math.min(this.resourceValue, this.actor.system.resources.hitPoints.max);
|
|
context.maxStressValue = Math.min(this.resourceValue, this.actor.system.resources.stress.max);
|
|
context.remainingResource = this.resourceValue - this.choices.hitPoints - this.choices.stress;
|
|
context.unfinished = context.remainingResource !== 0;
|
|
|
|
context.choices = this.choices;
|
|
context.final = {
|
|
hitPoints: {
|
|
value: this.actor.system.resources.hitPoints.value - this.choices.hitPoints,
|
|
max: this.actor.system.resources.hitPoints.max
|
|
},
|
|
stress: {
|
|
value: this.actor.system.resources.stress.value - this.choices.stress,
|
|
max: this.actor.system.resources.stress.max
|
|
}
|
|
};
|
|
|
|
context;
|
|
|
|
return context;
|
|
}
|
|
|
|
updateChoice(event) {
|
|
let value = Number.parseInt(event.target.value);
|
|
const choiceKey = event.target.dataset.choice;
|
|
const actorValue = this.actor.system.resources[choiceKey].value;
|
|
const remaining = this.resourceValue - this.choices.hitPoints - this.choices.stress;
|
|
const changeAmount = value - this.choices[choiceKey];
|
|
|
|
/* If trying to increase beyond remaining resource points, just increase to max available */
|
|
if (remaining - changeAmount < 0) value = this.choices[choiceKey] + remaining;
|
|
else if (actorValue - value < 0) value = actorValue;
|
|
|
|
this.choices[choiceKey] = value;
|
|
this.render();
|
|
}
|
|
|
|
static async #finish() {
|
|
const resourceUpdate = Object.keys(this.choices).reduce((acc, resourceKey) => {
|
|
const value = this.actor.system.resources[resourceKey].value - this.choices[resourceKey];
|
|
acc[resourceKey] = { value };
|
|
return acc;
|
|
}, {});
|
|
|
|
await this.actor.update({
|
|
'system.resources': resourceUpdate
|
|
});
|
|
|
|
this.close();
|
|
}
|
|
}
|