import MournbladeCYD2ActorSheetV2 from "./base-actor-sheet.mjs"; import { MournbladeCYD2Utility } from "../../mournblade-cyd2-utility.js"; export default class MournbladeCYD2PersonnageSheet extends MournbladeCYD2ActorSheetV2 { /** @override */ static DEFAULT_OPTIONS = { ...super.DEFAULT_OPTIONS, classes: [...super.DEFAULT_OPTIONS.classes], window: { ...super.DEFAULT_OPTIONS.window, title: "SHEETS.Actor.personnage", }, actions: { ...super.DEFAULT_OPTIONS.actions, removeLinkedActor: MournbladeCYD2PersonnageSheet.#onRemoveLinkedActor, }, }; /** @override */ static PARTS = { sheet: { template: "systems/fvtt-mournblade-cyd-2-0/templates/actor-sheet.hbs", }, }; /** @override */ tabGroups = { primary: "principal" }; /** @override */ async _prepareContext() { const context = await super._prepareContext(); const actor = this.document; context.combativiteList = MournbladeCYD2Utility.getCombativiteList(actor.system.sante.nbcombativite); context.ameList = MournbladeCYD2Utility.getAmeList(actor.system.ame.nbame, actor.getAmeMax?.() ?? 0); context.ameMaxList = MournbladeCYD2Utility.getAmeMaxList(actor.system.ame.nbame); context.skills = actor.getSkills?.() ?? []; context.armes = foundry.utils.duplicate(actor.getWeapons?.() ?? []); context.protections = foundry.utils.duplicate(actor.getArmors?.() ?? []); context.dons = foundry.utils.duplicate(actor.getDons?.() ?? []); context.pactes = foundry.utils.duplicate(actor.getPactes?.() ?? []); context.tendances = foundry.utils.duplicate(actor.getTendances?.() ?? []); context.runes = foundry.utils.duplicate(actor.getRunes?.() ?? []); context.traitsChaotiques = foundry.utils.duplicate(actor.getTraitsChaotiques?.() ?? []); context.traitsEspeces = foundry.utils.duplicate(actor.getTraitsEspeces?.() ?? []); context.traitsDemoniaques = foundry.utils.duplicate(actor.getItemsByType?.("traitdemoniaque") ?? []); context.faiblessesDemoniaques = foundry.utils.duplicate(actor.getFaiblessesDemoniaques?.() ?? []); context.pouvoirsElementaires = foundry.utils.duplicate(actor.getItemsByType?.("pouvoirselementaire") ?? []); context.capacitesAutomata = foundry.utils.duplicate(actor.getItemsByType?.("capaciteautomata") ?? []); context.profil = actor.getProfil?.() ?? null; context.historiques = foundry.utils.duplicate(actor.getHistoriques?.() ?? []); context.combat = actor.getCombatValues?.() ?? {}; context.equipements = foundry.utils.duplicate(actor.getEquipments?.() ?? []); context.monnaies = foundry.utils.duplicate(actor.getMonnaies?.() ?? []); context.runeEffects = foundry.utils.duplicate(actor.getRuneEffects?.() ?? []); context.ressources = foundry.utils.duplicate(actor.getRessources?.() ?? []); context.talents = foundry.utils.duplicate(actor.getTalents?.() ?? []); context.protectionTotal = actor.getProtectionTotal?.() ?? 0; context.adversiteTotal = (actor.system.adversite?.bleue || 0) + (actor.system.adversite?.rouge || 0) + (actor.system.adversite?.noire || 0); context.richesse = actor.computeRichesse?.() ?? { po: 0, pa: 0, sc: 0, valueSC: 0 }; context.valeurEquipement = actor.computeValeurEquipement?.() ?? { po: 0, pa: 0, sc: 0, valueSC: 0 }; // Prepare enriched HTML for sorcellerie fields context.enrichedInvocationsEnCours = await foundry.applications.ux.TextEditor.implementation.enrichHTML( actor.system.sorcellerie?.invocationsencours || "", { async: true } ); // Linked creatures for invocation section context.creaturesInvoqueesActors = await this._getLinkedActors(actor.system.sorcellerie.creaturesinvoquees); return context; } async _getLinkedActors(uuids) { if (!uuids || !Array.isArray(uuids) || uuids.length === 0) return []; const actors = []; for (const uuid of uuids) { const actor = await fromUuid(uuid); if (actor) { actors.push(actor); } } return actors; } async _onDropActor(event, data) { if (!this.document.isOwner) return; const droppedActor = await Actor.fromDropData(data); if (!droppedActor) return; const uuids = this.document.system.sorcellerie.creaturesinvoquees || []; if (!uuids.includes(droppedActor.uuid)) { uuids.push(droppedActor.uuid); await this.document.update({ "system.sorcellerie.creaturesinvoquees": uuids }); } this.render(); } static async #onRemoveLinkedActor(event, target) { const li = target.closest(".item"); if (!li) return; const uuid = target.dataset.uuid; if (!uuid) return; const currentValue = this.document.system.sorcellerie.creaturesinvoquees || []; await this.document.update({ "system.sorcellerie.creaturesinvoquees": currentValue.filter(u => u !== uuid) }); this.render(); } static async #onOpenInvocationActor(event) { const target = event.target.closest(".invocation-actor-link"); if (!target) return; const uuid = target.dataset.actorUuid; if (!uuid) return; const actor = await fromUuid(uuid); if (actor) actor.sheet.render(true); } _onRender(context, options) { super._onRender(context, options); this.element.querySelectorAll('.invocation-actor-link').forEach(el => { el.addEventListener('click', (event) => { event.preventDefault(); this.constructor.#onOpenInvocationActor(event); }); }); } }