66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
import { DIFF } from "./roll-constants.mjs"
|
|
import { PART_DIFF } from "./roll-part-diff.mjs"
|
|
|
|
const DEFAULT_DIFF_TYPES = [DIFF.LIBRE, DIFF.IMPOSEE, DIFF.DEFAUT]
|
|
|
|
export class RollType {
|
|
|
|
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` }
|
|
get chatResultTemplate() { return `systems/foundryvtt-reve-de-dragon/templates/roll/result/chat-${this.code}.hbs` }
|
|
|
|
toTypeData(rollData) {
|
|
return { code: this.code, name: this.name, icon: this.icon, section: 'type', template: this.template, selected: this.isSelected(rollData) }
|
|
}
|
|
|
|
prepare(rollData) {}
|
|
isAllowed(rollData) { return rollData.type.allowed == undefined || rollData.type.allowed.includes(this.code) }
|
|
visible(rollData) { return true }
|
|
title(rollData) { return this.code }
|
|
isSelected(rollData) { return rollData.type.current == this.code }
|
|
|
|
setRollDataType(rollData) {
|
|
rollData.type.opposed = rollData.opponent != undefined
|
|
}
|
|
|
|
onSelect(rollData) {
|
|
const possibleTypes = [
|
|
rollData.current[PART_DIFF].type,
|
|
this.typeFromOpponents(rollData),
|
|
rollData.selected[PART_DIFF].type
|
|
]
|
|
const type = possibleTypes.find(m => DEFAULT_DIFF_TYPES.includes(m)) ?? DIFF.DEFAUT
|
|
this.setDiffType(rollData, type)
|
|
}
|
|
|
|
typeFromOpponents(rollData) {
|
|
if (rollData.type.opposed) {
|
|
if (rollData.type.resistance) {
|
|
return DIFF.IMPOSEE
|
|
}
|
|
return DIFF.LIBRE
|
|
}
|
|
return undefined
|
|
}
|
|
|
|
setDiffType(rollData, type) {
|
|
type = rollData.selected[PART_DIFF].type ?? type
|
|
rollData.current[PART_DIFF].type = type
|
|
this.setRollDataType(rollData)
|
|
}
|
|
|
|
callbacks(rollOptions) { return [] }
|
|
|
|
/**
|
|
* Préparation des résultats d'un jet pour ce type de jet
|
|
*
|
|
* @param {*} rollData les données du jet, incluans la partie rolled
|
|
* @param {*} impacts une structure composée de deux ActorImpacts {active, opponent}
|
|
* pour stocker les effets sur ces deux participants au jey
|
|
* @returns undefined ou une structure contenant les informations requise pour afficher
|
|
*/
|
|
getResult(rollData, impacts) { return { messages: [] } }
|
|
onApplyImpacts(rollData, impacts) { }
|
|
}
|