forked from public/foundryvtt-reve-de-dragon
Nouvelle fenêtre de jets de dés
This commit is contained in:
54
module/roll/roll-mode.mjs
Normal file
54
module/roll/roll-mode.mjs
Normal file
@@ -0,0 +1,54 @@
|
||||
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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user