forked from public/foundryvtt-reve-de-dragon
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { ReglesOptionnelles } from "../settings/regles-optionnelles.js";
 | |
| import { EffetsDraconiques } from "../tmr/effets-draconiques.js";
 | |
| 
 | |
| export class DialogRepos extends Dialog {
 | |
| 
 | |
|   static async create(actor) {
 | |
|     if (!actor.isPersonnage()) {
 | |
|       return
 | |
|     }
 | |
|     if (!ReglesOptionnelles.isUsing("chateau-dormant-gardien") || !actor.hasPlayerOwner) {
 | |
|       actor.system.sommeil = {
 | |
|         "nouveaujour": true,
 | |
|         "insomnie": EffetsDraconiques.isSujetInsomnie(actor),
 | |
|         "moral": "neutre",
 | |
|         "heures": 4
 | |
|       }
 | |
|     }
 | |
|     const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/sommeil/dialog-repos.hbs", actor);
 | |
|     const dialog = new DialogRepos(html, actor);
 | |
|     dialog.render(true);
 | |
|   }
 | |
| 
 | |
|   constructor(html, actor) {
 | |
|     let options = { classes: ["dialog-repos"], width: 400, height: 'fit-content', 'z-index': 99999 };
 | |
|     let conf = {
 | |
|       title: "Se reposer",
 | |
|       content: html,
 | |
|       default: "repos",
 | |
|       buttons: {
 | |
|         "repos": { label: "Se reposer", callback: async it => { this.repos(); } }
 | |
|       }
 | |
|     };
 | |
|     super(conf, options);
 | |
|     this.actor = actor;
 | |
|   }
 | |
|   activateListeners(html) {
 | |
|     super.activateListeners(html);
 | |
|     this.html = html;
 | |
|     this.html.find(`.sommeil-actor-moral a`).click(event => this.onActorMoral(event));
 | |
|   }
 | |
|   /* -------------------------------------------- */
 | |
| 
 | |
|   async repos() {
 | |
|     const selection = await this.html.find("[name='repos']:checked").val();
 | |
|     switch (selection) {
 | |
|       case "sieste": return await this.sieste();
 | |
|       case "nuit": return await this.nuit();
 | |
|       case "chateau-dormant": return await this.chateauDormant();
 | |
|       case "gris-reve": return await this.grisReve();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   async grisReve() {
 | |
|     await this.html.find("[name='nb-jours']").change();
 | |
|     const nbJours = Number.parseInt(await this.html.find("[name='nb-jours']").val());
 | |
|     await this.actor.grisReve(nbJours);
 | |
|   }
 | |
| 
 | |
|   async chateauDormant() {
 | |
|     await this.actor.dormirChateauDormant();
 | |
|   }
 | |
| 
 | |
|   async nuit() {
 | |
|     await this.html.find("[name='sommeil.heures']").change();
 | |
|     const val = await this.html.find("[name='sommeil.heures']").val();
 | |
|     const sommeilHeures = Number.parseInt(val ?? '0');
 | |
|     await this.actor.dormir(sommeilHeures, { chateauDormant: true });
 | |
|   }
 | |
| 
 | |
|   async sieste() {
 | |
|     await this.html.find("[name='sieste.heures']").change();
 | |
|     const siesteHeures = Number.parseInt(await this.html.find("[name='sieste.heures']").val());
 | |
|     await this.actor.dormir(siesteHeures);
 | |
|   }
 | |
| 
 | |
|   async onActorMoral(event) {
 | |
|     const selected = this.html.find(event.currentTarget);
 | |
|     const parentDiv = selected.parents().find('.sommeil-actor-moral');
 | |
|     const situationMoral = selected.data('moral');
 | |
|     await this.actor.setInfoSommeilMoral(situationMoral);
 | |
|     const htmlMoral = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/sommeil/sommeil-actor-moral.hbs', {
 | |
|       moral: situationMoral
 | |
|     });
 | |
|     parentDiv.html(htmlMoral);
 | |
|     this.html.find(`.sommeil-actor-moral a`).click(event => this.onActorMoral(event));
 | |
|   }
 | |
| }
 |