forked from public/foundryvtt-reve-de-dragon
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
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)
|
|
}
|
|
}
|