mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 03:31:07 +01:00
* Temp * Finished Evolved * Fixed hybrid * Changed generalConfig.tiers to be number based * Weaponhandling while in beastform * Added unarmed strike in sidebar * Added DamageEnricher * Added effect enricher * Corrected downtime buttons and actions * Added BeastformTooltip * Split the BeastformDialog into parts with tabs * Added temp beastform features * rollData change * Improvement * character.getRollData cleanup
130 lines
5.8 KiB
JavaScript
130 lines
5.8 KiB
JavaScript
export default class DhTooltipManager extends foundry.helpers.interaction.TooltipManager {
|
|
async activate(element, options = {}) {
|
|
const { TextEditor } = foundry.applications.ux;
|
|
|
|
let html = options.html;
|
|
if (element.dataset.tooltip?.startsWith('#item#')) {
|
|
const splitValues = element.dataset.tooltip.slice(6).split('#action#');
|
|
const itemUuid = splitValues[0];
|
|
const actionId = splitValues.length > 1 ? splitValues[1] : null;
|
|
|
|
const baseItem = await foundry.utils.fromUuid(itemUuid);
|
|
const item = actionId ? baseItem.system.actions.find(x => x.id === actionId) : baseItem;
|
|
if (item) {
|
|
const type = actionId ? 'action' : item.type;
|
|
const description = await TextEditor.enrichHTML(item.system.description);
|
|
for (let feature of item.system.features) {
|
|
feature.system.enrichedDescription = await TextEditor.enrichHTML(feature.system.description);
|
|
}
|
|
|
|
html = await foundry.applications.handlebars.renderTemplate(
|
|
`systems/daggerheart/templates/ui/tooltip/${type}.hbs`,
|
|
{
|
|
item: item,
|
|
description: description,
|
|
config: CONFIG.DH
|
|
}
|
|
);
|
|
|
|
this.tooltip.innerHTML = html;
|
|
options.direction = this._determineItemTooltipDirection(element);
|
|
}
|
|
} else {
|
|
const attack = element.dataset.tooltip?.startsWith('#attack#');
|
|
if (attack) {
|
|
const actorUuid = element.dataset.tooltip.slice(8);
|
|
const actor = await foundry.utils.fromUuid(actorUuid);
|
|
const attack = actor.system.attack;
|
|
|
|
const description = await TextEditor.enrichHTML(attack.description);
|
|
html = await foundry.applications.handlebars.renderTemplate(
|
|
`systems/daggerheart/templates/ui/tooltip/attack.hbs`,
|
|
{
|
|
attack: attack,
|
|
description: description,
|
|
parent: actor,
|
|
config: CONFIG.DH
|
|
}
|
|
);
|
|
|
|
this.tooltip.innerHTML = html;
|
|
}
|
|
|
|
const shortRest = element.dataset.tooltip?.startsWith('#shortRest#');
|
|
const longRest = element.dataset.tooltip?.startsWith('#longRest#');
|
|
if (shortRest || longRest) {
|
|
const key = element.dataset.tooltip.slice(shortRest ? 11 : 10);
|
|
const downtimeOptions = shortRest
|
|
? CONFIG.DH.GENERAL.defaultRestOptions.shortRest()
|
|
: CONFIG.DH.GENERAL.defaultRestOptions.longRest();
|
|
|
|
const move = downtimeOptions[key];
|
|
const description = await TextEditor.enrichHTML(move.description);
|
|
html = await foundry.applications.handlebars.renderTemplate(
|
|
`systems/daggerheart/templates/ui/tooltip/downtime.hbs`,
|
|
{
|
|
move: move,
|
|
description: description
|
|
}
|
|
);
|
|
|
|
this.tooltip.innerHTML = html;
|
|
options.direction = this._determineItemTooltipDirection(
|
|
element,
|
|
this.constructor.TOOLTIP_DIRECTIONS.RIGHT
|
|
);
|
|
}
|
|
|
|
const isAdvantage = element.dataset.tooltip?.startsWith('#advantage#');
|
|
const isDisadvantage = element.dataset.tooltip?.startsWith('#disadvantage#');
|
|
if (isAdvantage || isDisadvantage) {
|
|
const actorUuid = element.dataset.tooltip.slice(isAdvantage ? 11 : 14);
|
|
const actor = await foundry.utils.fromUuid(actorUuid);
|
|
|
|
if (actor) {
|
|
html = await foundry.applications.handlebars.renderTemplate(
|
|
`systems/daggerheart/templates/ui/tooltip/advantage.hbs`,
|
|
{
|
|
sources: isAdvantage ? actor.system.advantageSources : actor.system.disadvantageSources
|
|
}
|
|
);
|
|
|
|
this.tooltip.innerHTML = html;
|
|
}
|
|
}
|
|
}
|
|
|
|
super.activate(element, { ...options, html: html });
|
|
}
|
|
|
|
_determineItemTooltipDirection(element, prefered = this.constructor.TOOLTIP_DIRECTIONS.LEFT) {
|
|
const pos = element.getBoundingClientRect();
|
|
const dirs = this.constructor.TOOLTIP_DIRECTIONS;
|
|
switch (prefered) {
|
|
case this.constructor.TOOLTIP_DIRECTIONS.LEFT:
|
|
return dirs[
|
|
pos.x - this.tooltip.offsetWidth < 0
|
|
? this.constructor.TOOLTIP_DIRECTIONS.DOWN
|
|
: this.constructor.TOOLTIP_DIRECTIONS.LEFT
|
|
];
|
|
case this.constructor.TOOLTIP_DIRECTIONS.UP:
|
|
return dirs[
|
|
pos.y - this.tooltip.offsetHeight < 0
|
|
? this.constructor.TOOLTIP_DIRECTIONS.RIGHT
|
|
: this.constructor.TOOLTIP_DIRECTIONS.UP
|
|
];
|
|
case this.constructor.TOOLTIP_DIRECTIONS.RIGHT:
|
|
return dirs[
|
|
pos.x + this.tooltip.offsetWidth > document.body.clientWidth
|
|
? this.constructor.TOOLTIP_DIRECTIONS.DOWN
|
|
: this.constructor.TOOLTIP_DIRECTIONS.RIGHT
|
|
];
|
|
case this.constructor.TOOLTIP_DIRECTIONS.DOWN:
|
|
return dirs[
|
|
pos.y + this.tooltip.offsetHeight > document.body.clientHeight
|
|
? this.constructor.TOOLTIP_DIRECTIONS.LEFT
|
|
: this.constructor.TOOLTIP_DIRECTIONS.DOWN
|
|
];
|
|
}
|
|
}
|
|
}
|