From e8cc14f8467414b1a38e98d05d652476df25bb74 Mon Sep 17 00:00:00 2001 From: cadowtin Date: Mon, 7 Aug 2023 01:00:05 -0500 Subject: [PATCH] another possible change, deformatted code --- module.json | 1 - scripts/hooks.js | 25 ------ scripts/module.js | 217 +++++++++++++++++++++++++--------------------- 3 files changed, 119 insertions(+), 124 deletions(-) delete mode 100644 scripts/hooks.js diff --git a/module.json b/module.json index 1e19e1a..6d3d8c7 100644 --- a/module.json +++ b/module.json @@ -27,7 +27,6 @@ }, "scripts": [ "scripts/module.js", - "scripts/hooks.js" ], "languages": [ { diff --git a/scripts/hooks.js b/scripts/hooks.js deleted file mode 100644 index 1e9255e..0000000 --- a/scripts/hooks.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A single Damage Number in damage number list. - * @typedef {Object} DamageNumber - * @property {string} type - Type of damage - * @property {number} value - How much damage it was - */ -Hooks.on("init", async () => { - console.log("PF2e RPG Numbers is initiated"); if (!game.user.isGM) return; - game.RPGNumbers = new RPGNumbers(); -}) - -Hooks.on("ready", async () => { - if (!game.user.isGM) return; - console.log("PF2e RPG Numbers is ready"); - game.ui.notify("PF2e RPG Numbers is ready") - game.RPGNumbers = new RPGNumbers(); -}) - -Hooks.on("createChatMessage", async function (msg, status, id) { - console.log({ msg }) - if (msg?.flags?.pf2e?.context?.type !== 'damage-roll') return; - const dmg_list = game.RPGNumbers.extractDamageInfoCombined(msg.rolls); - const targets = game.RPGNumbers.getTargetList(msg); - game.RPGNumbers.generateDamageScroll(dmg_list, targets); -}) \ No newline at end of file diff --git a/scripts/module.js b/scripts/module.js index 5e288b7..625fc79 100644 --- a/scripts/module.js +++ b/scripts/module.js @@ -34,114 +34,135 @@ class RPGNumbers { strokeThickness: 5, } }; +} - extractTerm(term, flavor = '') { - if (term.class === "NumericTerm") { - result.push({ dmg: term.number, type: term.options.flavor ?? flavor }); - } else if (term.class === "Die") { - for (const dieResult of term.results) { - result.push({ dmg: dieResult.result, type: term.options.flavor ?? flavor }); - } - } else if (term.class === "Grouping") { - this.extractTerm(term.term, term?.options?.flavor ?? flavor); - } else if (term.class === "ArithmeticExpression") { - for (const operand of term?.operands) { - extractTerm(operand, flavor); - } - } else if (!term?.class) { - for (const t of term.rolls) { - for (const tt of term.terms) { - this.extractTerm(tt, tt?.options?.flavor ?? flavor); - } - } +function extractTerm(term, flavor = '') { + if (term.class === "NumericTerm") { + result.push({ dmg: term.number, type: term.options.flavor ?? flavor }); + } else if (term.class === "Die") { + for (const dieResult of term.results) { + result.push({ dmg: dieResult.result, type: term.options.flavor ?? flavor }); } - } - - /** - * Extracts the list of damage info from pf2e chat message, breaks down into each individual item - * @param {*} rolls - * @returns - */ - //TODO make this work - //TODO add options to toggle doubling amt of numbers on crit etc. or combining them - extractDamageInfo(rolls) { - const result = []; - console.log({ rolls }) - - for (const inp of rolls) { - for (const term of inp.terms) { - for (const roll of term.rolls) { - const dmg = { type: roll.type, value: roll.total }; - result.push(dmg); - //console.log("----dmg----"); - //console.log(dmg); - } - //console.log({inp, term}) - //this.extractTerm(term, inp?.options?.flavor ?? ''); + } else if (term.class === "Grouping") { + this.extractTerm(term.term, term?.options?.flavor ?? flavor); + } else if (term.class === "ArithmeticExpression") { + for (const operand of term?.operands) { + extractTerm(operand, flavor); + } + } else if (!term?.class) { + for (const t of term.rolls) { + for (const tt of term.terms) { + this.extractTerm(tt, tt?.options?.flavor ?? flavor); } } - - return result; } - - /** - * Extracts the list of damage info from pf2e chat message, only breaks it up between the overarching damage types - * @param {any} rolls Roll value from pf2e chat message - * @returns - */ - extractDamageInfoCombined(rolls) { - const result = []; - - for (const inp of rolls) { - for (const term of inp.terms) { - for (const roll of term.rolls) { - const dmg = { type: roll.type, value: roll.total }; - result.push(dmg); - } +} + +/** + * Extracts the list of damage info from pf2e chat message, breaks down into each individual item + * @param {*} rolls + * @returns + */ +//TODO make this work +//TODO add options to toggle doubling amt of numbers on crit etc. or combining them +function extractDamageInfo(rolls) { + const result = []; + console.log({ rolls }) + + for (const inp of rolls) { + for (const term of inp.terms) { + for (const roll of term.rolls) { + const dmg = { type: roll.type, value: roll.total }; + result.push(dmg); + //console.log("----dmg----"); + //console.log(dmg); } + //console.log({inp, term}) + //this.extractTerm(term, inp?.options?.flavor ?? ''); } - return result; } - - /** - * Generates damage scrolling text for a passed in list of damage values - * @param {{type: string, value: string}[]} dmg_list list of type and value - * @param {string[]} targets list of token ids - */ - //TODO settings on visuals (colors) - //TODO settings on size etc. - //TODO add scaling based on % health - //TODO add scaling based on size - generateDamageScroll(dmg_list, targets) { - for (const target_id of targets) { - const tok = game.canvas.tokens.get(target_id); - const size = tok.document.texture.scaleY * tok.document.width; - const topOffset = size / 4; - - const seq = new Sequence(); - for (const dmg of dmg_list.filter(d => d.value > 0)) { - style.fill = colors?.[dmg.type] ?? 'white'; - seq.scrollingText() - .atLocation(tok, { offset: { y: topOffset }, gridUnits: true }) - .text(`${dmg.value}`, style) - .jitter(1) - .anchor("TOP") - .waitUntilFinished(-1800) + + return result; +} + +/** + * Extracts the list of damage info from pf2e chat message, only breaks it up between the overarching damage types + * @param {any} rolls Roll value from pf2e chat message + * @returns + */ +function extractDamageInfoCombined(rolls) { + const result = []; + + for (const inp of rolls) { + for (const term of inp.terms) { + for (const roll of term.rolls) { + const dmg = { type: roll.type, value: roll.total }; + result.push(dmg); } - seq.play(); } } - - /** - * Get list of targets based on a passed in chat msg - * @param {any} msg Message data from create Chat Message - * @returns {string[]} A list of all the ids of the targets - */ - getTargetList(msg) { - if (msg.flags?.["pf2e-target-damage"]?.targets) { - return msg.flags.pf2e - target - damage.targets.map(t => t.id); - } else { - return [(await fromUuid(msg.flags.pf2e.target.token)).id]; + return result; +} + +/** + * Generates damage scrolling text for a passed in list of damage values + * @param {{type: string, value: string}[]} dmg_list list of type and value + * @param {string[]} targets list of token ids + */ +//TODO settings on visuals (colors) +//TODO settings on size etc. +//TODO add scaling based on % health +//TODO add scaling based on size +function generateDamageScroll(dmg_list, targets) { + for (const target_id of targets) { + const tok = game.canvas.tokens.get(target_id); + const size = tok.document.texture.scaleY * tok.document.width; + const topOffset = size / 4; + + const seq = new Sequence(); + const color = (new RPGNumbers).colors + for (const dmg of dmg_list.filter(d => d.value > 0)) { + style.fill = colors?.[dmg.type] ?? 'white'; + seq.scrollingText() + .atLocation(tok, { offset: { y: topOffset }, gridUnits: true }) + .text(`${dmg.value}`, style) + .jitter(1) + .anchor("TOP") + .waitUntilFinished(-1800) } + seq.play(); + } +} + +/** + * Get list of targets based on a passed in chat msg + * @param {any} msg Message data from create Chat Message + * @returns {string[]} A list of all the ids of the targets + */ +function getTargetList(msg) { + if (msg.flags?.["pf2e-target-damage"]?.targets) { + return msg.flags.pf2e - target - damage.targets.map(t => t.id); + } else { + return [(await fromUuid(msg.flags.pf2e.target.token)).id]; } -} \ No newline at end of file +} + +Hooks.on("init", async () => { + console.error("PF2e RPG Numbers is initiated"); if (!game.user.isGM) return; + game.RPGNumbers = new RPGNumbers(); +}) + +Hooks.on("ready", async () => { + if (!game.user.isGM) return; + console.error("PF2e RPG Numbers is ready"); + game.ui.notify("PF2e RPG Numbers is ready") + game.RPGNumbers = new RPGNumbers(); +}) + +Hooks.on("createChatMessage", async function (msg, status, id) { + console.log({ msg }) + if (msg?.flags?.pf2e?.context?.type !== 'damage-roll') return; + const dmg_list = extractDamageInfoCombined(msg.rolls); + const targets = getTargetList(msg); + generateDamageScroll(dmg_list, targets); +}) \ No newline at end of file