foundryvtt-reve-de-dragon/module/targets.js
Vincent Vandemeulebrouck 3b06bd382b Afficher le nom du token au lieu du nom d'Acteur
Dans les messages d'automatisation de combat, le nom des
tokens est utilisé au lieu d'utiliser le nom de l'acteur.

Ceci permet de ne pas dévoiler un nom générique (Villageois)
si le token a un nom personnalisé.
2024-11-03 22:01:02 +01:00

57 lines
1.7 KiB
JavaScript

import { ENTITE_NONINCARNE } from "./constants.js";
import { DialogSelect } from "./dialog-select.js";
export class Targets {
static listTargets() {
return Array.from(game.user.targets);
}
static hasTargets() {
return Targets.listTargets().length > 0;
}
static extractTokenData(target) {
return { id: target?.id, name: target?.document.name, img: target?.document.texture.src ?? target?.actor.img ?? 'icons/svg/mystery-man.svg' };
}
static buildActorTokenData(tokenId, actor) {
return { id: tokenId, name: actor.name, img: actor.img ?? 'icons/svg/mystery-man.svg' };
}
static isTargetEntite(target) {
return target?.actor.type == 'entite' && target?.actor.system.definition.typeentite == ENTITE_NONINCARNE;
}
static async selectOneTargetToken(onSelectTarget = target => { }) {
const targets = Targets.listTargets()
switch (targets.length) {
case 0:
return
case 1:
onSelectTarget(targets[0])
return
default:
{
const selectData = {
title: "Choisir une cible",
label: "Choisir une seule des cibles",
list: targets.map(it => Targets.extractTokenData(it))
};
DialogSelect.select(selectData, onSelectTarget)
}
}
}
static getTarget(options = { warn: true }) {
const targets = Targets.listTargets();
switch (targets.length) {
case 1:
return targets[0];
case 0:
if (options.warn) ui.notifications.warn("Vous devez choisir une cible à attaquer!");
break;
default:
if (options.warn) ui.notifications.warn("Vous devez choisir une cible (et <strong>une seule</strong>) à attaquer!");
}
return undefined;
}
}