diff --git a/system/lang/en-en.json b/system/lang/en-en.json index 4c99421..e9e83fd 100644 --- a/system/lang/en-en.json +++ b/system/lang/en-en.json @@ -5,6 +5,7 @@ }, "SETTINGS": { "None": "No option", + "ReverseFatigueBar": "Reverse token fatigue bar", "RollNKeep": { "DeleteOldMessage": "RnK Delete previous chat message", "DeleteOldMessageHint": "Choose to keep or delete the previous message for a RnK series" diff --git a/system/lang/es-es.json b/system/lang/es-es.json index 22f92bc..4bc56ee 100644 --- a/system/lang/es-es.json +++ b/system/lang/es-es.json @@ -5,6 +5,8 @@ }, "SETTINGS": { "None": "Sin opción", + + "ReverseFatigueBar": "Invertir la barra de fatiga de los token", "RollNKeep": { "DeleteOldMessage": "RnK Delete previous chat message", "DeleteOldMessageHint": "Choose to keep or delete the previous message for a RnK series" diff --git a/system/lang/fr-fr.json b/system/lang/fr-fr.json index 45cf9b1..2e1c5bb 100644 --- a/system/lang/fr-fr.json +++ b/system/lang/fr-fr.json @@ -5,6 +5,7 @@ }, "SETTINGS": { "None": "Aucune option", + "ReverseFatigueBar": "Inverser la barre de fatigue des token", "RollNKeep": { "DeleteOldMessage": "RnK Delete previous chat message", "DeleteOldMessageHint": "Choose to keep or delete the previous message for a RnK series" diff --git a/system/scripts/main-l5r5e.js b/system/scripts/main-l5r5e.js index 55559bd..fe53d0f 100644 --- a/system/scripts/main-l5r5e.js +++ b/system/scripts/main-l5r5e.js @@ -113,6 +113,34 @@ Hooks.once("init", async () => { // Journal Items.unregisterSheet("core", JournalSheet); Items.registerSheet("l5r5e", BaseJournalSheetL5r5e, { makeDefault: true }); + + // Override the default Token _drawBar function to allow fatigue bar reversing. + Token.prototype._drawBar = function (number, bar, data) { + let val = Number(data.value); + const reverseFatigue = game.settings.get("l5r5e", "token.reversefatiguebar"); + + // Bar value reversing. + if (data.attribute === "fatigue" && reverseFatigue) { + val = Number(data.max - data.value); + } + + const pct = Math.clamped(val, 0, data.max) / data.max; + let h = Math.max(canvas.dimensions.size / 12, 8); + if (this.data.height >= 2) h *= 1.6; // Enlarge the bar for large tokens + // Draw the bar + let color = number === 0 ? [1 - pct / 2, pct, 0] : [0.5 * pct, 0.7 * pct, 0.5 + pct / 2]; + bar + .clear() + .beginFill(0x000000, 0.5) + .lineStyle(2, 0x000000, 0.9) + .drawRoundedRect(0, 0, this.w, h, 3) + .beginFill(PIXI.utils.rgb2hex(color), 0.8) + .lineStyle(1, 0x000000, 0.8) + .drawRoundedRect(1, 1, pct * (this.w - 2), h - 2, 2); + // Set position + let posY = number === 0 ? this.h - h : 0; + bar.position.set(0, posY); + }; }); /* ------------------------------------ */ diff --git a/system/scripts/settings.js b/system/scripts/settings.js index c974cc3..3f6cee2 100644 --- a/system/scripts/settings.js +++ b/system/scripts/settings.js @@ -70,4 +70,15 @@ export const RegisterSettings = function () { type: String, default: "null", }); + + /* ------------------------------------ */ + /* Token bars */ + /* ------------------------------------ */ + game.settings.register("l5r5e", "token.reversefatiguebar", { + name: game.i18n.localize("SETTINGS.ReverseFatigueBar"), + scope: "world", + config: true, + type: Boolean, + default: false, + }); };