diff --git a/module/applications/sheets-configs/activeEffectConfig.mjs b/module/applications/sheets-configs/activeEffectConfig.mjs index aa6d9d54..d6dcd499 100644 --- a/module/applications/sheets-configs/activeEffectConfig.mjs +++ b/module/applications/sheets-configs/activeEffectConfig.mjs @@ -151,12 +151,15 @@ export default class DhActiveEffectConfig extends foundry.applications.sheets.Ac index, defaultPriority ) ?? - renderTemplate('systems/daggerheart/templates/sheets/activeEffect/change.hbs', { - change, - index, - defaultPriority, - fields - }) + foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/sheets/activeEffect/change.hbs', + { + change, + index, + defaultPriority, + fields + } + ) ); } } diff --git a/module/applications/ui/effectsDisplay.mjs b/module/applications/ui/effectsDisplay.mjs index 8c0c939c..3bc5e716 100644 --- a/module/applications/ui/effectsDisplay.mjs +++ b/module/applications/ui/effectsDisplay.mjs @@ -1,3 +1,4 @@ +import { getIconVisibleActiveEffects } from '../../helpers/utils.mjs'; import { RefreshType } from '../../systemRegistration/socket.mjs'; const { HandlebarsApplicationMixin, ApplicationV2 } = foundry.applications.api; @@ -72,7 +73,7 @@ export default class DhEffectsDisplay extends HandlebarsApplicationMixin(Applica ? game.user.character : null : canvas.tokens.controlled[0].actor; - return actor?.getActiveEffects() ?? []; + return getIconVisibleActiveEffects(actor?.getActiveEffects() ?? []); }; toggleHidden(token, focused) { diff --git a/module/canvas/placeables/token.mjs b/module/canvas/placeables/token.mjs index 7bd92226..05140d76 100644 --- a/module/canvas/placeables/token.mjs +++ b/module/canvas/placeables/token.mjs @@ -1,3 +1,4 @@ +import { getIconVisibleActiveEffects } from '../../helpers/utils.mjs'; import DhMeasuredTemplate from './measuredTemplate.mjs'; export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { @@ -20,7 +21,7 @@ export default class DhTokenPlaceable extends foundry.canvas.placeables.Token { this.effects.overlay = null; // Categorize effects - const activeEffects = this.actor?.getActiveEffects() ?? []; + const activeEffects = getIconVisibleActiveEffects(Array.from(this.actor?.allApplicableEffects() ?? [])); const overlayEffect = activeEffects.findLast(e => e.img && e.getFlag?.('core', 'overlay')); // Draw effects diff --git a/module/helpers/utils.mjs b/module/helpers/utils.mjs index 7ca2c41c..980349ba 100644 --- a/module/helpers/utils.mjs +++ b/module/helpers/utils.mjs @@ -500,3 +500,12 @@ export function htmlToText(html) { return tempDivElement.textContent || tempDivElement.innerText || ''; } + +export function getIconVisibleActiveEffects(effects) { + return effects.filter(effect => { + const alwaysShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.ALWAYS; + const conditionalShown = effect.showIcon === CONST.ACTIVE_EFFECT_SHOW_ICON.CONDITIONAL && !effect.transfer; // TODO: system specific logic + + return !effect.disabled && (alwaysShown || conditionalShown); + }); +} diff --git a/styles/less/sheets/activeEffects/activeEffects.less b/styles/less/sheets/activeEffects/activeEffects.less new file mode 100644 index 00000000..f1879463 --- /dev/null +++ b/styles/less/sheets/activeEffects/activeEffects.less @@ -0,0 +1,11 @@ +.application.sheet.daggerheart.dh-style.active-effect-config { + .tab.changes { + gap: 0; + + header { + div { + text-align: center; + } + } + } +} diff --git a/styles/less/sheets/index.less b/styles/less/sheets/index.less index 1bdb451a..e5ffbf3e 100644 --- a/styles/less/sheets/index.less +++ b/styles/less/sheets/index.less @@ -42,3 +42,5 @@ @import './rollTables/sheet.less'; @import './actions/actions.less'; + +@import './activeEffects/activeEffects.less'; diff --git a/templates/sheets/activeEffect/change.hbs b/templates/sheets/activeEffect/change.hbs index 60cb0d85..30f643b8 100644 --- a/templates/sheets/activeEffect/change.hbs +++ b/templates/sheets/activeEffect/change.hbs @@ -1,6 +1,6 @@