';
- 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 @@
+