Added effect enricher

This commit is contained in:
WBHarry 2025-07-19 22:19:55 +02:00
parent 6772a8fbd8
commit d3836fbeeb
8 changed files with 77 additions and 44 deletions

View file

@ -3,7 +3,7 @@ import * as applications from './module/applications/_module.mjs';
import * as models from './module/data/_module.mjs'; import * as models from './module/data/_module.mjs';
import * as documents from './module/documents/_module.mjs'; import * as documents from './module/documents/_module.mjs';
import RegisterHandlebarsHelpers from './module/helpers/handlebarsHelper.mjs'; import RegisterHandlebarsHelpers from './module/helpers/handlebarsHelper.mjs';
import { enricherConfig } from './module/enrichers/_module.mjs'; import { enricherConfig, enricherRenderSetup } from './module/enrichers/_module.mjs';
import { getCommandTarget, rollCommandToJSON } from './module/helpers/utils.mjs'; import { getCommandTarget, rollCommandToJSON } from './module/helpers/utils.mjs';
import { NarrativeCountdowns } from './module/applications/ui/countdowns.mjs'; import { NarrativeCountdowns } from './module/applications/ui/countdowns.mjs';
import { DualityRollColor } from './module/data/settings/Appearance.mjs'; import { DualityRollColor } from './module/data/settings/Appearance.mjs';
@ -168,45 +168,15 @@ Hooks.on('ready', () => {
Hooks.once('dicesoniceready', () => {}); Hooks.once('dicesoniceready', () => {});
Hooks.on('renderChatMessageHTML', (_, element) => { Hooks.on('renderChatMessageHTML', (_, element) => {
element enricherRenderSetup(element);
.querySelectorAll('.enriched-damage-button')
.forEach(element => element.addEventListener('click', renderDamageButton));
element
.querySelectorAll('.duality-roll-button')
.forEach(element => element.addEventListener('click', renderDualityButton));
element
.querySelectorAll('.measured-template-button')
.forEach(element => element.addEventListener('click', renderMeasuredTemplate));
}); });
Hooks.on('renderJournalEntryPageProseMirrorSheet', (_, element) => { Hooks.on('renderJournalEntryPageProseMirrorSheet', (_, element) => {
element enricherRenderSetup(element);
.querySelectorAll('.enriched-damage-button')
.forEach(element => element.addEventListener('click', renderDamageButton));
element
.querySelectorAll('.duality-roll-button')
.forEach(element => element.addEventListener('click', renderDualityButton));
element
.querySelectorAll('.measured-template-button')
.forEach(element => element.addEventListener('click', renderMeasuredTemplate));
}); });
Hooks.on('renderHandlebarsApplication', (_, element) => { Hooks.on('renderHandlebarsApplication', (_, element) => {
element enricherRenderSetup(element);
.querySelectorAll('.enriched-damage-button')
.forEach(element => element.addEventListener('click', renderDamageButton));
element
.querySelectorAll('.duality-roll-button')
.forEach(element => element.addEventListener('click', renderDualityButton));
element
.querySelectorAll('.measured-template-button')
.forEach(element => element.addEventListener('click', renderMeasuredTemplate));
}); });
Hooks.on('chatMessage', (_, message) => { Hooks.on('chatMessage', (_, message) => {

View file

@ -1590,7 +1590,8 @@
"sendToVault": "Send to Vault", "sendToVault": "Send to Vault",
"sendToLoadout": "Send to Loadout", "sendToLoadout": "Send to Loadout",
"makeDeathMove": "Make a Death Move", "makeDeathMove": "Make a Death Move",
"rangeAndTarget": "Range & Target" "rangeAndTarget": "Range & Target",
"dragApplyEffect": "Drag effect to apply it to an actor"
} }
} }
} }

View file

