diff --git a/module.json b/module.json index 3ab37c3..99f4d35 100644 --- a/module.json +++ b/module.json @@ -8,9 +8,9 @@ "url": "https://git.evatt.ingenious.com.au/neillc" } ], - "url": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps", + "url": "This is auto replaced", "flags": {}, - "version": "0.0.100", + "version": "0.0.97", "compatibility": { "minimum": "11", "verified": "11.351" @@ -63,9 +63,9 @@ } }, "socket": false, - "readme": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/0.0.100/readme.md", - "manifest": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/0.0.100/module.json", - "download": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/0.0.100/fvtt-token-action-hud-gurps.zip", + "readme": "http://172.23.0.17:8000/module.json", + "manifest": "http://172.23.0.17:8000/module.json", + "download": "http://172.23.0.17:8000/fvtt-token-action-hud-gurps.zip", "protected": false, "coreTranslation": false, "library": false diff --git a/readme.md b/readme.md index b62f0ef..2995a9c 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,14 @@ -# Token Action HUD for GURPS +![Downloads](https://img.shields.io/github/downloads/Larkinabout/fvtt-token-action-hud-template/latest/module.zip?color=2b82fc&label=DOWNLOADS&style=for-the-badge) [![Forge Installs](https://img.shields.io/badge/dynamic/json?label=Forge%20Installs&query=package.installs&suffix=%25&url=https%3A%2F%2Fforge-vtt.com%2Fapi%2Fbazaar%2Fpackage%2Ftoken-action-hud-template&colorB=448d34&style=for-the-badge)](https://forge-vtt.com/bazaar#package=token-action-hud-template) -Token Action HUD is a repositionable HUD of actions for a selected token for the GURPS game system. +# Token Action HUD Template -This should be considered beta software at the moment. I think it's safe to use, but be careful! +Token Action HUD is a repositionable HUD of actions for a selected token. + +![Token Action HUD](.github/readme/token-action-hud.gif) # Features - Make rolls directly from the HUD instead of opening your character sheet. +- Use items from the HUD or right-click an item to open its sheet. - Move the HUD and choose to expand the menus up or down. - Unlock the HUD to customise layout and groups per user, and actions per actor. - Add your own macros, journal entries and roll table compendiums. @@ -15,18 +18,18 @@ This should be considered beta software at the moment. I think it's safe to use, ## Method 1 1. On Foundry VTT's **Configuration and Setup** screen, go to **Add-on Modules** 2. Click **Install Module** -3. Search for **Token Action HUD for GURPS** +3. Search for **Token Action HUD Pathfinder 2** 4. Click **Install** next to the module listing ## Method 2 1. On Foundry VTT's **Configuration and Setup** screen, go to **Add-on Modules** 2. Click **Install Module** -3. In the Manifest URL field, paste: `https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/latest/module.json` +3. In the Manifest URL field, paste: `https://github.com/Larkinabout/fvtt-token-action-hud-template/releases/latest/download/module.json` 4. Click **Install** next to the pasted Manifest URL ## Required Modules -**IMPORTANT** - Token Action HUD for GURPS requires the [Token Action HUD Core](https://foundryvtt.com/packages/token-action-hud-core) module to be installed. +**IMPORTANT** - Token Action HUD Template requires the [Token Action HUD Core](https://foundryvtt.com/packages/token-action-hud-core) module to be installed. ## Recommended Modules Token Action HUD uses the [Color Picker](https://foundryvtt.com/packages/color-picker) library module for its color picker settings. @@ -35,7 +38,7 @@ Token Action HUD uses the [Color Picker](https://foundryvtt.com/packages/color-p For a guide on using Token Action HUD, go to: [How to Use Token Action HUD](https://github.com/Larkinabout/fvtt-token-action-hud-core/wiki/How-to-Use-Token-Action-HUD) -For questions, feature requests or bug reports, please open an issue [here](https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/issues). +For questions, feature requests or bug reports, please open an issue [here](https://github.com/Larkinabout/fvtt-token-action-hud-core/issues). Pull requests are welcome. Please include a reason for the request or create an issue before starting one. @@ -45,4 +48,4 @@ Thank you to the Community Helpers on Foundry's Discord who provide tireless sup # License -This Foundry VTT module is licensed under a [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/) and this work is licensed under [Foundry Virtual Tabletop EULA - Limited License Agreement for module development](https://foundryvtt.com/article/license/). +This Foundry VTT module is licensed under a [Creative Commons Attribution 4.0 International License](https://creativecommons.org/licenses/by/4.0/) and this work is licensed under [Foundry Virtual Tabletop EULA - Limited License Agreement for module development](https://foundryvtt.com/article/license/). \ No newline at end of file diff --git a/scripts/action-handler.js b/scripts/action-handler.js index 5bf7861..afc5d70 100644 --- a/scripts/action-handler.js +++ b/scripts/action-handler.js @@ -32,6 +32,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } if (this.actorType === 'character') { + //debugger; this.#buildCharacterActions() } else if (!this.actor) { this.#buildMultipleTokenActions() @@ -43,6 +44,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { * @private */ #buildCharacterActions () { + // debugger; this._get_attributes({id: "attributes", type:"system"}) this._get_skills({id: "skills", type:"system"}) this._get_spells({id: "spells", type:"system"}) @@ -79,6 +81,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } _get_melee_attacks(parent) { + // debugger; const macroType = "melee"; let actions = []; @@ -109,6 +112,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } _get_ranged_attacks(parent) { + // debugger; const macroType = "ranged"; let actions = []; @@ -139,146 +143,57 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } _get_skills(parent) { + // debugger; const macroType = "skills"; let actions = []; - // let skills = Object.entries(this.actor.system.skills) - // skills.forEach((a) => { - // const key = a[1].name; - // const value = a[1].level - // // img - - // let actionId = key; - // let otf = 'Sk:"' + key + '"'; // This is going to end badly if the delimiter is set to ":" - - - // actions.push({ - // id: actionId, - // name: coreModule.api.Utils.i18n(key) + " - test", - // description: coreModule.api.Utils.i18n('GURPS.Skills'), - // encodedValue: [macroType, otf].join(this.delimiter), - // }) - - - // }); let skills = Object.entries(this.actor.system.skills) - // let map = this._get_contents(skills) - let map = this._get_contents(skills, macroType) - let names = Array.from(map.keys()).sort() - names.forEach((a)=> { - actions.push({ - id: a, - name: map.get(a).name, - description: map.get(a).description, - encodedValue: map.get(a).encodedValue - }) - }) + skills.forEach((a) => { + const key = a[1].name; + const value = a[1].level + // img + let actionId = key; + let otf = 'Sk:"' + key + '"'; // This is going to end badly if the delimiter is set to ":" + + + actions.push({ + id: actionId, + name: coreModule.api.Utils.i18n(key), + description: coreModule.api.Utils.i18n('GURPS.Skills'), + encodedValue: [macroType, otf].join(this.delimiter), + }) + + + }); this.addActions(actions, parent) } - _get_contents(spells, macroType, result= new Map()) { - console.debug(spells); - console.debug(macroType); - console.debug(result) - - if (spells instanceof Array) { - for (const spell in spells) { - let _contains = spells[spell][1].contains; - - if (Reflect.has(_contains,"00000")) { - for( const i in _contains) { - result = this._get_contents(_contains[i], macroType, result) - } - } - else { - let name = spells[spell][1].name; - let level = spells[spell][1].level; - let otf_type = null; - - if (macroType === "skills") { - otf_type = 'Sk' - } - else { - otf_type = 'Sp' - } - - let otf = otf_type + ':"' + name + '"'; - - if (level) { - result.set( - name, - { - id: name, - name: coreModule.api.Utils.i18n(name), - description: coreModule.api.Utils.i18n('GURPS.Spells'), - encodedValue: [macroType, otf].join(this.delimiter), - } - ) - } - } - } - } - else { - if (spells.uuid) { - let _contains = spells.contains; - if (Reflect.has(_contains,"00000")) { - for( const i in _contains) { - result = this._get_contents(_contains[i], macroType, result) - } - } - else { - let spell = spells; - - let name = spell.name; - let level = spell.level; - let otf_type = null; - - if (macroType === "skills") { - otf_type = 'Sk' - } - else { - otf_type = 'Sp' - } - - let otf = otf_type + ':"' + name + '"'; - - - if (level) { - result.set( - name, - { - id: name, - name: coreModule.api.Utils.i18n(name), - description: coreModule.api.Utils.i18n('GURPS.Spells'), - encodedValue: [macroType, otf].join(this.delimiter), - } - ) - } - - } - } - } - return result; - } - - _get_spells(parent) { + // debugger; const macroType = "spells"; let actions = []; - let spells = Object.entries(this.actor.system.spells) - let spell_map = this._get_contents(spells, macroType) - let spell_names = Array.from(spell_map.keys()).sort() - spell_names.forEach((a)=> { - actions.push({ - id: a, - name: spell_map.get(a).name, - description: spell_map.get(a).description, - encodedValue: spell_map.get(a).encodedValue - }) - }) + let spells = Object.entries(this.actor.system.spells) + spells.forEach((a) => { + const key = a[1].name; + const value = a[1].level + // img + + let actionId = key; + let otf = 'Sp:"' + key + '"'; // This is going to end badly if the delimiter is set to ":" + + + actions.push({ + id: actionId, + name: coreModule.api.Utils.i18n(key), + description: coreModule.api.Utils.i18n('GURPS.Spells'), + encodedValue: [macroType, otf].join(this.delimiter), + }) + + + }); this.addActions(actions, parent) } @@ -341,4 +256,3 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } } }) - diff --git a/scripts/defaults.js b/scripts/defaults.js index bf3afa4..c8a92bd 100644 --- a/scripts/defaults.js +++ b/scripts/defaults.js @@ -12,6 +12,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { group.listName = `Group: ${coreModule.api.Utils.i18n(group.listName ?? group.name)}` }) const groupsArray = Object.values(groups) + // debugger; DEFAULTS = { layout: [ { diff --git a/scripts/roll-handler.js b/scripts/roll-handler.js index 2bf0689..23799af 100644 --- a/scripts/roll-handler.js +++ b/scripts/roll-handler.js @@ -130,6 +130,7 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { if ( actionId == "WILL" ) actionId = "Will"; if ( actionId == "PER" ) actionId = "Per"; + // debugger; let formula = '3d6'; let targetmods = null; let prefix = "Rolls vs" // should be i18n of 'GURPS.rollVs' @@ -147,6 +148,8 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { async #handleMeleeAction(actor, actionId) { /* Melee attacks are done using the otf method. Grab the otf and pass it to the function. */ let GURPS = globalThis.GURPS; + + // debugger; let otf = actionId; GURPS.executeOTF(otf, actor=actor); } @@ -154,22 +157,39 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { async #handleRangedAction(actor, actionId) { /* Melee attacks are done using the otf method. Grab the otf and pass it to the function. */ let GURPS = globalThis.GURPS; + + // debugger; let otf = actionId; GURPS.executeOTF(otf, actor=actor); + + + // doRoll({ actor, formula, targetmods, prefix, thing, chatthing, origtarget: target, optionalArgs: opt }) } async #handleSkillAction(actor, actionId) { /* Skills are done using the otf method. Grab the otf and pass it to the function. */ let GURPS = globalThis.GURPS; + // actor, formula, targetmods, prefix = '', thing = '', chatthing = '', origtarget = -1, optionalArgs = {}, + + // executeOTF(inputstring, priv = false, event = null, actor = null) { + + // debugger; let otf = actionId; GURPS.executeOTF(otf, actor=actor); + + + // doRoll({ actor, formula, targetmods, prefix, thing, chatthing, origtarget: target, optionalArgs: opt }) } async #handleSpellAction(actor, actionId) { /* Spells are done using the otf method. Grab the otf and pass it to the function. */ let GURPS = globalThis.GURPS; + + // debugger; let otf = actionId; GURPS.executeOTF(otf, actor=actor); + + } } })