Gestion des points de coeur

- Les suivants/compagnons/amoureux sont dans l'onglet description
- si acteurs "liés", ils peuvent avoir des points de coeur
- les jets de volonté peuvent être ajustés s'ils concernent un
  compagnon pour lequel on a du coeur
- on peut ajouter des points de coeur (entre la gestion de Chateau
  dormant par le gardien et le jet de repos si ce mode est utilisé)
- on peut retirer des points de coeur en perdant du moral (mêmes
  conditions)
- on peut passer de tendres moments si les deux acteurs acceptent
- les tendre moments font jouer un jet de moral adapté
- on peut perdre un point de coeur suite à un tendre moment qui ne fait
  pas gagner de moral
This commit is contained in:
2023-11-21 21:07:37 +01:00
parent 135546467d
commit 4a03c222d5
16 changed files with 347 additions and 45 deletions

View File

@ -1096,18 +1096,19 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
async moralIncDec(ajustementMoral) {
if (ajustementMoral != 0) {
ajustementMoral = Math.sign(ajustementMoral)
let moral = Misc.toInt(this.system.compteurs.moral.value) + ajustementMoral
if (moral > 3) { // exaltation
const exaltation = Misc.toInt(this.system.compteurs.exaltation.value) + ajustementMoral;
await this.updateCompteurValue('exaltation', exaltation);
const startMoral = parseInt(this.system.compteurs.moral.value)
const moralTheorique = startMoral + ajustementMoral
if (moralTheorique > 3) { // exaltation
const ajoutExaltation = moralTheorique - 3
const exaltation = parseInt(this.system.compteurs.exaltation.value) + ajoutExaltation
await this.updateCompteurValue('exaltation', exaltation)
}
if (moral < -3) { // dissolution
const dissolution = Misc.toInt(this.system.compteurs.dissolution.value) - ajustementMoral;
await this.updateCompteurValue('dissolution', dissolution);
if (moralTheorique < -3) { // dissolution
const ajoutDissolution = -3 - moralTheorique
const dissolution = parseInt(this.system.compteurs.dissolution.value) + ajoutDissolution
await this.updateCompteurValue('dissolution', dissolution)
}
moral = Math.max(-3, Math.min(moral, 3));
await this.updateCompteurValue('moral', moral);
await this.updateCompteurValue('moral', Math.max(-3, Math.min(moralTheorique, 3)));
}
return this.system.compteurs.moral.value;
}
@ -2634,6 +2635,7 @@ export class RdDActor extends RdDBaseActorSang {
/* -------------------------------------------- */
static $transformSubActeurSuivant = (suivant, link) => {
return mergeObject(RdDBaseActor.extractActorMin(suivant), {
ephemere: !suivant.prototypeToken.actorLink,
coeur: link.coeur ?? 0
})
};
@ -2652,6 +2654,19 @@ export class RdDActor extends RdDBaseActorSang {
return undefined
}
getPointsCoeur(actorId) {
return this.getSuivant(actorId)?.coeur ?? 0;
}
async setPointsCoeur(actorId, coeur) {
const amoureux = this.getSuivant(actorId);
if (amoureux) {
const suivants = this.system.subacteurs.suivants;
let newSuivants = [...suivants.filter(it => it.id != actorId), { id: actorId, coeur: coeur }]
await this.update({ 'system.subacteurs.suivants': newSuivants });
}
}
/* -------------------------------------------- */
static $transformSubActeurVehicule = (vehicle, link) => {
return mergeObject(RdDBaseActor.extractActorMin(vehicle), {