| 
							
							
							
						 |  |  | @@ -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() { | 
		
	
	
		
			
				
					
					|  |  |  |   |