import { DIFF_MODE } from "./roll-constants.mjs" import { PART_DIFF } from "./roll-part-diff.mjs" const DEFAULT_DIFF_MODES = [DIFF_MODE.LIBRE, DIFF_MODE.IMPOSEE, DIFF_MODE.DEFAUT] export class RollMode { onReady() { } get code() { throw new Error(`Pas de code défini pour ${this}`) } get name() { return this.code } get icon() { return `systems/foundryvtt-reve-de-dragon/assets/actions/${this.code}.svg` } toModeData(rollData) { return { code: this.code, name: this.name, icon: this.icon, section: 'mode', template: this.template, selected: this.isSelected(rollData) } } isAllowed(rollData) { return rollData.mode.allowed == undefined || rollData.mode.allowed.includes(this.code) } visible(rollData) { return true } title(rollData) { return this.code } isSelected(rollData) { return rollData.mode.current == this.code } setRollDataMode(rollData) { rollData.mode.opposed = rollData.opponent != undefined rollData.mode.resistance = false /** TODO */ } onSelect(rollData) { const mode = [ rollData.current[PART_DIFF].mode, this.modeFromOpponents(rollData), rollData.selected[PART_DIFF].mode].find(m => DEFAULT_DIFF_MODES.includes(m)) this.setDiffMode(rollData, mode ?? DIFF_MODE.DEFAUT) } modeFromOpponents(rollData) { if (rollData.mode.opposed) { if (rollData.mode.resistance) { return DIFF_MODE.IMPOSEE } return DIFF_MODE.LIBRE } return undefined } setDiffMode(rollData, mode) { rollData.current[PART_DIFF].mode = mode this.setRollDataMode(rollData) } }