forked from public/foundryvtt-reve-de-dragon
		
	Pour les fenêtres de stress/repos/voyage/astrologie, ignorer les personnages non liés (par exemple, un guerrier sorde)
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
 | |
| export class DialogChateauDormant extends Dialog {
 | |
| 
 | |
|   static async create() {
 | |
|     const date = game.system.rdd.calendrier.dateCourante();
 | |
|     const dialogData = {
 | |
|       actors: game.actors.filter(actor => actor.isPersonnageJoueur()),
 | |
|       date: date,
 | |
|       motifStress: `Nuit du ${date}`,
 | |
|       finChateauDormant: game.system.rdd.calendrier.getTimestampFinChateauDormant()
 | |
|     };
 | |
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-chateau-dormant.hbs",
 | |
|       dialogData);
 | |
| 
 | |
|     new DialogChateauDormant(dialogData, html)
 | |
|       .render(true);
 | |
|   }
 | |
| 
 | |
|   constructor(dialogData, html) {
 | |
|     const options = {
 | |
|       classes: ["rdd-dialog-chateau-dormant"],
 | |
|       width: 600,
 | |
|       height: 'fit-content',
 | |
|       'z-index': 99999
 | |
|     };
 | |
|     const conf = {
 | |
|       title: "De Chateau dormant à Vaisseau",
 | |
|       content: html,
 | |
|       buttons: {
 | |
|         chateauDormant: { label: "Passer à Vaisseau!", callback: it => { this.onChateauDormant(); } }
 | |
|       }
 | |
|     };
 | |
|     super(conf, options);
 | |
|     this.dialogData = dialogData;
 | |
|   }
 | |
| 
 | |
|   activateListeners(html) {
 | |
|     super.activateListeners(html);
 | |
|     this.html = html;
 | |
|     this.html.find('input.sommeil-insomnie').change(event => this.onInsomnie(event));
 | |
|     this._activateListenerOnActorMoral(this.html);
 | |
|   }
 | |
| 
 | |
|   _activateListenerOnActorMoral(html) {
 | |
|     html.find(`span.sommeil-actor-moral a`).click(event => this.onActorMoral(event));
 | |
|   }
 | |
| 
 | |
|   onInsomnie(event) {
 | |
|     const sommeilInsomnie = this.html.find(event.currentTarget);
 | |
|     const isInsomnie = sommeilInsomnie.is(':checked');
 | |
|     const sommeilHeures = sommeilInsomnie.parents('.set-sommeil-actor').find('input.sommeil-heures');
 | |
|     sommeilHeures.prop('disabled', isInsomnie);
 | |
|     if (isInsomnie) {
 | |
|       sommeilHeures.val('0');
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   async onActorMoral(event) {
 | |
|     const selected = this.html.find(event.currentTarget);
 | |
|     const actorRow = selected.parents('.set-sommeil-actor');
 | |
|     const actorId = actorRow.data('actor-id');
 | |
|     const actor = this.getActor(actorId);
 | |
|     actor.system.sommeil.moral = selected.data('moral');
 | |
|     const htmlMoral = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/sommeil/sommeil-actor-moral.hbs', actor.system.sommeil)
 | |
|     actorRow.find('.sommeil-actor-moral').html(htmlMoral);
 | |
|     // re-attach listeners for actor row
 | |
|     this._activateListenerOnActorMoral(actorRow);
 | |
|   }
 | |
| 
 | |
|   getActor(actorId) {
 | |
|     return this.dialogData.actors.find(it => it.id == actorId);
 | |
|   }
 | |
| 
 | |
|   async onChateauDormant() {
 | |
|     const motifStress = this.html.find("form input[name='motifStress']").val();
 | |
|     jQuery.map(
 | |
|       this.html.find('li.set-sommeil-actor'),
 | |
|       it => this.extractConsigneActor(this.html.find(it), motifStress)
 | |
|     ).forEach(async consigne => await consigne.actor.prepareChateauDormant(consigne))
 | |
|   }
 | |
| 
 | |
| 
 | |
|   extractConsigneActor(actorRow, motifStress) {
 | |
|     const actorId = actorRow.data('actor-id');
 | |
|     const actor = this.getActor(actorId);
 | |
|     const insomnie = actorRow.find('input.sommeil-insomnie').is(':checked');
 | |
|     return {
 | |
|       actor,
 | |
|       ignorer: actorRow.find('input.sommeil-ignorer').is(':checked'),
 | |
|       stress: {
 | |
|         motif: motifStress,
 | |
|         valeur: Number.parseInt(actorRow.find('input.sommeil-stress').val()),
 | |
|       },
 | |
|       sommeil: {
 | |
|         nouveaujour: true,
 | |
|         date: this.dialogData.finChateauDormant,
 | |
|         insomnie: insomnie,
 | |
|         heures: insomnie ? 0 : Number.parseInt(actorRow.find('input.sommeil-heures').val()),
 | |
|         moral: actor.system.sommeil.moral ?? 'neutre',
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| } |