feat: capacités de créature, blessures séquentielles et refonte fiche Groupe
- Nouvel item Capacité de créature (creaturecapacity) : DataModel, fiche AppV2, chat card, types Base/Survie/Cauchemar/Apocalypse, liste sur l'onglet Informations de la créature avec drag&drop et post au chat. - Blessures : coches séquentielles respectant la gravité (onClickWound), malus de blessure -1D/-2D/-3D appliqué aux jets (Règles p.42), montée en gravité automatique si les cercles sont pleins. - Fiche Groupe : objectifs majeurs/mineurs éditables, liste de membres simplifiée, notes de voyage (roadNotes), totem qui remplit instinct/interdits, refonte visuelle des onglets. - Créature : Réaction lançable, seuils/cercles de blessures corrigés (Taille cumulée, Groupe sans seuil), libellés Taille/Meute. - Corrections : icône de carte de chat plafonnée à 64px, slash orphelin d'entrave à 0, notes de matériel du Groupe éditable (formInput), bonus de Réaction non double-compté. - Divers : suppression des captures de débogage, licence README.
This commit is contained in:
@@ -38,6 +38,7 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
||||
roll: VermineBaseActorSheet.#onRollItem,
|
||||
attack: VermineBaseActorSheet.#onAttack,
|
||||
clickRadio: VermineBaseActorSheet.#onClickRadioHexa,
|
||||
clickWound: VermineBaseActorSheet.#onClickWound,
|
||||
effectControl: VermineBaseActorSheet.#onEffectControl,
|
||||
chooseTotem: VermineBaseActorSheet.#onChooseTotem
|
||||
}
|
||||
@@ -264,9 +265,10 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
||||
if (!id) return
|
||||
const item = this.document.items.get(id)
|
||||
if (!item) return
|
||||
// Armes : PNJ → dialogue de combat (valeur d'Attaque) ; personnage →
|
||||
// dialogue de compétence. Les PNJ n'ont ni caractéristiques ni compétences.
|
||||
if (item.type === "weapon" && this.document.type === 'npc') {
|
||||
// Armes : PNJ et créatures → dialogue de combat (valeur d'Attaque) ;
|
||||
// personnage → dialogue de compétence. PNJ/créatures n'ont ni
|
||||
// caractéristiques ni compétences.
|
||||
if (item.type === "weapon" && (this.document.type === 'npc' || this.document.type === 'creature')) {
|
||||
const { default: CombatDialog } = await import("../../system/dialogs/combatDialog.mjs")
|
||||
const dialog = await CombatDialog.create({ actorId: this.document.id, weapon: item })
|
||||
if (dialog) dialog.render(true)
|
||||
@@ -297,6 +299,8 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
||||
}
|
||||
|
||||
static async #onToggleEquip(event, target) {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
const id = target.closest("[data-item-id]")?.dataset?.itemId
|
||||
if (!id) return
|
||||
const item = this.document.items.get(id)
|
||||
@@ -322,6 +326,36 @@ export default class VermineBaseActorSheet extends HandlebarsApplicationMixin(fo
|
||||
this.document.update(update)
|
||||
}
|
||||
|
||||
/**
|
||||
* Coche/décoche les cases de Blessure en respectant l'ordre de gravité
|
||||
* (règles p.39) : on ne peut cocher que la case suivante dans l'ordre
|
||||
* (une blessure s'applique toujours au Seuil égal ou inférieur le plus
|
||||
* élevé), et on ne peut pas en sauter. Décocher une case retire toutes
|
||||
* celles situées après elle.
|
||||
*/
|
||||
static #onClickWound(event, target) {
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
const input = target
|
||||
const box = parseInt(input.value, 10) || 0 // numéro de case (1-based)
|
||||
let current = this.document
|
||||
const propTree = input.name.split(".")
|
||||
for (const prop of propTree) {
|
||||
current = current[prop]
|
||||
}
|
||||
const currentValue = parseInt(current, 10) || 0
|
||||
let next = currentValue
|
||||
if (box === currentValue + 1) {
|
||||
// Cocher la case suivante dans l'ordre.
|
||||
next = box
|
||||
} else if (box <= currentValue) {
|
||||
// Décocher : retire la case cliquée et toutes celles après.
|
||||
next = box - 1
|
||||
}
|
||||
// Si box > currentValue + 1 : on ne permet pas de sauter des cases.
|
||||
this.document.update({ [input.name]: next })
|
||||
}
|
||||
|
||||
static #onEffectControl(event, target) {
|
||||
onManageActiveEffect(event, this.document)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user