mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 19:51:08 +01:00
* Fixed so genericStatuses aren't shown in activeEffectConfig if turned off. Fixed localization of genericStatuses in Inventory-ItemV2.
* Effects with statuses on them will now add them as full additional effects so they show up on the token.
* Revert "Effects with statuses on them will now add them as full additional effects so they show up on the token."
This reverts commit 5afd7ae686.
* Redid it a better way
* Fixed so multiple statuses on an effect are still treated as active
81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
export default class DHTokenHUD extends foundry.applications.hud.TokenHUD {
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ['daggerheart']
|
|
};
|
|
|
|
/** @override */
|
|
static PARTS = {
|
|
hud: {
|
|
root: true,
|
|
template: 'systems/daggerheart/templates/hud/tokenHUD.hbs'
|
|
}
|
|
};
|
|
|
|
async _prepareContext(options) {
|
|
const context = await super._prepareContext(options);
|
|
context.systemStatusEffects = Object.keys(context.statusEffects).reduce((acc, key) => {
|
|
const effect = context.statusEffects[key];
|
|
if (effect.systemEffect) acc[key] = effect;
|
|
|
|
return acc;
|
|
}, {});
|
|
|
|
const useGeneric = game.settings.get(
|
|
CONFIG.DH.id,
|
|
CONFIG.DH.SETTINGS.gameSettings.appearance
|
|
).showGenericStatusEffects;
|
|
context.genericStatusEffects = useGeneric
|
|
? Object.keys(context.statusEffects).reduce((acc, key) => {
|
|
const effect = context.statusEffects[key];
|
|
if (!effect.systemEffect) acc[key] = effect;
|
|
|
|
return acc;
|
|
}, {})
|
|
: null;
|
|
|
|
return context;
|
|
}
|
|
|
|
_getStatusEffectChoices() {
|
|
// Include all HUD-enabled status effects
|
|
const choices = {};
|
|
for (const status of CONFIG.statusEffects) {
|
|
if (
|
|
status.hud === false ||
|
|
(foundry.utils.getType(status.hud) === 'Object' &&
|
|
status.hud.actorTypes?.includes(this.document.actor.type) === false)
|
|
) {
|
|
continue;
|
|
}
|
|
choices[status.id] = {
|
|
_id: status._id,
|
|
id: status.id,
|
|
systemEffect: status.systemEffect,
|
|
title: game.i18n.localize(status.name ?? /** @deprecated since v12 */ status.label),
|
|
src: status.img ?? /** @deprecated since v12 */ status.icon,
|
|
isActive: false,
|
|
isOverlay: false
|
|
};
|
|
}
|
|
|
|
// Update the status of effects which are active for the token actor
|
|
const activeEffects = this.actor?.effects || [];
|
|
for (const effect of activeEffects) {
|
|
for (const statusId of effect.statuses) {
|
|
const status = choices[statusId];
|
|
if (!status) continue;
|
|
if (status._id) {
|
|
if (status._id !== effect.id) continue;
|
|
}
|
|
status.isActive = true;
|
|
if (effect.getFlag('core', 'overlay')) status.isOverlay = true;
|
|
}
|
|
}
|
|
|
|
// Flag status CSS class
|
|
for (const status of Object.values(choices)) {
|
|
status.cssClass = [status.isActive ? 'active' : null, status.isOverlay ? 'overlay' : null].filterJoin(' ');
|
|
}
|
|
return choices;
|
|
}
|
|
}
|