From ae3ac0a00fb6d65dfc8f6e6a4d15f3f5259d770b Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 20 Dec 2020 02:07:27 +0100 Subject: [PATCH] =?UTF-8?q?Possiblilit=C3=A9=20d'afficher/masquer=20les=20?= =?UTF-8?q?menus=20HUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Afin de voir les "activve effects", ou autres sous menus du HUD --- module/rdd-token-hud.js | 98 +++++++++++++++++--------------- module/rdd-utility.js | 5 +- styles/simple.css | 16 +++--- templates/hud-actor-attaque.html | 13 +++++ templates/hud-actor-init.html | 11 ++++ 5 files changed, 87 insertions(+), 56 deletions(-) create mode 100644 templates/hud-actor-attaque.html create mode 100644 templates/hud-actor-init.html diff --git a/module/rdd-token-hud.js b/module/rdd-token-hud.js index 12aefdc4..d0966b44 100644 --- a/module/rdd-token-hud.js +++ b/module/rdd-token-hud.js @@ -1,62 +1,66 @@ /* -------------------------------------------- */ +import { HtmlUtility } from "./html-utility.js"; import { RdDUtility } from "./rdd-utility.js"; /* -------------------------------------------- */ export class RdDTokenHud { - - /* -------------------------------------------- */ - static addTokenHudExtensions( app, html, data ) { - let token = canvas.tokens.get(data._id); - - // Affichage seulement si le token est un combat - if ( token.inCombat) { - this.addInitiativeTokenTip(html, token); - } - } + /* -------------------------------------------- */ - static async addInitiativeTokenTip(html, token ) { - // Helper actor and sanity check - let actor = token.actor; - if (actor === undefined) return; - - // Get combatant stuff - let combatant = game.combat.data.combatants.find(c => c.tokenId == token.data._id ); - if ( combatant ) { - let armesList = RdDUtility.buildArmeList( combatant ); - // Create space for Hud Extensions next to combat icon - let htmlInit = '
'; - let htmlCombat = '
'; - console.log("Token !!!", combatant, armesList); - for( let armeIndex=0; armeIndex'; - htmlInit += '
'; - if ( !arme.data.initOnly) { - htmlCombat += '
'; - htmlCombat += '
'; - } - } - htmlInit += "
"; - htmlCombat += ""; - let hudInitiative = $(htmlInit); - html.find('.control-icon.combat').after(hudInitiative); // Add Initiative and Agility token tip - let hudCombat = $(htmlCombat); - html.find('.control-icon.combat').after(hudCombat); // Add Initiative and Agility token tip + static addTokenHudExtensions(app, html, data) { + let token = canvas.tokens.get(data._id); + let actor = token.actor; + let combatant = game.combat.data.combatants.find(c => c.tokenId == token.data._id); - // Add interactions for Initiative - hudInitiative.find('label').click(async (event) => { + // Affichage seulement si le token est un combat et a un actor + if (actor === undefined) return; + if (!token.inCombat) return; + if (!combatant) return; + + const data = { combatant: combatant, armes: RdDTokenHud.buildListeActionsCombat(combatant) }; + + // initiative + await RdDTokenHud._configureSubMenu(html.find('.control-icon.combat'), 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html', data, + (event) => { let armeIndex = event.currentTarget.attributes['data-arme-id'].value; - let combatantId = event.currentTarget.attributes['data-combatant-id'].value; - let arme = armesList[armeIndex]; - RdDUtility.rollInitiativeCompetence( combatantId, arme ); + let combatantId = event.currentTarget.attributes['data-combatant-id'].value; + let arme = listeArmes[armeIndex]; + RdDUtility.rollInitiativeCompetence(combatantId, arme); }); - // Add interactions for Combat - hudCombat.find('label').click(async (event) => { + + // combat + await RdDTokenHud._configureSubMenu(html.find('.control-icon.target'), 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html', data, + (event) => { let armeIndex = event.currentTarget.attributes['data-arme-id'].value; let arme = armesList[armeIndex]; - actor.rollArme( arme.data.competence, arme.name); + actor.rollArme(arme.data.competence, arme.name); }); - } } + + static buildListeActionsCombat(combatant) { + let armesList = RdDUtility.buildArmeList(combatant); + for (let armeIndex = 0; armeIndex < armesList.length; armeIndex++) { + armesList[armeIndex] = duplicate(armesList[armeIndex]); + armesList[armeIndex].index = armeIndex; + } + return armesList; + } + + static async _configureSubMenu(insertionPoint, template, data, onMenuItem) { + const hud = $(await renderTemplate(template, data)); + const imgHud = hud.find('img.rdd-hud-togglebutton'); + const list = hud.find('div.rdd-hud-list'); + + HtmlUtility._showControlWhen(list, hud.hasClass('active')); + + imgHud.click(event => { + hud.toggleClass('active'); + HtmlUtility._showControlWhen(list, hud.hasClass('active')); + }); + + list.find('.rdd-hud-menu').click(onMenuItem); + + insertionPoint.after(hud); + } + } \ No newline at end of file diff --git a/module/rdd-utility.js b/module/rdd-utility.js index 18a1e430..df1b9126 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -187,7 +187,10 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/heures-select-option.html', // Conteneur/item in Actor sheet 'systems/foundryvtt-reve-de-dragon/templates/actor-inventaire-conteneur.html', - 'systems/foundryvtt-reve-de-dragon/templates/editor-notes-mj.html' + 'systems/foundryvtt-reve-de-dragon/templates/editor-notes-mj.html', + // HUD + 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html', + 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-attaque.html' ]; return loadTemplates(templatePaths); diff --git a/styles/simple.css b/styles/simple.css index 670212f2..f6789956 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -667,6 +667,13 @@ ul, li { font-family: CaslonPro; font-weight: 600; } +.tokenhudext.left { + justify-content: flex-start; + flex-direction: column; + position: absolute; + top: 2.75rem; + right: 4rem; +} .tokenhudext.right { justify-content: flex-start; flex-direction: column; @@ -674,13 +681,6 @@ ul, li { top: 2.75rem; right: -6rem; } -.tokenhudext.rightright { - justify-content: flex-start; - flex-direction: column; - position: absolute; - top: 2.75rem; - right: -13rem; -} .control-icon.tokenhudicon { width: fit-content; height: fit-content; @@ -693,7 +693,7 @@ ul, li { .control-icon.tokenhudicon.right { margin-left: 8px; } -.hud-text-small { +.rdd-hud-menu { font-size: 0.75rem; } /* ======================================== */ diff --git a/templates/hud-actor-attaque.html b/templates/hud-actor-attaque.html new file mode 100644 index 00000000..ca06f62e --- /dev/null +++ b/templates/hud-actor-attaque.html @@ -0,0 +1,13 @@ +
+ +
+ {{#each armes as |arme key|}} + {{#unless arme.data.initOnly}} +
+ +
+ {{/unless}} + {{/each}} +
+
\ No newline at end of file diff --git a/templates/hud-actor-init.html b/templates/hud-actor-init.html new file mode 100644 index 00000000..5b021581 --- /dev/null +++ b/templates/hud-actor-init.html @@ -0,0 +1,11 @@ +
+ +
+ {{#each armes as |arme key|}} +
+ +
+ {{/each}} +
+