@ -1,5 +1,3 @@
import { rollCommandToJSON } from '../helpers/utils.mjs';
export default function DhDamageEnricher(match, _options) { export default function DhDamageEnricher(match, _options) {
const parts = match[1].split('|').map(x => x.trim()); const parts = match[1].split('|').map(x => x.trim());
@ -25,8 +23,7 @@ export default function DhDamageEnricher(match, _options) {
return getDamageMessage(value, type, match[0]); return getDamageMessage(value, type, match[0]);
} }
export function getDamageMessage(damage, type, defaultElement) { function getDamageMessage(damage, type, defaultElement) {
const dualityElement = document.createElement('span');
const typeIcons = type const typeIcons = type
.replace('[', '') .replace('[', '')
.replace(']', '') .replace(']', '')
@ -41,6 +38,7 @@ export function getDamageMessage(damage, type, defaultElement) {
const iconNodes = typeIcons.map(x => `<i class="fa-solid ${x}"></i>`).join(''); const iconNodes = typeIcons.map(x => `<i class="fa-solid ${x}"></i>`).join('');
const dualityElement = document.createElement('span');
dualityElement.innerHTML = ` dualityElement.innerHTML = `
<button class="enriched-damage-button" <button class="enriched-damage-button"
data-value="${damage}" data-value="${damage}"

View file

@ -8,7 +8,7 @@ export default function DhDualityRollEnricher(match, _options) {
return getDualityMessage(roll); return getDualityMessage(roll);
} }
export function getDualityMessage(roll) { function getDualityMessage(roll) {
const traitLabel = const traitLabel =
roll.trait && abilities[roll.trait] roll.trait && abilities[roll.trait]
? game.i18n.format('DAGGERHEART.GENERAL.check', { ? game.i18n.format('DAGGERHEART.GENERAL.check', {

View file

@ -0,0 +1,19 @@
export default async function DhEffectEnricher(match, _options) {
const effect = await foundry.utils.fromUuid(match[1]);
if (!effect) return match[0];
const dualityElement = document.createElement('span');
dualityElement.innerHTML = `
<a class="flexrow enriched-effect"
data-link
draggable="true"
data-uuid="${match[1]}"
data-tooltip="${game.i18n.localize('DAGGERHEART.UI.Tooltip.dragApplyEffect')}"
>
<img src="icons/svg/aura.svg" style="width: 24px;" />
<span>${effect.name}</span>
</a>
`;
return dualityElement;
}

View file

@ -1,8 +1,9 @@
import { default as DhDamageEnricher } from './DamageEnricher.mjs'; import { default as DhDamageEnricher, renderDamageButton } from './DamageEnricher.mjs';
import { default as DhDualityRollEnricher } from './DualityRollEnricher.mjs'; import { default as DhDualityRollEnricher, renderDualityButton } from './DualityRollEnricher.mjs';
import { default as DhTemplateEnricher } from './TemplateEnricher.mjs'; import { default as DhEffectEnricher } from './EffectEnricher.mjs';
import { default as DhTemplateEnricher, renderMeasuredTemplate } from './TemplateEnricher.mjs';
export { DhDamageEnricher, DhDualityRollEnricher, DhTemplateEnricher }; export { DhDamageEnricher, DhDualityRollEnricher, DhEffectEnricher, DhTemplateEnricher };
export const enricherConfig = [ export const enricherConfig = [
{ {
@ -13,8 +14,30 @@ export const enricherConfig = [
pattern: /\[\[\/dr\s?(.*?)\]\]/g, pattern: /\[\[\/dr\s?(.*?)\]\]/g,
enricher: DhDualityRollEnricher enricher: DhDualityRollEnricher
}, },
{
pattern: /^@Effect\[(.*)\]$/g,
enricher: DhEffectEnricher
},
{ {
pattern: /^@Template\[(.*)\]$/g, pattern: /^@Template\[(.*)\]$/g,
enricher: DhTemplateEnricher enricher: DhTemplateEnricher
} }
]; ];
export const enricherRenderSetup = element => {
element
.querySelectorAll('.enriched-damage-button')
.forEach(element => element.addEventListener('click', renderDamageButton));
element
.querySelectorAll('.duality-roll-button')
.forEach(element => element.addEventListener('click', renderDualityButton));
element
.querySelectorAll('.measured-template-button')
.forEach(element => element.addEventListener('click', renderMeasuredTemplate));
// element
// .querySelectorAll('.enriched-effect')
// .forEach(element => element.addEventListener('dragstart', dragEnrichedEffect));
};

View file

@ -365,6 +365,7 @@
width: 80px; width: 80px;
} }
} }
button { button {
&.inner-button { &.inner-button {
--button-size: 1.25rem; --button-size: 1.25rem;

View file

@ -4,6 +4,27 @@
.dice-title { .dice-title {
display: none; display: none;
} }
.message-content {
.enriched-effect {
display: flex;
align-items: center;
border: 1px solid black;
width: fit-content;
padding: 0 2px 0 0;
border-radius: 6px;
color: @dark;
background-image: url(../assets/parchments/dh-parchment-light.png);
&:hover {
text-shadow: none;
}
span {
white-space: nowrap;
}
}
}
} }
fieldset.daggerheart.chat { fieldset.daggerheart.chat {