mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-01-12 19:51:08 +01:00
* Added prettier with automatic useage on pre-commit to avoid style breakage * Ran Prettier on the project
115 lines
4.3 KiB
JavaScript
115 lines
4.3 KiB
JavaScript
export default class DhpChatLog extends foundry.applications.sidebar.tabs.ChatLog {
|
|
constructor() {
|
|
super();
|
|
|
|
this.targetTemplate = {
|
|
activeLayer: undefined,
|
|
document: undefined,
|
|
object: undefined,
|
|
minimizedSheets: [],
|
|
config: undefined,
|
|
targets: undefined
|
|
};
|
|
this.setupHooks();
|
|
}
|
|
|
|
addChatListeners = async (app, html, data) => {
|
|
html.querySelectorAll('.roll-damage-button').forEach(element =>
|
|
element.addEventListener('click', event => this.onRollDamage(event, data.message))
|
|
);
|
|
html.querySelectorAll('.target-container').forEach(element =>
|
|
element.addEventListener('hover', hover(this.hoverTarget, this.unhoverTarget))
|
|
); // ????
|
|
// html.find('.target-container').mouseout(this.unhoverTarget);
|
|
html.querySelectorAll('.damage-button').forEach(element => element.addEventListener('click', this.onDamage));
|
|
html.querySelectorAll('.healing-button').forEach(element => element.addEventListener('click', this.onHealing));
|
|
html.querySelectorAll('.target-indicator').forEach(element =>
|
|
element.addEventListener('click', this.onToggleTargets)
|
|
);
|
|
html.querySelectorAll('.advantage').forEach(element => element.hover(this.hoverAdvantage)); // ??
|
|
html.querySelectorAll('.advantage').forEach(element =>
|
|
element.addEventListener('click', event => this.selectAdvantage.bind(this)(event, data.message))
|
|
);
|
|
html.querySelectorAll('.ability-use-button').forEach(element =>
|
|
element.addEventListener('click', this.abilityUseButton.bind(this)(event, data.message))
|
|
);
|
|
};
|
|
|
|
setupHooks() {
|
|
Hooks.on('renderChatMessageHTML', this.addChatListeners.bind());
|
|
}
|
|
|
|
close(options) {
|
|
Hooks.off('renderChatMessageHTML', this.addChatListeners);
|
|
super.close(options);
|
|
}
|
|
|
|
onRollDamage = async (event, message) => {
|
|
event.stopPropagation();
|
|
|
|
await game.user.character.damageRoll(message.system.damage, event.shiftKey);
|
|
};
|
|
|
|
hoverTarget = event => {
|
|
event.stopPropagation();
|
|
const token = canvas.tokens.get(event.currentTarget.dataset.token);
|
|
if (!token.controlled) token._onHoverIn(event, { hoverOutOthers: true });
|
|
};
|
|
|
|
unhoverTarget = event => {
|
|
const token = canvas.tokens.get(event.currentTarget.dataset.token);
|
|
if (!token.controlled) token._onHoverOut(event);
|
|
};
|
|
|
|
onDamage = async event => {
|
|
event.stopPropagation();
|
|
const damage = Number.parseInt(event.currentTarget.dataset.value);
|
|
const targets = Array.from(game.user.targets);
|
|
|
|
if (targets.length === 0)
|
|
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
|
|
|
for (var target of targets) {
|
|
await target.actor.takeDamage(damage, event.currentTarget.dataset.type);
|
|
}
|
|
};
|
|
|
|
onHealing = async event => {
|
|
event.stopPropagation();
|
|
const healing = Number.parseInt(event.currentTarget.dataset.value);
|
|
const targets = Array.from(game.user.targets);
|
|
|
|
if (targets.length === 0)
|
|
ui.notifications.info(game.i18n.localize('DAGGERHEART.Notification.Info.NoTargetsSelected'));
|
|
|
|
for (var target of targets) {
|
|
await target.actor.takeHealing(healing, event.currentTarget.dataset.type);
|
|
}
|
|
};
|
|
|
|
onToggleTargets = async event => {
|
|
event.stopPropagation();
|
|
$($(event.currentTarget).parent()).find('.target-container').toggleClass('hidden');
|
|
};
|
|
|
|
hoverAdvantage = event => {
|
|
$(event.currentTarget).siblings('.advantage').toggleClass('unused');
|
|
};
|
|
|
|
selectAdvantage = async (event, message) => {
|
|
event.stopPropagation();
|
|
|
|
const updateMessage = game.messages.get(message._id);
|
|
await updateMessage.update({ system: { advantageSelected: event.currentTarget.id === 'hope' ? 1 : 2 } });
|
|
|
|
$(event.currentTarget).siblings('.advantage').off('click');
|
|
$(event.currentTarget).off('click');
|
|
};
|
|
|
|
abilityUseButton = async (event, message) => {
|
|
event.stopPropagation();
|
|
|
|
const action = message.system.actions[Number.parseInt(event.currentTarget.dataset.index)];
|
|
await game.user.character.useAction(action);
|
|
};
|
|
}
|