diff --git a/changelog.md b/changelog.md index b4861091..b358b54c 100644 --- a/changelog.md +++ b/changelog.md @@ -10,6 +10,8 @@ - Les messages pour résister aux possessions/conjuration sont envoyées au défenseur - Les messages pour résister aux empoignades sont envoyées au défenseur +- la commande /voyage affiche maintenant le total de fatigue pour chaque voyageur +- la commande /voyage affiche maintenant les compétences liées au terrain ## 12.0.6 - Le bazar d'Astrobazzarh - Corrections de l'inventaire en bazar: diff --git a/module/voyage/dialog-fatigue-voyage.js b/module/voyage/dialog-fatigue-voyage.js index 74a4b179..1ae7bef6 100644 --- a/module/voyage/dialog-fatigue-voyage.js +++ b/module/voyage/dialog-fatigue-voyage.js @@ -1,6 +1,7 @@ import { TYPES } from "../item.js" import { RdDItemCompetence } from "../item-competence.js" import { ChatUtility } from "../chat-utility.js" +import { Misc } from "../misc.js" const CODES_COMPETENCES_VOYAGE = ['Extérieur', 'Forêt', 'Montagne', 'Marais', 'Glace', 'Equitation'] const TABLEAU_FATIGUE_MARCHE = [ @@ -36,7 +37,7 @@ export class DialogFatigueVoyage extends Dialog { const parameters = { tableauFatigueMarche: TABLEAU_FATIGUE_MARCHE, playerActors: game.actors.filter(actor => actor.isPersonnageJoueur()) - .map(actor => DialogFatigueVoyage.prepareActor(actor)), + .map(actor => DialogFatigueVoyage.prepareActorParameters(actor)), nombreHeures: 1, } DialogFatigueVoyage.setModeDeplacement(parameters, undefined, undefined) @@ -53,21 +54,37 @@ export class DialogFatigueVoyage extends Dialog { parameters.typeTerrain = ligneFatigueMarche parameters.vitesseDeplacement = rythme.vitesse parameters.fatigueHoraire = rythme.fatigue + parameters.playerActors.forEach(voyageur => + DialogFatigueVoyage.selectSurvie(voyageur, parameters.typeTerrain.code) + ) } - static prepareActor(actor) { - const competencesVoyage = {} - CODES_COMPETENCES_VOYAGE.forEach(codeSurvie => - competencesVoyage[codeSurvie] = RdDItemCompetence.findCompetence(actor.itemTypes[TYPES.competence], codeSurvie, { onMessage: () => { } }) - ) - return { + static prepareActorParameters(actor) { + const actorParameters = { + id: actor.id, actor: actor, selected: true, ajustementFatigue: 0, - competencesVoyage: competencesVoyage + survies: {} } + const competencesVoyage = {} + CODES_COMPETENCES_VOYAGE.forEach(codeSurvie => { + competencesVoyage[codeSurvie] = RdDItemCompetence.findCompetence(actor.itemTypes[TYPES.competence], codeSurvie, { onMessage: () => { } }) + }) + TABLEAU_FATIGUE_MARCHE.forEach(terrain => { + actorParameters.survies[terrain.code] = Misc.join( + terrain.survies.map(survie => { + const niveau = competencesVoyage[survie]?.system.niveau + return `${survie}: ${niveau}` + }), + ', ') + }) + return actorParameters } + static selectSurvie(actorParameters, code) { + actorParameters.survieCourante = actorParameters.survies[code] + } constructor(html, parameters) { const options = { @@ -97,6 +114,7 @@ export class DialogFatigueVoyage extends Dialog { this.html.find('select[name="code-terrain"]').change(event => this.changeParameters()) this.html.find('select[name="vitesse-deplacement"]').change(event => this.changeParameters()) this.html.find('input[name="nombre-heures"]').change(event => this.changeParameters()) + this.html.find('.list-item input[name="ajustement-fatigue"]').change(event => this.changeParameters()) this.html.find('button[name="appliquer-fatigue"]').click(event => this.appliquerFatigue()) } @@ -118,6 +136,10 @@ export class DialogFatigueVoyage extends Dialog { selectVitesseDeplacement.append(await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/voyage/option-vitesse-fatigue.hbs', rythme)) }) selectVitesseDeplacement.val(this.parameters.vitesseDeplacement).change() + + Promise.all(this.getActorRows() + .map(async row => row.find('label.voyage-liste-survies').text(this.$extractActorParameters(row).survieCourante) + )) } } @@ -132,16 +154,24 @@ export class DialogFatigueVoyage extends Dialog { } async setFatigue() { - this.html.find('input[name="base-fatigue"]').val(this.parameters.nombreHeures * this.parameters.fatigueHoraire) + const baseFatigue = this.parameters.nombreHeures * this.parameters.fatigueHoraire + this.html.find('input[name="base-fatigue"]').val(baseFatigue) + this.updateActorTotalFatigue(baseFatigue) + } + + async updateActorTotalFatigue(baseFatigue) { + Promise.all(this.getActorRows() + .map(async row => { + const actor = this.$extractActorParameters(row) + row.find('input[name="total-fatigue"]').val(actor.ajustement + baseFatigue) + })) } async appliquerFatigue() { const fatigueBase = parseInt(this.html.find('input[name="base-fatigue"]').val() ?? 0) - const actors = jQuery.map( - this.html.find('div.fatigue-actors-list li.list-item'), - it => this.$extractActor(this.html.find(it)) - ) - actors.filter(it => it.selected) + this.getActorRows() + .map(row => this.$extractActorParameters(row)) + .filter(it => it.selected) .forEach(async it => { const perteFatigue = fatigueBase + it.ajustement ChatMessage.create({ @@ -161,16 +191,24 @@ export class DialogFatigueVoyage extends Dialog { }) } - $extractActor(actorRow) { - const actor = game.actors.get(actorRow.data('actor-id')) + getActorRows() { + return jQuery.map( + this.html.find('div.fatigue-actors-list li.list-item'), + it => this.html.find(it)) + } + + + $extractActorParameters(actorRow) { + const actorId = actorRow.data('actor-id') + const actorParameters = this.parameters.playerActors.find(it => it.id == actorId) + const actor = game.actors.get(actorId) if (!actor) { ui.notifications.warn(`Acteur ${it.actorId} introuvable`) + return {} } - return { - actor: actor, - ajustement: parseInt(actorRow.find('input[name="ajustement-fatigue"]').val() ?? 0), - selected: actor && actorRow.find('input[name="selectionner-acteur"]').is(':checked') - } + actorParameters.ajustement = parseInt(actorRow.find('input[name="ajustement-fatigue"]').val() ?? 0) + actorParameters.selected = actor && actorRow.find('input[name="selectionner-acteur"]').is(':checked') + return actorParameters } async close() { diff --git a/templates/voyage/dialog-fatigue-voyage.hbs b/templates/voyage/dialog-fatigue-voyage.hbs index 4dbd1f9a..8d98c9d5 100644 --- a/templates/voyage/dialog-fatigue-voyage.hbs +++ b/templates/voyage/dialog-fatigue-voyage.hbs @@ -42,7 +42,8 @@
  • Personnage Survies - Ajustements + Ajustements + Total
  • {{#each playerActors as |selected|}} {{>'systems/foundryvtt-reve-de-dragon/templates/voyage/fatigue-actor.hbs' voyageur=selected survies=@root.typeTerrain.survies}} diff --git a/templates/voyage/fatigue-actor.hbs b/templates/voyage/fatigue-actor.hbs index ce8ee826..1420013e 100644 --- a/templates/voyage/fatigue-actor.hbs +++ b/templates/voyage/fatigue-actor.hbs @@ -8,16 +8,13 @@
    - +
    + + +