diff --git a/module.json b/module.json index a547662..3ab37c3 100644 --- a/module.json +++ b/module.json @@ -10,7 +10,7 @@ ], "url": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps", "flags": {}, - "version": "0.0.99", + "version": "0.0.100", "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.99/readme.md", - "manifest": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/0.0.99/module.json", - "download": "https://git.evatt.ingenious.com.au/neillc/token-action-hud-gurps/releases/download/0.0.99/fvtt-token-action-hud-gurps.zip", + "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", "protected": false, "coreTranslation": false, "library": false diff --git a/scripts/action-handler.js b/scripts/action-handler.js index afc5d70..5bf7861 100644 --- a/scripts/action-handler.js +++ b/scripts/action-handler.js @@ -32,7 +32,6 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } if (this.actorType === 'character') { - //debugger; this.#buildCharacterActions() } else if (!this.actor) { this.#buildMultipleTokenActions() @@ -44,7 +43,6 @@ 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"}) @@ -81,7 +79,6 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } _get_melee_attacks(parent) { - // debugger; const macroType = "melee"; let actions = []; @@ -112,7 +109,6 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } _get_ranged_attacks(parent) { - // debugger; const macroType = "ranged"; let actions = []; @@ -143,57 +139,146 @@ 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) - 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 ":" - - + // 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: actionId, - name: coreModule.api.Utils.i18n(key), - description: coreModule.api.Utils.i18n('GURPS.Skills'), - encodedValue: [macroType, otf].join(this.delimiter), + id: a, + name: map.get(a).name, + description: map.get(a).description, + encodedValue: map.get(a).encodedValue }) + }) - - }); 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) - 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 ":" - - + let spell_map = this._get_contents(spells, macroType) + let spell_names = Array.from(spell_map.keys()).sort() + spell_names.forEach((a)=> { actions.push({ - id: actionId, - name: coreModule.api.Utils.i18n(key), - description: coreModule.api.Utils.i18n('GURPS.Spells'), - encodedValue: [macroType, otf].join(this.delimiter), + id: a, + name: spell_map.get(a).name, + description: spell_map.get(a).description, + encodedValue: spell_map.get(a).encodedValue }) + }) - - }); this.addActions(actions, parent) } @@ -256,3 +341,4 @@ Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => { } } }) + diff --git a/scripts/defaults.js b/scripts/defaults.js index c8a92bd..bf3afa4 100644 --- a/scripts/defaults.js +++ b/scripts/defaults.js @@ -12,7 +12,6 @@ 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 23799af..2bf0689 100644 --- a/scripts/roll-handler.js +++ b/scripts/roll-handler.js @@ -130,7 +130,6 @@ 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' @@ -148,8 +147,6 @@ 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); } @@ -157,39 +154,22 @@ 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); - - } } })