From 969291a526059194ff00ed0da85fae4b5ddd1dbb Mon Sep 17 00:00:00 2001 From: sladecraven Date: Sun, 3 Jan 2021 15:40:48 +0100 Subject: [PATCH] =?UTF-8?q?#105=20Affichage=20r=C3=A9sum=C3=A9=20a=20chaqu?= =?UTF-8?q?e=20tour=20de=20combat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/actor.js | 26 +++++++++++++-- module/chat-utility.js | 1 + module/rdd-combat.js | 45 +++++++++++++++++++++++++- module/rdd-main.js | 14 ++------ module/rdd-resolution-table.js | 2 ++ module/rdd-utility.js | 5 ++- templates/chat-actor-turn-summary.html | 9 ++++++ 7 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 templates/chat-actor-turn-summary.html diff --git a/module/actor.js b/module/actor.js index fd5a2bd2..fea389a0 100644 --- a/module/actor.js +++ b/module/actor.js @@ -232,7 +232,7 @@ export class RdDActor extends Actor { return ''; } // TODO: gérer une liste de flags demi-surprise (avec icône sur le token)? - if ( this.data.data.sante.sonne.value) { + if ( this.data.data.sante.sonne && this.data.data.sante.sonne.value) { return 'demi'; } return ''; @@ -748,7 +748,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ getEtatGeneral() { - return (this.data.data.compteurs && actor.data.data.compteurs.etat) ? this.data.data.compteurs.etat.value : 0; + return (this.data.data.compteurs && this.data.data.compteurs.etat) ? this.data.data.compteurs.etat.value : 0; } /* -------------------------------------------- */ @@ -924,6 +924,23 @@ export class RdDActor extends Actor { await this.update( {"data.reve.seuil": seuil } ); } + /* -------------------------------------------- */ + getSonne() { + if ( !this.isEntiteCauchemar() && this.data.data.sante.sonne ) { + return this.data.data.sante.sonne.value; + } + return false; + } + + /* -------------------------------------------- */ + getSConst() { + + if ( !this.isEntiteCauchemar() && this.data.data.attributs ) { + return this.data.data.attributs.sconst.value; + } + return 0; + } + /* -------------------------------------------- */ testSiSonne( sante, endurance ) { @@ -945,6 +962,11 @@ export class RdDActor extends Actor { { return blessuresListe.filter(b => b.active).length } + /* -------------------------------------------- */ + countBlessuresByName( name ) + { + return this.countBlessures( this.data.data.blessures[name].liste ); + } /* -------------------------------------------- */ async jetVie() { diff --git a/module/chat-utility.js b/module/chat-utility.js index e45ebe30..e1bd0728 100644 --- a/module/chat-utility.js +++ b/module/chat-utility.js @@ -4,6 +4,7 @@ */ export class ChatUtility { + /* -------------------------------------------- */ static chatWithRollMode(chatOptions, name) { let rollMode = game.settings.get("core", "rollMode"); ChatUtility.createChatMessage(chatOptions, rollMode, name); diff --git a/module/rdd-combat.js b/module/rdd-combat.js index 634d3371..dd9e37b2 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -58,7 +58,7 @@ export class RdDCombat { return RdDCombat.createUsingTarget(attacker) } - + /* -------------------------------------------- */ static _sendRollMessage(sender, recipient, defenderTokenId, topic, message, rollData) { let chatMessage = { content: message, @@ -85,6 +85,13 @@ export class RdDCombat { } } + /* -------------------------------------------- */ + static _callJetDeVie( event ) { + let actorId = event.currentTarget.attributes['data-actorId'].value; + let actor = game.actors.get(actorId); + actor.jetVie(); + } + /* -------------------------------------------- */ static registerChatCallbacks(html) { for (let button of ['#parer-button', '#esquiver-button', '#particuliere-attaque', '#encaisser-button']) { @@ -93,6 +100,11 @@ export class RdDCombat { RdDCombat.createForEvent(event).onEvent(button, event); }); } + html.on("click", '#chat-jet-vie', event => { + event.preventDefault(); + RdDCombat._callJetDeVie(event); + } ); + } /* -------------------------------------------- */ @@ -668,4 +680,35 @@ export class RdDCombat { return rolled.isSuccess; } + /* -------------------------------------------- */ + static async displayActorCombatStatus( actor ) { + let rollMode = game.settings.get("core", "rollMode"); + let rollData = { + alias: actor.name, + etatGeneral: actor.getEtatGeneral(), + isSonne: actor.getSonne(), + blessuresStatus: actor.computeResumeBlessure(), + SConst: actor.getSConst(), + actorId: actor.data._id, + isGrave: false, + isCritique: false + } + if ( actor.countBlessuresByName("critiques") > 0 ) { // Pour éviter le cumul grave + critique + rollData.isCritique = true; + } else if ( actor.countBlessuresByName("graves") > 0) { + rollData.isGrave = true; + } + let content = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-summary.html`, rollData); + ChatUtility.createChatMessage({ content: content }, rollMode, actor.name); + } + + /* -------------------------------------------- */ + static updateCombatRound( combat, data) { + if (combat.data.round != 0 && combat.turns && combat.data.active) { + let turn = combat.turns.find(t => t.tokenId == combat.current.tokenId); + this.displayActorCombatStatus( turn.actor ); + // TODO Playaudio ?? + } + } + } \ No newline at end of file diff --git a/module/rdd-main.js b/module/rdd-main.js index 8ef650e9..2cf83ed1 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -20,6 +20,7 @@ import { RdDCalendrier } from "./rdd-calendrier.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js"; import { RdDTokenHud } from "./rdd-token-hud.js"; import { RdDCommands } from "./rdd-commands.js"; +import { RdDCombat } from "./rdd-combat.js"; /* -------------------------------------------- */ /* Foundry VTT Initialization */ @@ -257,20 +258,9 @@ Hooks.once("ready", function() { // Integration du TokenHUD Hooks.on('renderTokenHUD', (app, html, data) => { RdDTokenHud.addTokenHudExtensions(app, html, data._id) }); + Hooks.on("updateCombat", (combat, data) => { RdDCombat.updateCombatRound(combat, data) } ); }); -/* -------------------------------------------- */ -/* Abandonné pour l'instant -Hooks.on("preCreateToken", (scene, tokenData, options) => { - let actor = game.actors.get( tokenData.actorId ) - if (actor) { - let tokenSize = actor.data.data.carac.taille.value / 10; - tokenData.width = tokenSize; - tokenData.height = tokenSize; - } - console.log("PRECREATE:", scene, tokenData, options); -});*/ - /* -------------------------------------------- */ /* Foundry VTT Initialization */ /* -------------------------------------------- */ diff --git a/module/rdd-resolution-table.js b/module/rdd-resolution-table.js index ef4518a8..7789a8c4 100644 --- a/module/rdd-resolution-table.js +++ b/module/rdd-resolution-table.js @@ -92,6 +92,7 @@ export class RdDResolutionTable { return message; } + /* -------------------------------------------- */ static async buildRollDataHtml(rollData, template = 'chat-resultat-general.html') { rollData.ajustements = RdDResolutionTable._buildAjustements(rollData); rollData.show = rollData.show || {}; @@ -99,6 +100,7 @@ export class RdDResolutionTable { return await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/${template}`, rollData); } + /* -------------------------------------------- */ static async displayRollData(rollData, userName, template = 'chat-resultat-general.html') { ChatUtility.chatWithRollMode( diff --git a/module/rdd-utility.js b/module/rdd-utility.js index ef24885e..83cb2347 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -207,6 +207,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/chat-resultat-general.html', 'systems/foundryvtt-reve-de-dragon/templates/chat-resultat-tache.html', 'systems/foundryvtt-reve-de-dragon/templates/chat-resultat-sort.html', + 'systems/foundryvtt-reve-de-dragon/templates/chat-actor-turn-summary.html', ]; @@ -908,7 +909,7 @@ export class RdDUtility { let actorId = event.currentTarget.attributes['data-actor-id'].value; let actor = game.actors.get( actorId ); actor.tmrApp.lancerSortEnReserve(coord, sortId); - }); + }); // Gestion du bouton payer html.on("click", '#payer-button', event => { let sumdenier = event.currentTarget.attributes['data-somme-denier'].value; @@ -917,7 +918,6 @@ export class RdDUtility { if ( jsondata ) { objData = JSON.parse(jsondata.value) } - console.log("Demande payer : ", objData); if (game.user.character ) { game.user.character.payerDenier(sumdenier, objData); } else { @@ -980,5 +980,4 @@ export class RdDUtility { return chatData; } - } diff --git a/templates/chat-actor-turn-summary.html b/templates/chat-actor-turn-summary.html new file mode 100644 index 00000000..c87f041e --- /dev/null +++ b/templates/chat-actor-turn-summary.html @@ -0,0 +1,9 @@ +

C'est au tour de {{alias}} !

+
{{blessuresStatus}}
+
Son état général est de : {{etatGeneral}} {{#if isSonne}} et est sonné{{/if}}
+{{#if isGrave}} +
{{alias}} souffre de Blessure(s) Grave(s) : n'oubliez pas de faire un Je de Vie toutes les SC ({{SConst}}) minutes.
+{{/if}} +{{#if isCritique}} +
{{alias}} souffre d'une Blessure Critique : faites un Jet de Vie.
+{{/if}} \ No newline at end of file