Résolution de soucis inter-types de jets V2

- diminution de la dépendance au token cible pour les attaques
- ne pas proposer l'attaque sur les jets "par défaut"
- filtrer les sous-parties inutiles (ie: sorts pour les attaques, etc)
This commit is contained in:
2025-12-12 17:42:43 +01:00
parent 3567885030
commit 6907344be7
17 changed files with 91 additions and 61 deletions
+15 -2
View File
@@ -23,11 +23,10 @@ export class Distance {
static ajustements(token, defenderToken, attaque) { static ajustements(token, defenderToken, attaque) {
const typeAttaque = Distance.typeAttaqueDistance(attaque) const typeAttaque = Distance.typeAttaqueDistance(attaque)
if (typeAttaque) { if (typeAttaque) {
const distance = Distance.distance(token, defenderToken) const distance = Distance.distance(token, defenderToken)
const isVisible = Distance.isVisible(token, defenderToken) const isVisible = Distance.isVisible(token, defenderToken)
const portee = Distance.ajustementPortee(distance, attaque.arme) const portee = Distance.ajustementPortee(distance, attaque.arme)
const taille = Distance.ajustementTaille(defenderToken.actor) const taille = Distance.ajustementTaille(defenderToken?.actor)
const activite = Distance.ajustementMouvement(defenderToken) const activite = Distance.ajustementMouvement(defenderToken)
const total = Distance.diff(portee, taille, activite) const total = Distance.diff(portee, taille, activite)
const diffDefense = Distance.ajustementDefense(attaque) const diffDefense = Distance.ajustementDefense(attaque)
@@ -37,19 +36,28 @@ export class Distance {
} }
static distance(token, defenderToken) { static distance(token, defenderToken) {
if (token && defenderToken) {
const ray = new foundry.canvas.geometry.Ray( const ray = new foundry.canvas.geometry.Ray(
token.getCenterPoint(), token.getCenterPoint(),
defenderToken.getCenterPoint() defenderToken.getCenterPoint()
) )
return Number(canvas.grid.measureDistances([{ ray }], { gridSpaces: false })) return Number(canvas.grid.measureDistances([{ ray }], { gridSpaces: false }))
} }
return -1 /* distance indéterminée */
}
static isVisible(token, defenderToken) { static isVisible(token, defenderToken) {
// TODO: regarder les StatusEffect aveuglé? // TODO: regarder les StatusEffect aveuglé?
if (token && defenderToken) {
return canvas.effects.visibility.testVisibility(defenderToken.getCenterPoint(), { object: token }) return canvas.effects.visibility.testVisibility(defenderToken.getCenterPoint(), { object: token })
} }
return true
}
static ajustementPortee(distance, arme) { static ajustementPortee(distance, arme) {
if (distance < 0 || !arme) {
return { msg: "non déterminée", diff: 0 };
}
if (arme.system.portee_courte && distance <= arme.system.portee_courte) return { msg: "courte", diff: 0 }; if (arme.system.portee_courte && distance <= arme.system.portee_courte) return { msg: "courte", diff: 0 };
if (arme.system.portee_moyenne && distance <= arme.system.portee_moyenne) return { msg: "moyenne", diff: -3 }; if (arme.system.portee_moyenne && distance <= arme.system.portee_moyenne) return { msg: "moyenne", diff: -3 };
if (arme.system.portee_extreme && distance <= arme.system.portee_extreme) return { msg: "extrême", diff: -5 }; if (arme.system.portee_extreme && distance <= arme.system.portee_extreme) return { msg: "extrême", diff: -5 };
@@ -57,6 +65,9 @@ export class Distance {
} }
static ajustementTaille(actor) { static ajustementTaille(actor) {
if (!actor) {
return { msg: "non déterminée", diff: 0 };
}
if (actor.isVehicule()) return { msg: "véhicule", diff: 0 } if (actor.isVehicule()) return { msg: "véhicule", diff: 0 }
const taille = actor.getCaracByName('TAILLE')?.value ?? 1; const taille = actor.getCaracByName('TAILLE')?.value ?? 1;
if (taille <= 1) return { msg: "souris", diff: -8 }; if (taille <= 1) return { msg: "souris", diff: -8 };
@@ -68,8 +79,10 @@ export class Distance {
} }
static ajustementMouvement(defenderToken) { static ajustementMouvement(defenderToken) {
if (defenderToken) {
if (defenderToken.actor?.getSurprise(true) != '') return { msg: "immobile (surprise)", diff: 0 }; if (defenderToken.actor?.getSurprise(true) != '') return { msg: "immobile (surprise)", diff: 0 };
if (defenderToken.inCombat) return { msg: "en mouvement (combat)", diff: -4 }; if (defenderToken.inCombat) return { msg: "en mouvement (combat)", diff: -4 };
}
return { msg: "à déterminer (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)", diff: -3 }; return { msg: "à déterminer (0 immobile, -3 actif, -4 en mouvement, -5 en zig-zag)", diff: -3 };
} }
+1 -2
View File
@@ -13,8 +13,7 @@ export const ROLL_TYPE_TACHE = 'tache'
export const ATTAQUE_ROLL_TYPES = [ROLL_TYPE_ATTAQUE] export const ATTAQUE_ROLL_TYPES = [ROLL_TYPE_ATTAQUE]
export const COMBAT_ROLL_TYPES = [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE] export const COMBAT_ROLL_TYPES = [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE]
export const DEMIREVE_ROLL_TYPES = [ROLL_TYPE_SORT] export const DEMIREVE_ROLL_TYPES = [ROLL_TYPE_SORT]
export const DEFAULT_ROLL_TYPES = [ROLL_TYPE_COMP, ROLL_TYPE_ATTAQUE, ROLL_TYPE_TACHE, ROLL_TYPE_MEDITATION, ROLL_TYPE_CUISINE, ROLL_TYPE_OEUVRE, ROLL_TYPE_JEU] export const DEFAULT_ROLL_TYPES = [ROLL_TYPE_COMP, ROLL_TYPE_TACHE, ROLL_TYPE_MEDITATION, ROLL_TYPE_CUISINE, ROLL_TYPE_OEUVRE, ROLL_TYPE_JEU]
export const DIFF = { export const DIFF = {
LIBRE: 'libre', LIBRE: 'libre',
+1 -1
View File
@@ -50,7 +50,7 @@ export class RollDialogAdapter {
rolled.factorHtml = Misc.getFractionOneN(rollData.current.sign.diviseur) rolled.factorHtml = Misc.getFractionOneN(rollData.current.sign.diviseur)
if (ReglesOptionnelles.isUsing("afficher-colonnes-reussite")) { if (ReglesOptionnelles.isUsing("afficher-colonnes-reussite")) {
rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rolled.caracValue, rolled.roll) rolled.niveauNecessaire = RdDResolutionTable.findNiveauNecessaire(rolled.caracValue, rolled.roll)
rolled.ajustementNecessaire = rolled.niveauNecessaire - diff rolled.ajustementNecessaire = rolled.niveauNecessaire - rolled.finalLevel
} }
return rolled return rolled
} }
+13 -3
View File
@@ -310,8 +310,10 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
rollData.refs = foundry.utils.mergeObject(rollData.refs ?? {}, Object.fromEntries(ROLL_PARTS.map(p => [p.code, {}]))); rollData.refs = foundry.utils.mergeObject(rollData.refs ?? {}, Object.fromEntries(ROLL_PARTS.map(p => [p.code, {}])));
rollData.options = rollData.options ?? { rollMode: game.settings.get("core", "rollMode") } rollData.options = rollData.options ?? { rollMode: game.settings.get("core", "rollMode") }
ROLL_PARTS.forEach(p => p.initialize(rollData)) ROLL_PARTS.forEach(p => RollDialog.$initializeRollPart(rollData, p.code))
ROLL_PARTS.filter(p => p.isValid(rollData)) ROLL_PARTS
.filter(p => RollDialog.$isIntersecting(allowed, p.rollTypes))
.filter(p => p.isValid(rollData))
.forEach(p => { .forEach(p => {
p.restore(rollData) p.restore(rollData)
p.loadRefs(rollData) p.loadRefs(rollData)
@@ -320,6 +322,14 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
return rollData return rollData
} }
static $initializeRollPart(rollData, code) {
rollData.refs[code] = rollData.refs[code] ?? {}
rollData.current[code] = rollData.current[code] ?? {}
rollData.selected[code] = rollData.selected[code] ?? {}
}
static $isIntersecting(allowed, included) { return included ? included.find(it => allowed.includes(it)) : true }
static saveParts(rollData, impacts = undefined) { static saveParts(rollData, impacts = undefined) {
if (rollData == undefined) { if (rollData == undefined) {
return undefined return undefined
@@ -540,7 +550,7 @@ export default class RollDialog extends HandlebarsApplicationMixin(ApplicationV2
static loadRollData(roll) { static loadRollData(roll) {
RollDialog.$prepareRollData(roll) RollDialog.$prepareRollData(roll)
if (roll.attackerRoll){ if (roll.attackerRoll) {
RollDialog.$prepareRollData(roll.attackerRoll) RollDialog.$prepareRollData(roll.attackerRoll)
} }
RollDialog.calculAjustement(roll) RollDialog.calculAjustement(roll)
+5 -3
View File
@@ -11,7 +11,7 @@ import { PART_COMP } from "./roll-part-comp.mjs"
import { PART_DIFF } from "./roll-part-diff.mjs" import { PART_DIFF } from "./roll-part-diff.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { PART_SIGN } from "./roll-part-sign.mjs" import { PART_SIGN } from "./roll-part-sign.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_ATTAQUE = 'attaque' export const PART_ATTAQUE = 'attaque'
@@ -26,7 +26,9 @@ export class RollPartAttaque extends RollPartSelect {
get code() { return PART_ATTAQUE } get code() { return PART_ATTAQUE }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_ATTAQUE) } get rollTypes() { return [ROLL_TYPE_ATTAQUE] }
visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_ATTAQUE) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
@@ -69,7 +71,7 @@ export class RollPartAttaque extends RollPartSelect {
attaque.key = `${attaque.action}::${attaque.label}` attaque.key = `${attaque.action}::${attaque.label}`
attaque.tactique = TACTIQUES[0] attaque.tactique = TACTIQUES[0]
attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0 attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
attaque.distance = Distance.ajustements(rollData.active.token, rollData.opponent.token, attaque) attaque.distance = Distance.ajustements(rollData.active?.token, rollData.opponent?.token, attaque)
return attaque return attaque
} }
+4 -2
View File
@@ -4,7 +4,7 @@ import { ROLL_TYPE_CUISINE } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_CUISINE = "cuisine" export const PART_CUISINE = "cuisine"
@@ -16,8 +16,10 @@ export class RollPartCuisine extends RollPartSelect {
get code() { return PART_CUISINE } get code() { return PART_CUISINE }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_CUISINE] }
isValid(rollData) { return rollData.active.actor.isPersonnage() } isValid(rollData) { return rollData.active.actor.isPersonnage() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_CUISINE) } visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_CUISINE) }
restore(rollData) { restore(rollData) {
super.restore(rollData) super.restore(rollData)
+4 -3
View File
@@ -8,7 +8,7 @@ import { PART_COMP } from "./roll-part-comp.mjs"
import { PART_DIFF } from "./roll-part-diff.mjs" import { PART_DIFF } from "./roll-part-diff.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { PART_SIGN } from "./roll-part-sign.mjs" import { PART_SIGN } from "./roll-part-sign.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_DEFENSE = 'defense' export const PART_DEFENSE = 'defense'
@@ -17,8 +17,9 @@ export class RollPartDefense extends RollPartSelect {
get code() { return PART_DEFENSE } get code() { return PART_DEFENSE }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
isValid(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined } get rollTypes() { return [ROLL_TYPE_DEFENSE] }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined } isValid(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_DEFENSE) && rollData.attackerRoll != undefined }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
+5 -3
View File
@@ -3,6 +3,7 @@ import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
import { PART_ATTAQUE } from "./roll-part-attaque.mjs" import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
import { RollPartCheckbox } from "./roll-part-checkbox.mjs" import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
import { PART_DEFENSE } from "./roll-part-defense.mjs" import { PART_DEFENSE } from "./roll-part-defense.mjs"
import { RollPart } from "./roll-part.mjs"
const ECAILLES = "ecailles" const ECAILLES = "ecailles"
@@ -10,8 +11,9 @@ export class RollPartEcailles extends RollPartCheckbox {
get code() { return ECAILLES } get code() { return ECAILLES }
get rollTypes() { return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE] }
isValid(rollData) { isValid(rollData) {
return this.isRollType(rollData, ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE) return RollPart.isRollType(rollData, ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE)
} }
visible(rollData) { visible(rollData) {
@@ -25,9 +27,9 @@ export class RollPartEcailles extends RollPartCheckbox {
} }
getArme(rollData) { getArme(rollData) {
return this.isRollType(rollData, ROLL_TYPE_ATTAQUE) return RollPart.isRollType(rollData, ROLL_TYPE_ATTAQUE)
? rollData.current[PART_ATTAQUE]?.arme ? rollData.current[PART_ATTAQUE]?.arme
: this.isRollType(rollData, ROLL_TYPE_DEFENSE) : RollPart.isRollType(rollData, ROLL_TYPE_DEFENSE)
? rollData.current[PART_DEFENSE]?.arme ? rollData.current[PART_DEFENSE]?.arme
: undefined : undefined
} }
+3 -1
View File
@@ -1,7 +1,8 @@
import { RDD_CONFIG } from "../constants.js" import { RDD_CONFIG } from "../constants.js"
import { RdDEmpoignade } from "../rdd-empoignade.js" import { RdDEmpoignade } from "../rdd-empoignade.js"
import { COMBAT_ROLL_TYPES } from "./roll-constants.mjs" import { COMBAT_ROLL_TYPES, ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
import { RollPartCheckbox } from "./roll-part-checkbox.mjs" import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
import { RollPart } from "./roll-part.mjs"
const EMPOIGNADE_TAILLE = "empoignade-taille" const EMPOIGNADE_TAILLE = "empoignade-taille"
@@ -9,6 +10,7 @@ export class RollPartEmpoignadeTaille extends RollPartCheckbox {
get code() { return EMPOIGNADE_TAILLE } get code() { return EMPOIGNADE_TAILLE }
get rollTypes() { return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE] }
isValid(rollData) { isValid(rollData) {
return RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId) return RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId)
} }
+3 -1
View File
@@ -1,9 +1,10 @@
import { RDD_CONFIG } from "../constants.js" import { RDD_CONFIG } from "../constants.js"
import { ATTAQUE_TYPE_MELEE } from "../item/arme.js" import { ATTAQUE_TYPE_MELEE } from "../item/arme.js"
import { RdDEmpoignade } from "../rdd-empoignade.js" import { RdDEmpoignade } from "../rdd-empoignade.js"
import { ROLL_TYPE_ATTAQUE } from "./roll-constants.mjs" import { ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
import { PART_ATTAQUE } from "./roll-part-attaque.mjs" import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
import { RollPartCheckbox } from "./roll-part-checkbox.mjs" import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
import { RollPart } from "./roll-part.mjs"
const EMPOIGNADE = "empoignade" const EMPOIGNADE = "empoignade"
@@ -11,6 +12,7 @@ export class RollPartEmpoignade extends RollPartCheckbox {
get code() { return EMPOIGNADE } get code() { return EMPOIGNADE }
get rollTypes() { return [ROLL_TYPE_ATTAQUE, ROLL_TYPE_DEFENSE] }
isValid(rollData) { isValid(rollData) {
return RdDEmpoignade.isCombatantEmpoignade(rollData.ids.opponentId, rollData.ids.opponentTokenId) && return RdDEmpoignade.isCombatantEmpoignade(rollData.ids.opponentId, rollData.ids.opponentTokenId) &&
!RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId) !RdDEmpoignade.isCombatantEmpoignade(rollData.ids.actorId, rollData.ids.actorTokenId)
+3 -2
View File
@@ -4,7 +4,7 @@ import { ROLL_TYPE_JEU } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP, RollPartComp } from "./roll-part-comp.mjs" import { PART_COMP, RollPartComp } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
import { RdDItem } from "../item.js" import { RdDItem } from "../item.js"
import { Misc } from "../misc.js" import { Misc } from "../misc.js"
@@ -17,8 +17,9 @@ export class RollPartJeu extends RollPartSelect {
get code() { return PART_JEU } get code() { return PART_JEU }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_JEU] }
isValid(rollData) { return rollData.active.actor.isPersonnage() } isValid(rollData) { return rollData.active.actor.isPersonnage() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_JEU) } visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_JEU) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
+5 -4
View File
@@ -7,7 +7,7 @@ import { ROLL_TYPE_MEDITATION } from "./roll-constants.mjs"
import { PART_CARAC, RollPartCarac } from "./roll-part-carac.mjs" import { PART_CARAC, RollPartCarac } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_MEDITATION = "meditation" export const PART_MEDITATION = "meditation"
@@ -18,6 +18,10 @@ export class RollPartMeditation extends RollPartSelect {
get code() { return PART_MEDITATION } get code() { return PART_MEDITATION }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_MEDITATION] }
isValid(rollData) { return rollData.active.actor.isPersonnage() && rollData.active.actor.isHautRevant() }
visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_MEDITATION) }
store(rollData, targetData) { store(rollData, targetData) {
const current = this.getCurrent(rollData) const current = this.getCurrent(rollData)
this.setSaved(targetData, { this.setSaved(targetData, {
@@ -29,9 +33,6 @@ export class RollPartMeditation extends RollPartSelect {
}) })
} }
isValid(rollData) { return rollData.active.actor.isPersonnage() && rollData.active.actor.isHautRevant() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_MEDITATION) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
const actor = rollData.active.actor const actor = rollData.active.actor
+4 -3
View File
@@ -5,7 +5,7 @@ import { ROLL_TYPE_OEUVRE } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_OEUVRE = "oeuvre" export const PART_OEUVRE = "oeuvre"
@@ -35,8 +35,9 @@ export class RollPartOeuvre extends RollPartSelect {
get code() { return PART_OEUVRE } get code() { return PART_OEUVRE }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_OEUVRE] }
isValid(rollData) { return rollData.active.actor.isPersonnage() } isValid(rollData) { return rollData.active.actor.isPersonnage() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_OEUVRE) } visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_OEUVRE) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
@@ -88,7 +89,7 @@ export class RollPartOeuvre extends RollPartSelect {
const current = this.getCurrent(rollData) const current = this.getCurrent(rollData)
switch (part.code) { switch (part.code) {
case PART_CARAC: return part.filterCaracs(rollData, current.caracs) case PART_CARAC: return part.filterCaracs(rollData, current.caracs)
case PART_COMP: return part.filterComps(rollData,[current.comp?.name]) case PART_COMP: return part.filterComps(rollData, [current.comp?.name])
} }
} }
return undefined return undefined
+3 -2
View File
@@ -5,7 +5,7 @@ import { ROLL_TYPE_POSSESSION } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_POSSESSION = "possession" export const PART_POSSESSION = "possession"
@@ -17,7 +17,8 @@ export class RollPartPossession extends RollPartSelect {
get name() { return 'Possession' } get name() { return 'Possession' }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_POSSESSION) } get rollTypes() { return [ROLL_TYPE_POSSESSION] }
visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_POSSESSION) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
+3 -2
View File
@@ -2,7 +2,7 @@ import { ITEM_TYPES } from "../constants.js"
import { ROLL_TYPE_SORT } from "./roll-constants.mjs" import { ROLL_TYPE_SORT } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
import { TMRUtility } from "../tmr-utility.js" import { TMRUtility } from "../tmr-utility.js"
import { RdDItemSort } from "../item-sort.js" import { RdDItemSort } from "../item-sort.js"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
@@ -19,8 +19,9 @@ export class RollPartSort extends RollPartSelect {
get code() { return PART_SORT } get code() { return PART_SORT }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_SORT] }
isValid(rollData) { return rollData.active.actor.isPersonnage() && rollData.active.actor.isHautRevant() } isValid(rollData) { return rollData.active.actor.isPersonnage() && rollData.active.actor.isHautRevant() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_SORT) } visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_SORT) }
restore(rollData) { restore(rollData) {
const saved = this.getSaved(rollData) const saved = this.getSaved(rollData)
+3 -2
View File
@@ -3,7 +3,7 @@ import { ROLL_TYPE_TACHE } from "./roll-constants.mjs"
import { PART_CARAC } from "./roll-part-carac.mjs" import { PART_CARAC } from "./roll-part-carac.mjs"
import { PART_COMP } from "./roll-part-comp.mjs" import { PART_COMP } from "./roll-part-comp.mjs"
import { RollPartSelect } from "./roll-part-select.mjs" import { RollPartSelect } from "./roll-part-select.mjs"
import { ROLLDIALOG_SECTION } from "./roll-part.mjs" import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs"
export const PART_TACHE = "tache" export const PART_TACHE = "tache"
@@ -12,8 +12,9 @@ export class RollPartTache extends RollPartSelect {
get code() { return PART_TACHE } get code() { return PART_TACHE }
get section() { return ROLLDIALOG_SECTION.CHOIX } get section() { return ROLLDIALOG_SECTION.CHOIX }
get rollTypes() { return [ROLL_TYPE_TACHE] }
isValid(rollData) { return rollData.active.actor.isPersonnage() } isValid(rollData) { return rollData.active.actor.isPersonnage() }
visible(rollData) { return this.isRollType(rollData, ROLL_TYPE_TACHE) } visible(rollData) { return RollPart.isRollType(rollData, ROLL_TYPE_TACHE) }
loadRefs(rollData) { loadRefs(rollData) {
const refs = this.getRefs(rollData) const refs = this.getRefs(rollData)
+4 -13
View File
@@ -1,3 +1,5 @@
import { ALL_ROLL_TYPES } from "./roll-dialog.mjs"
export const ROLLDIALOG_SECTION = { export const ROLLDIALOG_SECTION = {
ACTION: 'action', ACTION: 'action',
CARAC: 'carac', CARAC: 'carac',
@@ -19,17 +21,6 @@ export class RollPart {
/** le template handlebars pour affichage */ /** le template handlebars pour affichage */
get template() { return `systems/foundryvtt-reve-de-dragon/templates/roll/roll-part-${this.code}.hbs` } get template() { return `systems/foundryvtt-reve-de-dragon/templates/roll/roll-part-${this.code}.hbs` }
initialize(rollData) {
if (rollData.refs[this.code] == undefined) {
rollData.refs[this.code] = {}
}
if (rollData.current[this.code] == undefined) {
rollData.current[this.code] = {}
}
if (rollData.selected[this.code] == undefined) {
rollData.selected[this.code] = {}
}
}
/** l'acteur actif du jet */ /** l'acteur actif du jet */
getActor(rollData) { return rollData.active.actor } getActor(rollData) { return rollData.active.actor }
/** le conteneur de données du RollPart */ /** le conteneur de données du RollPart */
@@ -78,8 +69,8 @@ export class RollPart {
* @returns une chaîne vide si rien ne doit être affiché * @returns une chaîne vide si rien ne doit être affiché
*/ */
title() { return '' } title() { return '' }
isRollType(rollData, ...type) { return type.includes(rollData.type.current)} static isRollType(rollData, ...type) { return type.includes(rollData.type.current) }
get rollTypes() { return undefined }
isActive(rollData) { return this.isValid(rollData) && this.visible(rollData) } isActive(rollData) { return this.isValid(rollData) && this.visible(rollData) }
isValid(rollData) { return true } isValid(rollData) { return true }
visible(rollData) { return true } visible(rollData) { return true }