forked from GitHub-Mirrors/foundry-sw5e

Filled in some missing pieces in html for core upgrades. Looked mostly good on both Cyr and Jacob's accounts. I had a few questions about differences that were added from DND5e, they are as follows: less\original\npc.less line 34 - is the "li" before .creature-type necessary, not in dnd5e module\item\entity.js line 685 - dnd is game.user._id, we have game.user.data._id module\pixi\ability-template.js line 22- dnd is game.user._id, we have game.user.data._id templates\chat\item-card.html line 1- dnd has actor._id, we have actor.data._id
133 lines
3.8 KiB
JavaScript
133 lines
3.8 KiB
JavaScript
import LongRestDialog from "./long-rest.js";
|
|
|
|
/**
|
|
* A helper Dialog subclass for rolling Hit Dice on short rest
|
|
* @extends {Dialog}
|
|
*/
|
|
export default class ShortRestDialog extends Dialog {
|
|
constructor(actor, dialogData={}, options={}) {
|
|
super(dialogData, options);
|
|
|
|
/**
|
|
* Store a reference to the Actor entity which is resting
|
|
* @type {Actor}
|
|
*/
|
|
this.actor = actor;
|
|
|
|
/**
|
|
* Track the most recently used HD denomination for re-rendering the form
|
|
* @type {string}
|
|
*/
|
|
this._denom = null;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
static get defaultOptions() {
|
|
return mergeObject(super.defaultOptions, {
|
|
template: "systems/sw5e/templates/apps/short-rest.html",
|
|
classes: ["sw5e", "dialog"]
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/** @override */
|
|
getData() {
|
|
const data = super.getData();
|
|
|
|
// Determine Hit Dice
|
|
data.availableHD = this.actor.data.items.reduce((hd, item) => {
|
|
if ( item.type === "class" ) {
|
|
const d = item.data.data;
|
|
const denom = d.hitDice || "d6";
|
|
const available = parseInt(d.levels || 1) - parseInt(d.hitDiceUsed || 0);
|
|
hd[denom] = denom in hd ? hd[denom] + available : available;
|
|
}
|
|
return hd;
|
|
}, {});
|
|
data.canRoll = this.actor.data.data.attributes.hd > 0;
|
|
data.denomination = this._denom;
|
|
|
|
// Determine rest type
|
|
const variant = game.settings.get("sw5e", "restVariant");
|
|
data.promptNewDay = variant !== "epic"; // It's never a new day when only resting 1 minute
|
|
data.newDay = false; // It may be a new day, but not by default
|
|
return data;
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
|
|
/** @override */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
let btn = html.find("#roll-hd");
|
|
btn.click(this._onRollHitDie.bind(this));
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* Handle rolling a Hit Die as part of a Short Rest action
|
|
* @param {Event} event The triggering click event
|
|
* @private
|
|
*/
|
|
async _onRollHitDie(event) {
|
|
event.preventDefault();
|
|
const btn = event.currentTarget;
|
|
this._denom = btn.form.hd.value;
|
|
await this.actor.rollHitDie(this._denom);
|
|
this.render();
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* A helper constructor function which displays the Short Rest dialog and returns a Promise once it's workflow has
|
|
* been resolved.
|
|
* @param {Actor5e} actor
|
|
* @return {Promise}
|
|
*/
|
|
static async shortRestDialog({actor}={}) {
|
|
return new Promise((resolve, reject) => {
|
|
const dlg = new this(actor, {
|
|
title: game.i18n.localize("SW5E.ShortRest"),
|
|
buttons: {
|
|
rest: {
|
|
icon: '<i class="fas fa-bed"></i>',
|
|
label: game.i18n.localize("SW5E.Rest"),
|
|
callback: html => {
|
|
let newDay = false;
|
|
if (game.settings.get("sw5e", "restVariant") === "gritty")
|
|
newDay = html.find('input[name="newDay"]')[0].checked;
|
|
resolve(newDay);
|
|
}
|
|
},
|
|
cancel: {
|
|
icon: '<i class="fas fa-times"></i>',
|
|
label: game.i18n.localize("Cancel"),
|
|
callback: reject
|
|
}
|
|
},
|
|
close: reject
|
|
});
|
|
dlg.render(true);
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
|
|
/**
|
|
* A helper constructor function which displays the Long Rest confirmation dialog and returns a Promise once it's
|
|
* workflow has been resolved.
|
|
* @deprecated
|
|
* @param {Actor5e} actor
|
|
* @return {Promise}
|
|
*/
|
|
static async longRestDialog({actor}={}) {
|
|
console.warn("WARNING! ShortRestDialog.longRestDialog has been deprecated, use LongRestDialog.longRestDialog instead.");
|
|
return LongRestDialog.longRestDialog(...arguments);
|
|
}
|
|
}
|