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 getTokenData( actor, tokenId, target = undefined) { if ( target){ return Targets.extractTokenData(target) } const token = canvas.tokens.get(tokenId); return token == undefined ? Targets.buildActorTokenData(tokenId, actor) : Targets.extractTokenData(token); } 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 extractActorData(actor) { return { id: actor.id, name: actor.prototypeToken?.name ?? actor.name, img: actor.prototypeToken?.texture.src ?? actor.img ?? 'icons/svg/mystery-man.svg' } } static buildActorTokenData(tokenId, actor) { return { id: tokenId, name: actor?.name?? "pas d'acteur", 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, target => onSelectTarget(targets.find(it => it.id == target.id))) } } } 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 une seule) à attaquer!"); } return undefined; } }