From ad64bc40216faf885edf6b253f190a6ad0f69593 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Tue, 17 Nov 2020 18:08:19 +0100 Subject: [PATCH] #27 Gestion des rencontres --- module/rdd-tmr-dialog.js | 28 ++++++++++++++++++++++------ module/rdd-utility.js | 9 +++++---- module/tmr-utility.js | 8 ++++---- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 88e75d64..ec9cbceb 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -38,17 +38,19 @@ export class RdDTMRDialog extends Dialog { this.tmrdata = duplicate(tmrData); this.actor = actor; + this.actor.tmrApp = this; // reference this app in the actor structure this.viewOnly = viewOnly this.nbFatigue = this.viewOnly ? 0 : 1; // 1 premier point de fatigue du à la montée this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list); this.sortReserves = duplicate(this.actor.data.data.reve.reserve.list); - this.allTokens = [] + this.allTokens = []; this.pixiApp = new PIXI.Application({ width: 720, height: 860 }); } /* -------------------------------------------- */ close() { this.actor.santeIncDec("fatigue", this.nbFatigue).then(super.close()); // moving 1 cell costs 1 fatigue + this.actor.tmrApp = undefined; // Cleanup reference } /* -------------------------------------------- */ @@ -114,12 +116,12 @@ export class RdDTMRDialog extends Dialog { + RdDResolutionTable.explain(rolled); if (rolled.isEchec) { - message += TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled); + message += await TMRUtility.processRencontreEchec(this.actor, this.currentRencontre, rolled); this._tellToUser("Vous avez échoué à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + "
Vous quittez brutalement les Terres Médianes !" + message); this.close(); } else { - message += TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled); + message += await TMRUtility.processRencontreReussite(this.actor, this.currentRencontre, rolled); this._tellToUser("Vous avez réussi à maîtriser un " + this.currentRencontre.name + " de force " + this.currentRencontre.force + message); } console.log("-> matriser", this.currentRencontre); @@ -140,9 +142,9 @@ export class RdDTMRDialog extends Dialog { let rencontre = this.rencontresExistantes.find(prev => prev.coord == coordTMR); if (rencontre == undefined) { let deRencontre = new Roll("d7").roll(); - //if (deRencontre.total == 7) { + if (deRencontre.total == 7) { rencontre = await TMRUtility.rencontreTMRRoll(coordTMR, cellDescr); - //} + } } if (rencontre) { // Manages it @@ -178,7 +180,7 @@ export class RdDTMRDialog extends Dialog { let tmrpos = document.getElementById("tmr-pos"); let tmr = TMRUtility.getTMRDescription(this.actor.data.data.reve.tmrpos.coord); - console.log("updateValuesDisplay", this.actor.data.data.reve.tmrpos, tmr); + //console.log("updateValuesDisplay", this.actor.data.data.reve.tmrpos, tmr); tmrpos.innerHTML = this.actor.data.data.reve.tmrpos.coord + " (" + tmr.label + ")"; let etat = document.getElementById("etatgeneral-value"); @@ -300,6 +302,12 @@ export class RdDTMRDialog extends Dialog { } } + /* -------------------------------------------- */ + async forceDemiRevePosition( coordTMR ) { + await actor.updateCoordTMR(coordTMR); + this._updateDemiReve(this); + } + /* -------------------------------------------- */ async activateListeners(html) { super.activateListeners(html); @@ -368,6 +376,7 @@ export class RdDTMRDialog extends Dialog { return { cellx, celly }; } + /* -------------------------------------------- */ static _horsDePortee(pos, cellx, celly) { return Math.abs(cellx - pos.x) > 1 || Math.abs(celly - pos.y) > 1 @@ -375,6 +384,7 @@ export class RdDTMRDialog extends Dialog { || (celly == 0 && celly < pos.y && cellx != pos.x && pos.x % 2 == 1); } + /* -------------------------------------------- */ _tokenRencontre(rencontre) { let sprite = new PIXI.Graphics(); sprite.beginFill(0x767610, 0.6); @@ -387,6 +397,7 @@ export class RdDTMRDialog extends Dialog { return { sprite: sprite, rencontre: rencontre, coordTMR: () => rencontre.coord }; } + /* -------------------------------------------- */ _tokenSortEnReserve(sort) { let sprite = new PIXI.Graphics(); sprite.beginFill(0x101010, 0.8); @@ -399,6 +410,7 @@ export class RdDTMRDialog extends Dialog { return { sprite: sprite, sort: sort, coordTMR: () => sort.coord } } + /* -------------------------------------------- */ _tokenDemiReve() { let texture = PIXI.utils.TextureCache['demi-reve']; let sprite = new PIXI.Sprite(texture); @@ -416,10 +428,12 @@ export class RdDTMRDialog extends Dialog { this.pixiApp.stage.addChild(this.demiReve.sprite); } + /* -------------------------------------------- */ _updateDemiReve(myself) { myself._setTokenPosition(myself.demiReve); } + /* -------------------------------------------- */ _setTokenPosition(token) { let coordXY = TMRUtility.convertToCellCoord(token.coordTMR()); let decallagePairImpair = (coordXY.x % 2 == 0) ? tmrConstants.col1_y : tmrConstants.col2_y; @@ -429,6 +443,7 @@ export class RdDTMRDialog extends Dialog { token.sprite.y = tmrConstants.gridy + (coordXY.y * tmrConstants.cellh) + dy + decallagePairImpair; } + /* -------------------------------------------- */ _removeTokens(filter) { const tokensToRemove = this.allTokens.filter(filter); for (let token of tokensToRemove) { @@ -436,6 +451,7 @@ export class RdDTMRDialog extends Dialog { } } + /* -------------------------------------------- */ _trackToken(token) { this.allTokens.push(token) this._setTokenPosition(token); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 4082520a..d430f3c6 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -583,10 +583,11 @@ export class RdDUtility { }); html.on("click", '.tmr-passeur-coord a', event => { - let coord = event.currentTarget.attributes['data-tmr-coord'].value; - let actor = game.actors.get( game.user.character.id ); - actor.updateCoordTMR(coord); - }); + let coord = event.currentTarget.attributes['data-tmr-coord'].value; + let actorId = event.currentTarget.attributes['data-actor-id'].value; + let actor = game.actors.get( actorId ); + actor.tmrApp.forceDemiRevePosition(coord); + }); } diff --git a/module/tmr-utility.js b/module/tmr-utility.js index 57b88799..6a9977e7 100644 --- a/module/tmr-utility.js +++ b/module/tmr-utility.js @@ -268,11 +268,11 @@ export class TMRUtility { /* -------------------------------------------- */ static async rencontreTMRRoll( coordTMR, cellDescr ) { - //let rencontre = this.rencontreTMRTypeCase(cellDescr.type); - let rencontre = rencontresTable[4]; + let rencontre = this.rencontreTMRTypeCase(cellDescr.type); + //let rencontre = rencontresTable[4]; if (rencontre){ rencontre = duplicate(rencontre); - rencontre.force = 1;//this.evaluerForceRencontre(rencontre); + rencontre.force = this.evaluerForceRencontre(rencontre); rencontre.coord = coordTMR; } return rencontre; @@ -378,7 +378,7 @@ export class TMRUtility { let locList = this.getLocationTypeList( actor.data.data.reve.tmrpos.coord ); for ( let coord of locList) { let caseTMR = TMRMapping[coord]; - msg += "
  • "+coord+" - " +caseTMR.label+"
  • "; + msg += "
  • "+coord+" - " +caseTMR.label+"
  • "; } } else if (rencontre.name == "Briseur de Rêve") {