L'appréciation utilise: - un niveau de qualité (qui réutilise la qualité sur les items en ayant) - un bon moment (coeur/musique/...) - un niveau de jet de moral - une caractéristique (perception) - une compétence Les bon moments passés sont remis à zéro lors du passage de château dormant. Ajout des jets de moral très heureux. Ajout de jet d'appréciation sur les résultats des oeuvres et des jeux.
84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
import { DIFF, DIFFS, ROLL_TYPE_CUISINE, ROLL_TYPE_MEDITATION, ROLL_TYPE_OEUVRE, ROLL_TYPE_SORT, ROLL_TYPE_TACHE } from "./roll-constants.mjs";
|
|
import { ROLLDIALOG_SECTION, RollPart } from "./roll-part.mjs";
|
|
import { Misc } from "../misc.js";
|
|
|
|
export const PART_DIFF = "diff"
|
|
|
|
const EXCLUDED_ROLL_TYPES = [
|
|
ROLL_TYPE_TACHE,
|
|
ROLL_TYPE_MEDITATION,
|
|
ROLL_TYPE_SORT,
|
|
ROLL_TYPE_CUISINE,
|
|
ROLL_TYPE_OEUVRE]
|
|
|
|
export class RollPartDiff extends RollPart {
|
|
|
|
get code() { return PART_DIFF }
|
|
get section() { return ROLLDIALOG_SECTION.CHOIX }
|
|
|
|
restore(rollData) {
|
|
const current = this.getCurrent(rollData)
|
|
const saved = this.getSaved(rollData)
|
|
current.value = saved?.value ?? current.value ?? 0
|
|
current.type = saved?.type ?? current.type
|
|
}
|
|
|
|
store(rollData, targetData) {
|
|
const current = this.getCurrent(rollData)
|
|
this.setSaved(targetData, {
|
|
value: current.value,
|
|
type: current.type
|
|
})
|
|
}
|
|
|
|
visible(rollData) {
|
|
if (EXCLUDED_ROLL_TYPES.includes(rollData.type.current) || rollData.type.appreciation) {
|
|
return false
|
|
}
|
|
const current = this.getCurrent(rollData)
|
|
/* TODO: affiner les cas où afficher ou non. devrait s'afficher pour les jets basiques (même si pas d'opposant sélectionné)*/
|
|
return Object.values(DIFF).includes(current.type)
|
|
}
|
|
|
|
prepareContext(rollData) {
|
|
const current = this.getCurrent(rollData)
|
|
const diffType = DIFFS[current.type] ?? DIFFS[DIFF.AUCUN]
|
|
foundry.utils.mergeObject(current,
|
|
{
|
|
type: diffType.key,
|
|
label: diffType?.label ?? '',
|
|
disabled: !diffType.libre,
|
|
value: Misc.inRange(current.value ?? 0, -10, diffType.max),
|
|
min: -10,
|
|
max: diffType.max
|
|
},
|
|
{ inplace: true }
|
|
)
|
|
}
|
|
|
|
setDiff(rollData, diff) {
|
|
const current = this.getCurrent(rollData)
|
|
current.value = diff.diff ?? current.value
|
|
current.type = diff.type ?? current.type
|
|
}
|
|
|
|
getAjustements(rollData) {
|
|
const current = this.getCurrent(rollData)
|
|
return [{
|
|
label: current.label,
|
|
value: current.value
|
|
}]
|
|
}
|
|
|
|
async _onRender(rollDialog, context, options) {
|
|
const input = rollDialog.element.querySelector(`roll-section[name="${this.code}"] input[name="${this.code}"]`)
|
|
|
|
input?.addEventListener("input", e => this.onInputChange(e, rollDialog))
|
|
}
|
|
|
|
onInputChange(event, rollDialog) {
|
|
this.getCurrent(rollDialog.rollData).value = parseInt(event.currentTarget.value)
|
|
rollDialog.render()
|
|
}
|
|
|
|
} |