Fix récupération sommeil

Les différentsq updates pouvaient ne pas être visibles lors du sommeil

En forçant un render 20ms après la fin des actions qui impliquent un
sommeil, les mises à jour sont correctes
This commit is contained in:
Vincent Vandemeulebrouck 2025-03-04 22:04:52 +01:00
parent 88a3464eed
commit 633638a9ab

View File

@ -243,7 +243,7 @@ export class RdDActor extends RdDBaseActorSang {
} }
await this.resetInfoSommeil() await this.resetInfoSommeil()
ChatMessage.create(message); ChatMessage.create(message);
this.sheet.render(true); setTimeout(() => this.sheet.render(), 20)
} }
async _recuperationSante(message) { async _recuperationSante(message) {
@ -299,7 +299,7 @@ export class RdDActor extends RdDBaseActorSang {
ChatMessage.create(message); ChatMessage.create(message);
} }
await this.resetInfoSommeil(); await this.resetInfoSommeil();
this.sheet.render(true); setTimeout(() => this.sheet.render(), 20)
} }
} }
@ -442,10 +442,9 @@ export class RdDActor extends RdDBaseActorSang {
message.content += 'Vous ne trouvez pas le sommeil'; message.content += 'Vous ne trouvez pas le sommeil';
} }
else { else {
let jetsReve = []; let dormi = await this.$dormirDesHeures(message, heures, options);
let dormi = await this.dormirDesHeures(jetsReve, message, heures, options); if (dormi.jetsReve.length > 0) {
if (jetsReve.length > 0) { message.content += `Vous récupérez ${dormi.jetsReve.map(it => it < 0 ? '0 (réveil)' : it).reduce(Misc.joining("+"))} Points de rêve. `;
message.content += `Vous récupérez ${jetsReve.map(it => it < 0 ? '0 (réveil)' : it).reduce(Misc.joining("+"))} Points de rêve. `;
} }
if (dormi.etat == 'eveil') { if (dormi.etat == 'eveil') {
await this.reveilReveDeDragon(message, dormi.heures); await this.reveilReveDeDragon(message, dormi.heures);
@ -461,7 +460,7 @@ export class RdDActor extends RdDBaseActorSang {
await this.dormirChateauDormant(); await this.dormirChateauDormant();
} }
else { else {
this.sheet.render(true); setTimeout(() => this.sheet.render(), 20)
} }
} }
@ -472,18 +471,18 @@ export class RdDActor extends RdDBaseActorSang {
} }
} }
async dormirDesHeures(jetsReve, message, heures, options) { async $dormirDesHeures(message, heures, options) {
const dormi = { heures: 0, etat: 'dort' }; const dormi = { heures: 0, etat: 'dort', jetsReve: [] };
for (; dormi.heures < heures && dormi.etat == 'dort'; dormi.heures++) { for (; dormi.heures < heures && dormi.etat == 'dort'; dormi.heures++) {
await this._recupererEthylisme(message); await this.$recupererEthylisme(message);
if (options.grisReve) { if (options.grisReve) {
await this.recupererFatigue(message); await this.$recupererFatigue(message);
} }
else if (!this.system.sommeil?.insomnie) { else if (!this.system.sommeil?.insomnie) {
await this.recupererFatigue(message); await this.$recupererFatigue(message);
dormi.etat = await this.jetRecuperationReve(jetsReve, message); await this.$jetRecuperationReve(dormi, message);
if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) { if (dormi.etat == 'dort' && EffetsDraconiques.isDonDoubleReve(this)) {
dormi.etat = await this.jetRecuperationReve(jetsReve, message); dormi.etat = await this.$jetRecuperationReve(dormi, message);
} }
} }
} }
@ -491,35 +490,36 @@ export class RdDActor extends RdDBaseActorSang {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async jetRecuperationReve(jetsReve, message) { async $jetRecuperationReve(dormi, message) {
if (this.getReveActuel() < this.system.reve.seuil.value) { if (this.getReveActuel() < this.system.reve.seuil.value) {
let reve = await RdDDice.rollTotal("1dr"); const reve = await RdDDice.rollTotal("1dr")
if (reve >= 7) { if (reve >= 7) {
// Rêve de Dragon ! // Rêve de Dragon !
message.content += `Vous faites un <strong>Rêve de Dragon</strong> de ${reve} Points de rêve qui vous réveille! `; message.content += `Vous faites un <strong>Rêve de Dragon</strong> de ${reve} Points de rêve qui vous réveille! `;
await this.combattreReveDeDragon(reve); await this.combattreReveDeDragon(reve);
jetsReve.push(-1); dormi.jetsReve.push(-1);
return 'eveil'; dormi.etat = 'eveil'
return
} }
else { else {
if (!ReglesOptionnelles.isUsing("recuperation-reve")) { if (!ReglesOptionnelles.isUsing("recuperation-reve")) {
ChatMessage.create({ ChatMessage.create({
whisper: ChatUtility.getOwners(this), whisper: ChatUtility.getOwners(this),
content: `Pas de récupération de rêve (${reve} points ignorés)` content: `Pas de récupération de rêve (${reve} points ignorés)`
}); })
jetsReve.push(0); dormi.jetsReve.push(0)
} }
else { else {
await this.reveActuelIncDec(reve); await this.reveActuelIncDec(reve)
jetsReve.push(reve); dormi.jetsReve.push(reve)
} }
} }
} }
return 'dort'; dormi.etat = 'dort'
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async _recupererEthylisme(message) { async $recupererEthylisme(message) {
if (!ReglesOptionnelles.isUsing("recuperation-ethylisme")) { return; } if (!ReglesOptionnelles.isUsing("recuperation-ethylisme")) { return; }
let value = Math.min(Number.parseInt(this.system.compteurs.ethylisme.value) + 1, 1); let value = Math.min(Number.parseInt(this.system.compteurs.ethylisme.value) + 1, 1);
if (value <= 0) { if (value <= 0) {
@ -549,18 +549,15 @@ export class RdDActor extends RdDBaseActorSang {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async recupererFatigue(message) { async $recupererFatigue(message) {
if (ReglesOptionnelles.isUsing("appliquer-fatigue")) { if (ReglesOptionnelles.isUsing("appliquer-fatigue")) {
let fatigue = this.system.sante.fatigue.value; let fatigue = this.system.sante.fatigue.value
const fatigueMin = this.getFatigueMin(); const fatigueMin = this.getFatigueMin()
if (fatigue <= fatigueMin) { if (fatigue <= fatigueMin) {
return; return
} }
fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue)); fatigue = Math.max(fatigueMin, this._calculRecuperationSegment(fatigue))
setTimeout( // On attend un peu pour que le message de récupération de r
async () => {
await this.update({ 'system.sante.fatigue.value': fatigue }); await this.update({ 'system.sante.fatigue.value': fatigue });
}, 200);
if (fatigue == 0) { if (fatigue == 0) {
message.content += "Vous êtes complêtement reposé. "; message.content += "Vous êtes complêtement reposé. ";
} }