From 7b743c9b17b7a4d593d3a55bfa1fbbe6278291bd Mon Sep 17 00:00:00 2001 From: WBHarry Date: Sun, 4 Aug 2024 22:13:22 +0200 Subject: [PATCH] V12 compatability. Added Grid Settings for combat --- combat-hp-display.js | 6 +-- lang/en.json | 5 ++- module.json | 7 ++-- module/DisplayBarHandler.js | 16 ++++--- module/GridSettingsMenu.js | 49 ++++++++++++++++++++++ scripts/setup.js | 23 ++++++++++ templates/gridMenu.hbs | 20 +++++++++ templates/partials/convertDisplayValue.hbs | 4 +- templates/partials/tokenDisplayValues.hbs | 2 +- 9 files changed, 113 insertions(+), 19 deletions(-) create mode 100644 module/GridSettingsMenu.js create mode 100644 templates/gridMenu.hbs diff --git a/combat-hp-display.js b/combat-hp-display.js index 28b54e0..fc5eadd 100644 --- a/combat-hp-display.js +++ b/combat-hp-display.js @@ -1,6 +1,6 @@ import { useTemplatesPath } from './scripts/combat-hp-display-helpers.js'; import { registerGameSettings, migrateDataStructures } from './scripts/setup.js'; -import { deleteCombatUpdate, deleteCombatantUpdate, startCombatUpdate, joinCombatUpdate } from './module/DisplayBarHandler.js'; +import { deleteCombatUpdate, startCombatUpdate, joinCombatUpdate } from './module/DisplayBarHandler.js'; Hooks.once('init', function() { registerGameSettings(); @@ -24,8 +24,4 @@ Hooks.on('updateCombat', async combat => { Hooks.on('deleteCombat', async combat => { await deleteCombatUpdate(combat); -}); - -Hooks.on('deleteCombatant', async combatant => { - await deleteCombatantUpdate(combatant); }); \ No newline at end of file diff --git a/lang/en.json b/lang/en.json index 04b4ba9..8756607 100644 --- a/lang/en.json +++ b/lang/en.json @@ -10,7 +10,7 @@ "to": "To", "convertAll": "Convert All Actors", "convertMap": "Convert All Actors On Map", - "disabledTooltip": "Select at least one token disposition" + "disabledTooltip": "Select at least one token disposition" }, "hpDisplaySettings": { "label": "", @@ -20,6 +20,9 @@ "friendlyTokens": "Friendly Token Settings", "neutralTokens": "Neutral Token Settings", "hostileTokens": "Hostile Token Settings" + }, + "gridSettings": { + "title": "Grid Settings" } } } \ No newline at end of file diff --git a/module.json b/module.json index 9310c93..1f0cb43 100644 --- a/module.json +++ b/module.json @@ -3,7 +3,7 @@ "name": "combat-hp-display", "title": "Combat HP Display", "description": "A module for automatically changing how displaybars such as HP are shown on tokens when entering and leaving combat.", - "version": "1.2.0", + "version": "1.3.0", "authors": [ { "name": "HarryBoy" @@ -11,10 +11,9 @@ ], "compatibility": { "minimum": 10, - "verified": "10.288", - "maximum": 10 + "verified": "12.330", + "maximum": 12 }, - "minimumCoreVersion": 10, "esmodules": [ "combat-hp-display.js" ], diff --git a/module/DisplayBarHandler.js b/module/DisplayBarHandler.js index 098417d..3799089 100644 --- a/module/DisplayBarHandler.js +++ b/module/DisplayBarHandler.js @@ -2,6 +2,11 @@ import { translateCustomDisplayModes, getDisplayMode } from '../scripts/combat-h export const startCombatUpdate = async (combat) => { if(game.user.isGM && combat.previous.round === 0 && combat.current.round === 1){ + const gridSettings = await game.settings.get('combat-hp-display', 'grid-display'); + if(gridSettings.enabled && game.combat.scene){ + await game.combat.scene.update({ 'grid.alpha': gridSettings.opacity }); + } + const combatants = Array.from(combat.combatants); await combatUpdate(combatants); } @@ -54,16 +59,15 @@ const diplayBarUpdate = async (combatant, inCombat) => { }; export const deleteCombatUpdate = async (combat) => { + const gridSettings = await game.settings.get('combat-hp-display', 'grid-display'); + if(gridSettings.enabled && combat.scene){ + await combat.scene.update({ 'grid.alpha': 0 }); + } + const combatants = Array.from(combat.combatants); await updateDisplayMode(combatants); } -export const deleteCombatantUpdate = async (combatant) => { - if(combatant.parent.started){ - await updateDisplayMode([combatant]); - } -} - const updateDisplayMode = async (combatants) => { for(var i = 0; i < combatants.length; i++) { const combatant = combatants[i]; diff --git a/module/GridSettingsMenu.js b/module/GridSettingsMenu.js new file mode 100644 index 0000000..7195ea3 --- /dev/null +++ b/module/GridSettingsMenu.js @@ -0,0 +1,49 @@ +import { useTemplatesPath } from '../scripts/combat-hp-display-helpers.js'; + +export default class GridSettingsMenu extends FormApplication { + constructor() { + super({}, {title: game.i18n.localize('combat-hp-display.gridSettings.title')}); + const settings = game.settings.get('combat-hp-display', 'grid-display'); + this.gridSettings = { + ...settings, + }; + } + + static get defaultOptions() { + const defaults = super.defaultOptions; + const overrides = { + height: 'auto', + width: 300, + id: 'resource-display-menu', + template: useTemplatesPath('gridMenu.hbs'), + closeOnSubmit: false, + submitOnChange: true, + classes: ["combat-hp-display", "grid-menu"], + }; + + const mergedOptions = foundry.utils.mergeObject(defaults, overrides); + + return mergedOptions; + } + + getData() { + return { + grid: this.gridSettings, + } + } + + async _updateObject(event, formData) { + this.gridSettings = foundry.utils.expandObject(formData).grid; + + this.render(); + } + + activateListeners(html) { + super.activateListeners(html); + + $(html).find('#save').click(event => { + game.settings.set('combat-hp-display', 'grid-display', this.gridSettings); + this.close(); + }); + } +} \ No newline at end of file diff --git a/scripts/setup.js b/scripts/setup.js index b887164..7f86ed2 100644 --- a/scripts/setup.js +++ b/scripts/setup.js @@ -1,5 +1,6 @@ import DisplayBarConvertionMenu from '../module/DisplayBarConvertionMenu.js'; import DisplayBarSettingsMenu from '../module/DisplayBarSettingsMenu.js'; +import GridSettingsMenu from '../module/GridSettingsMenu.js'; export const registerGameSettings = () => { game.settings.registerMenu("combat-hp-display", "hp-display-settings", { @@ -10,6 +11,16 @@ export const registerGameSettings = () => { type: DisplayBarSettingsMenu, restricted: true }); + + game.settings.registerMenu("combat-hp-display", "grid-settings", { + name: game.i18n.localize('combat-hp-display.hpDisplaySettings.label'), + label: game.i18n.localize('combat-hp-display.hpDisplaySettings.title'), + hint: "", + icon: "fa-solid fa-border-all", + type: GridSettingsMenu, + restricted: true + }); + if(!game.modules.get("barbrawl")?.active){ game.settings.registerMenu("combat-hp-display", "actor-converter", { name: game.i18n.localize('combat-hp-display.actorConverter.label'), @@ -33,6 +44,18 @@ export const registerGameSettings = () => { hostile: { value: 50, gmOnly: false }, }, }); + + game.settings.register("combat-hp-display", "grid-display", { + name: "Combat Grid Display", + hint: "Scene grid behavior used when in combat", + scope: "world", + config: false, + type: Object, + default: { + enabled: false, + opacity: 0.2, + }, + }); }; export const migrateDataStructures = async () => { diff --git a/templates/gridMenu.hbs b/templates/gridMenu.hbs new file mode 100644 index 0000000..548778d --- /dev/null +++ b/templates/gridMenu.hbs @@ -0,0 +1,20 @@ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/templates/partials/convertDisplayValue.hbs b/templates/partials/convertDisplayValue.hbs index 022731c..adf3418 100644 --- a/templates/partials/convertDisplayValue.hbs +++ b/templates/partials/convertDisplayValue.hbs @@ -7,10 +7,10 @@ diff --git a/templates/partials/tokenDisplayValues.hbs b/templates/partials/tokenDisplayValues.hbs index 643354d..30bf619 100644 --- a/templates/partials/tokenDisplayValues.hbs +++ b/templates/partials/tokenDisplayValues.hbs @@ -3,7 +3,7 @@ {{#if (eq this.type 'neutral')}}{{/if}} {{#if (eq this.type 'hostile')}}{{/if}} {{#if barbrawl}}{{/if}} \ No newline at end of file