From a59db9a22d72c84b05710e821be4df928d0fb79f Mon Sep 17 00:00:00 2001 From: sladecraven Date: Fri, 20 Nov 2020 13:46:43 +0100 Subject: [PATCH] #27 Gestion des rencontres --- module/actor.js | 1 + module/rdd-roll-dialog.js | 4 +-- module/rdd-tmr-dialog.js | 64 ++++++++++++++++++++++----------- module/tmr-utility.js | 6 ++-- styles/simple.css | 1 + templates/dialog-roll-sort.html | 3 ++ 6 files changed, 53 insertions(+), 26 deletions(-) diff --git a/module/actor.js b/module/actor.js index 1687a427..b70d02ba 100644 --- a/module/actor.js +++ b/module/actor.js @@ -945,6 +945,7 @@ export class RdDActor extends Actor { selectedDraconic: this.getBestDraconic(), selectedSort: sortList[0], coord: coord, + coordLabel: TMRUtility.getTMRDescription( coord).label, finalLevel: 0, diffConditions: 0, diffLibre: sortList[0].data.difficulte, // Per default at startup diff --git a/module/rdd-roll-dialog.js b/module/rdd-roll-dialog.js index d315e679..e699ccf4 100644 --- a/module/rdd-roll-dialog.js +++ b/module/rdd-roll-dialog.js @@ -25,8 +25,8 @@ export class RdDRollDialog extends Dialog { // Common conf let dialogConf = { content: html, title: "Test", buttons: myButtons, default: "rollButton" } - let dialogOptions = { classes: ["rdddialog"], width: 600, height: 400 } - + let dialogOptions = { classes: ["rdddialog"], width: 600, height: 400, 'z-index': 30 } + // Select proper roll dialog template and stuff if (mode == "competence") { dialogConf.title = "Test de compétence" diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index bfcd3f7f..04b5252d 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -46,7 +46,7 @@ export class RdDTMRDialog extends Dialog { this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list); this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list); this.allTokens = []; - this.rencontreState = "aucune"; + this.rencontreState = 'aucune'; this.pixiApp = new PIXI.Application({ width: 720, height: 860 }); } @@ -101,10 +101,11 @@ export class RdDTMRDialog extends Dialog { this.updatePreviousRencontres(); console.log("-> refouler", this.currentRencontre) this.updateValuesDisplay(); + this.nettoyerRencontre(); } /* -------------------------------------------- */ - colorierZone( locList) { + colorierZoneRencontre( locList) { this.currentRencontre.graphics = []; // Keep track of rectangles to delete it this.currentRencontre.locList = duplicate(locList); // And track of allowed location for (let loc of locList) { @@ -125,16 +126,17 @@ export class RdDTMRDialog extends Dialog { rencontrePostProcess( rencontreData) { if (!rencontreData) return; // Sanity check this.rencontreState = rencontreData.state; // garder la trace de l'état en cours - if ( this.rencontreState == "passeur") { + + if ( this.rencontreState == 'passeur') { console.log("Processing passeur"); // Récupère la liste des cases à portées let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants ); - this.colorierZone( locList ); - } else if ( this.rencontreState == "messager") { + this.colorierZoneRencontre( locList ); + } else if ( this.rencontreState == 'messager') { console.log("Processing messager"); // Récupère la liste des cases à portées let locList = TMRUtility.getTMRArea(this.actor.data.data.reve.tmrpos.coord, this.currentRencontre.force, tmrConstants ); - this.colorierZone( locList ); + this.colorierZoneRencontre( locList ); } else { this.currentRencontre = undefined; // Cleanup, not used anymore } @@ -161,7 +163,7 @@ export class RdDTMRDialog extends Dialog { rencontreData = await TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled, this); message += rencontreData.message; this._tellToUser("Vous avez échoué à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force - + "
Vous quittez brutalement les Terres Médianes !" + message); + + message); if (this.currentRencontre.data.quitterTMR) // Selon les rencontres, quitter TMR ou pas this.close(); } else { @@ -199,7 +201,7 @@ export class RdDTMRDialog extends Dialog { rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); } } - rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); + //rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); if (rencontre) { // Manages it if (rencontre.rencontre) rencontre = rencontre.rencontre; // Manage stored rencontres @@ -321,17 +323,29 @@ export class RdDTMRDialog extends Dialog { } } + /* -------------------------------------------- */ + nettoyerRencontre( ) { + if ( !this.currentRencontre) return; // Sanity check + if ( this.currentRencontre.graphics) { + for (let drawRect of this.currentRencontre.graphics) { // Suppression des dessins des zones possibles + this.pixiApp.stage.removeChild( drawRect ); + } + } + this.currentRencontre = undefined; // Nettoyage de la structure + this.rencontreState = 'aucune'; // Et de l'état + } + /* -------------------------------------------- */ processClickPostRencontre( coord ) { let deplacementType = "erreur"; - if (this.rencontreState == "passeur" || this.rencontreState == "messager") { + if (this.rencontreState == 'passeur' || this.rencontreState == 'messager') { + console.log("Searching", this.currentRencontre.locList, coord); let isInArea = this.currentRencontre.locList.find(locCoord => locCoord == coord ); if ( isInArea ) { // OK ! - deplacementType = "saut"; - - } - + deplacementType = (this.rencontreState == 'messager') ? 'messager' : 'saut'; + } } + return deplacementType; } /* -------------------------------------------- */ @@ -347,19 +361,21 @@ export class RdDTMRDialog extends Dialog { let celly = eventCoord.celly; console.log("deplacerDemiReve >>>>", cellx, celly); let currentPos = TMRUtility.convertToCellCoord(myself.actor.data.data.reve.tmrpos.coord); + let coordTMR = TMRUtility.convertToTMRCoord(cellx, celly); // Validation de la case de destination (gestion du cas des rencontres qui peuvent téléporter) - let deplacementType = "erreur"; - if ( this.rencontreState == "aucune") { // Pas de recontre en post-processing, donc deplacement normal - if ( !RdDTMRDialog._horsDePortee(currentPos, cellx, celly)) { - deplacementType = "normal"; + let deplacementType = 'erreur'; + if ( myself.rencontreState == 'aucune') { // Pas de recontre en post-processing, donc deplacement normal + if ( !RdDTMRDialog._horsDePortee(currentPos, cellx, celly) ) { + deplacementType = 'normal'; } } else { - deplacementType = this.processClickPostRencontre( currentPos ); + deplacementType = myself.processClickPostRencontre( coordTMR ); } // Si le deplacement est valide - if ( deplacementType == "normal" || deplacementType == "saut") { - let coordTMR = TMRUtility.convertToTMRCoord(cellx, celly); + if ( deplacementType == 'normal' || deplacementType == 'saut') { + if ( myself.currentRencontre != 'normal' ) + myself.nettoyerRencontre(); let cellDescr = TMRUtility.getTMRDescription(coordTMR); console.log("deplacerDemiReve: TMR column is", coordTMR, cellx, celly, cellDescr, this); @@ -371,13 +387,19 @@ export class RdDTMRDialog extends Dialog { myself.nbFatigue += 1; myself.updateValuesDisplay(); - if ( deplacementType == "normal") { // Pas de rencontres après un saut de type passeur/changeur/... + if ( deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/... myself.manageRencontre(coordTMR, cellDescr); } myself.manageCaseHumide(cellDescr); await myself.declencheSortEnReserve(coordTMR); + + } else if (deplacementType == 'messager') { // Dans ce cas, ouverture du lancement de sort sur la case visée + myself.actor.rollUnSort( coordTMR ); + myself.nettoyerRencontre(); + } else { ui.notifications.error("Vous ne pouvez vous déplacer que sur des cases adjacentes à votre position ou valides dans le cas d'une rencontre"); + console.log("STATUS :", myself.rencontreState, myself.currentRencontre); } } diff --git a/module/tmr-utility.js b/module/tmr-utility.js index c859df14..40299194 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -276,9 +276,9 @@ export class TMRUtility { rencontre.coord = coordTMR; } // Forced - rencontre = rencontresTable[0]; - rencontre.force = 1; - rencontre.coord = coordTMR; + //rencontre = rencontresTable[0]; + //rencontre.force = 2; + //rencontre.coord = coordTMR; return rencontre; } diff --git a/styles/simple.css b/styles/simple.css index 451dd31d..f731ffc0 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -340,6 +340,7 @@ .rdddialog { width: 600px; height: 430px; + z-index: 100; } .table-resolution-carac { diff --git a/templates/dialog-roll-sort.html b/templates/dialog-roll-sort.html index 856d71f3..30c6df83 100644 --- a/templates/dialog-roll-sort.html +++ b/templates/dialog-roll-sort.html @@ -3,6 +3,9 @@
+
+