export class DialogChoixXpCarac extends Dialog { static async choix(actor, xpData, caracs) { caracs = caracs.map(it => foundry.utils.mergeObject({ ajout: 0 }, it)) xpData = foundry.utils.mergeObject({ reste: xpData.xpCarac }, xpData) const dialogData = { title: `Choisissez la répartition d'expérience`, content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-choix-xp-carac.hbs", { actor, caracDerivee: actor.findCaracByName(xpData.caracName), xpData, caracs }), } const dialogOptions = { classes: ["rdd-dialog-select"], width: 400, height: 'fit-content', 'z-index': 99999 } new DialogChoixXpCarac(dialogData, dialogOptions, actor, xpData, caracs).render(true) } constructor(dialogData, dialogOptions, actor, xpData, caracs) { dialogData = foundry.utils.mergeObject(dialogData, { default: 'appliquer', buttons: { 'appliquer': { icon:'', label: "Ajouter la répartition", callback: it => this.appliquerSelection() } } }) super(dialogData, dialogOptions) this.actor = actor this.xpData = xpData this.caracs = caracs } activateListeners(html) { //TODO super.activateListeners(html) this.html = html this.html.find("li.xpCarac-option .xpCarac-moins").click(event => this.ajouterXp(event, -1) ) this.html.find("li.xpCarac-option .xpCarac-plus").click(event => this.ajouterXp(event, 1) ) } async ajouterXp(event, delta) { const liCarac = this.html.find(event.currentTarget)?.parents("li.xpCarac-option") const label = liCarac?.data("carac-label") const carac = this.caracs.find(c => c.label == label) if (carac.ajout + delta < 0) { ui.notifications.warn(`Impossible de diminuer les points à répartir en ${carac.label} en dessous de 0`) return } if (this.xpData.reste - delta < 0) { ui.notifications.warn(`Il ne reste plus de points à répartir en ${carac.label}`) return } carac.ajout += delta this.xpData.reste -= delta liCarac.find("input.xpCarac-view-ajout").val(carac.ajout) this.html.find("input.xpCarac-reste").val(this.xpData.reste) } async appliquerSelection() { if (this.xpData.reste > 0) { ui.notifications.warn(`Il vous reste ${this.xpData.reste} points à répartir`) return } this.caracs.filter(c => c.ajout > 0).forEach(c => { const xpData = { caracName: c.label, xpCarac: c.ajout } this.actor._xpCarac(xpData) }) await super.close() } async close() { } _getHeaderButtons() { return [] } }