140 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { renderTemplate } from "./constants.js";
 | 
						|
import { Misc } from "./misc.js";
 | 
						|
import { RdDResolutionTable } from "./rdd-resolution-table.js";
 | 
						|
import { RdDRollResult } from "./rdd-roll-result.js";
 | 
						|
 | 
						|
const titleTableDeResolution = 'Table de résolution';
 | 
						|
/**
 | 
						|
 * Extend the base Dialog entity to select roll parameters
 | 
						|
 * @extends {Dialog}
 | 
						|
 */
 | 
						|
/* -------------------------------------------- */
 | 
						|
export class RdDRollResolutionTable extends Dialog {
 | 
						|
 | 
						|
  static resolutionTable = undefined;
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  static async open() {
 | 
						|
    if (RdDRollResolutionTable.resolutionTable == undefined) {
 | 
						|
      const rollData = {}
 | 
						|
      RdDRollResolutionTable._setDefaultOptions(rollData);
 | 
						|
      let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.hbs', rollData);
 | 
						|
      RdDRollResolutionTable.resolutionTable = new RdDRollResolutionTable(rollData, html);
 | 
						|
      RdDRollResolutionTable.resolutionTable.render(true);
 | 
						|
    }
 | 
						|
    else{
 | 
						|
      RdDRollResolutionTable.resolutionTable.bringToFront();
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  static _setDefaultOptions(rollData) {
 | 
						|
    let defRollData = {
 | 
						|
      show: { title: titleTableDeResolution },
 | 
						|
      ajustementsConditions: CONFIG.RDD.ajustementsConditions,
 | 
						|
      difficultesLibres: CONFIG.RDD.ajustementsConditions,
 | 
						|
      etat: 0,
 | 
						|
      moral: 0,
 | 
						|
      carac: {},
 | 
						|
      finalLevel: 0,
 | 
						|
      diffConditions: 0,
 | 
						|
      diffLibre: 0,
 | 
						|
      use: { conditions:true, libre:true }
 | 
						|
    }
 | 
						|
    foundry.utils.mergeObject(rollData, defRollData, { overwrite: false });
 | 
						|
    for (let i = 1; i < 21; i++) {
 | 
						|
      const key = `${i}`;
 | 
						|
      rollData.carac[key] = { type: "number", value: i, label: key }
 | 
						|
    }
 | 
						|
    let selected = (rollData.selectedCarac && rollData.selectedCarac.label)
 | 
						|
      ? rollData.selectedCarac.label
 | 
						|
      : (Number.isInteger(rollData.selectedCarac))
 | 
						|
        ? rollData.selectedCarac
 | 
						|
        : 10;
 | 
						|
    rollData.selectedCarac = rollData.carac[selected];
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  constructor(rollData, html) {
 | 
						|
    let conf = {
 | 
						|
      title: titleTableDeResolution,
 | 
						|
      content: html,
 | 
						|
      buttons: {
 | 
						|
        'lancer-fermer': { label: 'Lancer les dés et fermer', callback: html => this.onLancerFermer() }
 | 
						|
      }
 | 
						|
    };
 | 
						|
    super(conf, { classes: ["rdd-roll-dialog"], top: 50, width: 'fit-content', height: 'fit-content', 'z-index': 99999 });
 | 
						|
 | 
						|
    this.rollData = rollData;
 | 
						|
  }
 | 
						|
 | 
						|
  activateListeners(html) {
 | 
						|
    super.activateListeners(html);
 | 
						|
    this.html = html;
 | 
						|
    this.bringToFront();
 | 
						|
 | 
						|
 | 
						|
    this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre));
 | 
						|
    this.html.find("[name='diffConditions']").val(Misc.toInt(this.rollData.diffConditions));
 | 
						|
    this.updateRollResult();
 | 
						|
 | 
						|
    this.html.find('.lancer-table-resolution').click((event) => {
 | 
						|
      this.onLancer();
 | 
						|
    });
 | 
						|
    // Update !
 | 
						|
    this.html.find("[name='diffLibre']").change((event) => {
 | 
						|
      this.rollData.diffLibre = Misc.toInt(event.currentTarget.value);
 | 
						|
      this.updateRollResult();
 | 
						|
    });
 | 
						|
    this.html.find("[name='diffConditions']").change((event) => {
 | 
						|
      this.rollData.diffConditions = Misc.toInt(event.currentTarget.value);
 | 
						|
      this.updateRollResult();
 | 
						|
    });
 | 
						|
    this.html.find("[name='carac']").change((event) => {
 | 
						|
      let caracKey = event.currentTarget.value;
 | 
						|
      this.rollData.selectedCarac = this.rollData.carac[caracKey];
 | 
						|
      this.updateRollResult();
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  async onLancer() {
 | 
						|
    await RdDResolutionTable.rollData(this.rollData);
 | 
						|
    console.log("RdDRollResolutionTable -=>", this.rollData, this.rollData.rolled);
 | 
						|
    await RdDRollResult.displayRollData(this.rollData);
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  async onLancerFermer() {
 | 
						|
    await RdDResolutionTable.rollData(this.rollData);
 | 
						|
    console.log("RdDRollResolutionTable -=>", this.rollData, this.rollData.rolled);
 | 
						|
    await RdDRollResult.displayRollData(this.rollData);
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
  async updateRollResult() {
 | 
						|
    let rollData = this.rollData;
 | 
						|
    rollData.caracValue = parseInt(rollData.selectedCarac.value)
 | 
						|
    rollData.finalLevel = Misc.toInt(rollData.diffConditions) + Misc.toInt(rollData.diffLibre);
 | 
						|
 | 
						|
    const htmlTable = await RdDResolutionTable.buildHTMLTable({
 | 
						|
      carac: rollData.caracValue,
 | 
						|
      level: rollData.finalLevel,
 | 
						|
      maxCarac: 20,
 | 
						|
      maxLevel: 10
 | 
						|
    });
 | 
						|
 | 
						|
    // Mise à jour valeurs
 | 
						|
    this.html.find("[name='carac']").val(rollData.caracValue);
 | 
						|
    this.html.find(".roll-part-resolution").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel));
 | 
						|
    this.html.find("div.placeholder-resolution").empty().append(htmlTable)
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  /* -------------------------------------------- */
 | 
						|
 | 
						|
  async close() {
 | 
						|
    await super.close();
 | 
						|
    RdDRollResolutionTable.resolutionTable = undefined;
 | 
						|
  }
 | 
						|
}
 |