From b7a84d22621a17f3f1b01ec0203b54a201417b74 Mon Sep 17 00:00:00 2001 From: Russell Larkin Date: Tue, 19 Jul 2022 21:06:13 +0100 Subject: [PATCH] Persist Challenge Trackers - Persist challenge trackers across sessions using user flags. - Add forms to manage challenge trackers. - Add button on player list to open forms. --- README.md | 24 +- images/challenge-tracker-list.png | Bin 0 -> 121210 bytes .../challenge-tracker-player-list-button.png | Bin 0 -> 1044 bytes images/challenge-tracker-player-list.png | Bin 0 -> 22072 bytes languages/en.json | 72 ++-- module.json | 4 +- scripts/challenge-tracker.js | 44 +- scripts/flags.js | 70 +++ scripts/form.js | 177 ++++++++ scripts/main.js | 405 ++++++++++++------ scripts/settings.js | 34 +- styles/challenge-tracker.css | 90 +++- templates/challenge-tracker-edit-form.hbs | 66 +++ templates/challenge-tracker-form.hbs | 32 ++ 14 files changed, 819 insertions(+), 199 deletions(-) create mode 100644 images/challenge-tracker-list.png create mode 100644 images/challenge-tracker-player-list-button.png create mode 100644 images/challenge-tracker-player-list.png create mode 100644 scripts/flags.js create mode 100644 scripts/form.js create mode 100644 templates/challenge-tracker-edit-form.hbs create mode 100644 templates/challenge-tracker-form.hbs diff --git a/README.md b/README.md index 412b053..268ab87 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Challenge Tracker -An interactive aid to track successes and failures in challenges. +An interactive aid to track successes and failures in challenges à la D&D 4e-inspired skill challenges and Blades in the Dark progress clocks. ![challenge-tracker](./images/challenge-tracker.png) ![challenge-tracker](./images/challenge-tracker-progress-clock.png) @@ -10,6 +10,19 @@ An interactive aid to track successes and failures in challenges. - **Player View:** Click **Show** on the header to show the tracker to other players and click **Hide** to hide it from other players. ## How to Use +### Using the Player List +![challenge-tracker-macro](./images/challenge-tracker-player-list.png) +1. Click the button ![challenge-tracker-macro](./images/challenge-tracker-player-list-button.png) in the player list. + + ![challenge-tracker-macro](./images/challenge-tracker-list.png) + +2. Click 'Create New' to create a new Challenge Tracker. +3. Fill in the options and click 'Save and Close'. + - Click 'Open' to open a Challenge Tracker. + - Click 'Edit' to edit an existing Challenge Tracker. + - Click 'Delete' to delete an existing Challenge Tracker. + +### Using Macros 1. Create a macro with a Type of 'script' and enter: `ChallengeTracker.open(outer, inner)` where `outer` is the number of segments required on the outer ring (successes) and `inner` is the number of segments required on the inner circle (failures). 2. Execute the macro to open the Challenge Tracker. @@ -17,15 +30,16 @@ An interactive aid to track successes and failures in challenges. ## Advanced Options More options can be set using an optional array parameter: `ChallengeTracker.open(successes failures, {options})` where options is a comma-separated list of any of the following parameters in the format `option: value`: -- **show:** Set to `true` to show the Challenge Tracker to your players. Default is `false`. Example: `show: true` -- **outerCurrent:** Set the number of completed segments on the outer ring (successes). Default is `0`. Example: `outerCurrent: 3` -- **innerCurrent:** Set the number of completed segments on the inner circle (failures). Default is `0`. Example: `innerCurrent: 3` +- **outerCurrent:** Set the number of completed segments on the outer ring (successes). Default is `0`. Example: `outerCurrent: 3 +- **innerCurrent:** Set the number of completed segments on the inner circle (failures). Default is `0`. Example: `innerCurrent: - **outerColor:** Set the hex color of the outer ring (successes). The 'Outer Color' module setting will be ignored. Example: `outerColor: '#0000FF'` - **innerColor:** Set the hex color of the inner circle (failures). The 'Inner Color' module setting will be ignored. Example: `innerColor: '#0000FF'` - **frameColor:** Set the hex color of the frame. The 'Frame Color' module setting will be ignored. Example: `frameColor: '#0000FF'` +- **persist:** Set to `true` to persist the Challenge Tracker across sessions. Default is `false`. Example: `persist: true` +- **show:** Set to `true` to show the Challenge Tracker to your players. Default is `false`. Example: `show: true` - **size:** Set the size of the Challenge Tracker in pixels between 200 to 600. The 'Size' module setting will be ignored. Example: `size: 400` -- **windowed:** Set the Challenge Tracker to windowed (true) or windowless (false). The 'Windowed' module setting will be ignored. Example: `windowed: false` - **title:** Set the title of the Challenge Tracker in the window header. Default is `Challenge Tracker`. Example: `title: 'Skill Challenge 1'` +- **windowed:** Set the Challenge Tracker to windowed (true) or windowless (false). The 'Windowed' module setting will be ignored. Example: `windowed: false` ## Examples ### Progress Clock diff --git a/images/challenge-tracker-list.png b/images/challenge-tracker-list.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2315ac8ad376f592c1614eac3a7e6a3ec5a64a GIT binary patch literal 121210 zcmYg%byQSe*tH@csWj3xLw7gQ4BZF}B}fk)(kLZJ4lvXJ(j^^&NGmWffDAcwcS}k@@|1JYI2RdW*S9 z=BN6~&&bo!FVN2C%_DW6H*Y+Aojv`mP4F;H{>6b*6pi0nAKl-~IjLuEJO{wab7#RC2({R4T!^Q&0`a}ZYsW)U;(SpAsNrW|&Rzgl8(q%U*cgE$yK*cd_ zvn%bJ!n5$}6^@OST|{*G>WrM+l-HcO!~k5Q+^SE2Y9@b!F)kz^BZf%-n@hT%}id&7Y%*E2Te9TS9M`Ot3Q0JY?nBGv@ z*A50?21w>Wnh6#3VzS}dzff7wsX4CaS!Wd*hwiYFj)RCriUqf5C3Xu`P+shLZB(B} z!PP*BwN({sT6h0cvoUb79)uPREcsgfdShmk4aNfmw0By)iBO0FtZ9ow_+DjoJTyC< zeYE-e`b;V&V%VY5MU9n84+g7hZA+)dMfG)czL=$}wq;-DNLg@x`JR`^cv8F->|xOg z&KT(34i|la64Y0Psod)D#aoZgxXJjsf{c`Muf)*SGNvUWzN$_qaxy2CPE{jk>0{Lj zRgf3KFi|rmf&E5@k@c-)&N}{TCk`&DaW#q<1gisd>w_lW{_2Enw#Z)xAs^Qv$iUC$ z(vI7=pcJ6dGmabiH^$zlXpm-dGqzTwRE(geDnGWt(+HP*DoG&Nx}f{qGm)L8`|HBe5bPDff?lP?~OC}+7T*rpAn*a4Zj z4y1N#0Pq`V{D#Scc$;Z5znD3^=p`IS#!o5$7n3ZoNFIFOzR}0 zV7Akn&g$0Gz~I&U81M?f`A#bCF{0@Lh8h+5n8lkm7zWnD-*4I0 zgw<%V=f{Fw^4xz{m6bZBiPQlX|8%e>=uVxUIyGo%@tL`Dl}?Rg7Ouvod|g?z-+~Wt zbOxBNt6bNj1H0JGNC`W#cOmcQ2b#aCB6wm#p<7*+%3Zg@WY*-8SHzyTBihHm?=0I2 zXlKp2Yv)6jc5v!d*u}<)0!s(rJCgvU)mtZBzQ7T#oD5(-FEJbUGj-`!1AEz4a1~Gy zG7+1@i?k1~w%u#(s+IO2(OfwC3f1X3Gg7kDgtGVLFRTcdHEo_J18)}m#%5H#fq89R zY)vk@?+iOK! zx7`~`)WQgN{8Xe{t&BAX(bjpRP|YOo+8~bS)pG$m)&+hiT`WkhbyhjkCbO!%Sx+bS zG*OewOurNG-9q)3?E(ujDqaMr0>T(Emu zr)K-T6hoRWggO)I-8Q$=RJuCxNrh5!=<{WMYZ5mISAcq9hm5i16%bRR09G?*Ilesv~x|@ zfiwxGzYw{xs2)a%hoyahUykm?EEr$4wXo*5rNMbk96&eWLr6?Sn+7;GRT2A67-k*; z5Dp#C7#4Gh`+K5?x%@t^Qp2>b-qK1TZNBU}lz~ln8wCp>GfyQ}X&@$ifvYqvtaKgn zjQhnv8a=*!=&3vQJ!kN6Oln=kf<*&h_rSbauiG&1vi-2JziLbscA`-#Zsqhl=Xq1< z&={!H?z@HdRsT$Leh@slvfvmFQl~{@b~b9WZit{loErUa$k9tPIN|f9iZnak)A*IZ zY=lotk4XA65o(k47W#TlyYlE?8L6LOGRSGeAF8a#uoPWBcLcOtyno2G_vfOaMlM;? z{Q+9^XhPOD+0)=6n$YGD zVu=z3i6aG5lSz%V7N-L;2aBbBvxuIc!&z7$MvF4V38KKNV{??1lO_tjP^XrWxZpCH zFG}rRT6Iv|j)L`1mzQwn@a|{JO&koifHK5FZN+kp>6j`NoHn(-61r0w0^>d@mGHE_j(8}Psp~u$F@`L( zWE@RIJWQPhj+drud|maOgnc9nw9GXsfLiA%p}G=6>VY96TpTAWT_*|;LlW0z`7&mO z0Skzd>nioAFexUDi$q1Ty00)H>uB;?9V*==kA236avippPK z>S7|-$IEWzPY#BQf)(PBs-@%Ipcs(hYyI%X ze?X*P+hjqFBK}2O?54Zx06hX>_@nFNLf~(~%LQ+kib|TA#X>pTf?=k6b``M8W(VY2 z3IQ0Yf>g?2Jje!?3a0_2YVazHzHk*J+bFMX+E5iHvtLvHAoOyi`m5c*Mt#J6O@sG4 z9o?AII3Bs zg1Z%OtKcZRXtl#|Mxcp8?Py9*K_ggJu5_J+A!aK2SNIh#exOWcKG}&&0a=}O9(F7E zuAHsjovsveU!vBq;NvAA6DpQP`(T!@_%p@{7f$jU8}<`bCK9F1xmF4( z&G#9>cTav;?pX{P6EjnhtkYeKVahNhv-u%aqJ4WCVT)U#V%i>Mg?cQpkHNT--q?me zy-&UvjjA5!I2E*o+$>;Ai>i6H#7U{+Ec7djBXjU|kJDXAwUh&xX&ff{m6cmGEl=bK zIRa4`KchvFA2u{03)j4|e!1aOFzzOez2eG^gJKkEg9AYy8JVHh`vt!R)vL$l0!{fe zQi7>v2{I;^bYAioNM$SIIy??iM@hC09(-k$v@&kj^c_u`|H52xF{KNyUXbUg>U(!- zpw@dbKx$I$EqzQ5Z_M2|^F6DR>|YHG)V8{eb~%;c?t|`q%ETcdRE*L(JuX_5Xg>x6 zV{dB?%N|nUz-8YFK2pm3bLmje#WqTtTa*E*YLB~@vy!FsM)H@{ zfW<2s9BN2O1V1K}0Y2FQ0)cj)WYMqK7`zQ;noIA_gz|eq36523tPFXmr;TYP?4Y3aniCVi`maVqbdf@%7>JfQr zWM#BwE*o(p;x)S~0tGYjzygIJH=GQN&aSEFCxK0 z#anQ`Gmve&#iGSoTFztnE4(aiVN{^U>u{E`Qjw4Bm5c$I&R46wEE#lUdWfs%w{zM= zLH`3I?dK&We~k3xet##w@xDG$w*2C;{-xVre2nzR4pZiXB`SU`s%5smk})aLvP7OYmsVx&-DQRR705Pfi>LnE5uuHw4+5GK=A4+j!=DamMs&LlYLfXF&dc}VjTsT%d85S2 zyh??_zdw38pUtd;2PA|jnw(Ul@jVWQg<_Ep}MMSM$ zno3kA87c&=vpof~#n`m^{`+ML03?|;|JS{c>3$l=>i+oMd<^m$U(Mhheo~(3PiYp` zhz5tA-wYRooaBUDe|ADrTlp!na-1Z$XwPr_5NSBVtcS>PDKpvg@AsD)l!BkQACpw- zi-lZ&^wZ%paWF?hlQ^e8h)GL|V7ulpYQ7RkKOW#1`@v1elkYuP6`4?$b}6+Bf4s=| zaI${IFdP>A=& z0Th^zN!2e$Rr#p#w@P8|o{P(ptgg(f_G20@3Tt}o)Yj*KLEBt11rqXc#QQ

PYg^G)JZa{7-Iml}Yo7!_ZP( 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 literal 0 HcmV?d00001 diff --git a/languages/en.json b/languages/en.json index 07a0e44..bda8a9d 100644 --- a/languages/en.json +++ b/languages/en.json @@ -1,35 +1,41 @@ { - "settings": { - "allowShow" : { - "name": "Show to Others", - "hint": "Allow users with this role (and above) to show Challenge Trackers to others (Requires reload)" - }, - "outerColor" : { - "name": "Outer Color", - "hint": "Set the default color for the outer ring", - "label": "Color Picker" - }, - "innerColor" : { - "name": "Inner Color", - "hint": "Set the default color for the inner circle", - "label": "Color Picker" - }, - "frameColor" : { - "name": "Frame Color", - "hint": "Set the default color of the frame", - "label": "Color Picker" - }, - "size" : { - "name": "Size", - "hint": "Set the default size of the challenge tracker in pixels" - }, - "windowed" : { - "name": "Windowed", - "hint": "Set the challenge tracker to windowed by default" - }, - "scroll" : { - "name": "Scroll", - "hint": "Enable the scroll wheel for increasing/decreasing segments" - } - } + "challengeTracker": { + "labels": { + "challengeTrackerTitle": "Challenge Tracker", + "challengeTrackerButtonTitle": "Challenge Tracker" + }, + "settings": { + "allowShow" : { + "name": "Show to Others", + "hint": "Allow users with this role (and above) to show Challenge Trackers to others (Requires reload)" + }, + "outerColor" : { + "name": "Outer Color", + "hint": "Set the default color for the outer ring", + "label": "Color Picker" + }, + "innerColor" : { + "name": "Inner Color", + "hint": "Set the default color for the inner circle", + "label": "Color Picker" + }, + "frameColor" : { + "name": "Frame Color", + "hint": "Set the default color of the frame", + "label": "Color Picker" + }, + "size" : { + "name": "Size", + "hint": "Set the default size of the challenge tracker in pixels" + }, + "windowed" : { + "name": "Windowed", + "hint": "Set the challenge tracker to windowed by default" + }, + "scroll" : { + "name": "Scroll", + "hint": "Enable the scroll wheel for increasing/decreasing segments" + } + } + } } \ No newline at end of file diff --git a/module.json b/module.json index 62ba627..84421f2 100644 --- a/module.json +++ b/module.json @@ -1,8 +1,8 @@ { "name": "challenge-tracker", "title": "Challenge Tracker", - "description": "An interactive aid to track successes and failures in challenges", - "version": "0.6", + "description": "An interactive aid to track successes and failures in challenges à la D&D 4e-inspired skill challenges and Blades in the Dark progress clocks", + "version": "0.7", "library": "false", "manifestPlusVersion": "1.0.0", "minimumCoreVersion": "9", diff --git a/scripts/challenge-tracker.js b/scripts/challenge-tracker.js index ebe6a47..1b5aa7a 100644 --- a/scripts/challenge-tracker.js +++ b/scripts/challenge-tracker.js @@ -1,9 +1,16 @@ import { ChallengeTracker } from './main.js' import { Utils } from './utils.js' import { Settings } from './settings.js' +import { ChallengeTrackerForm, ChallengeTrackerEditForm } from './form.js' +import { ChallengeTrackerFlag } from './flags.js' Hooks.once('init', () => { Settings.init() + ChallengeTrackerForm.init() + ChallengeTrackerEditForm.init() + Handlebars.registerHelper('ifEquals', function (arg1, arg2, options) { + return (arg1 === arg2) ? options.fn(this) : options.inverse(this) + }) }) Hooks.once('colorSettingsInitialized', async () => { @@ -38,11 +45,46 @@ Hooks.once('ready', async () => { } }) +/* Add buttons to the Player List */ +Hooks.on('renderPlayerList', (playerList, html) => { + const tooltip = game.i18n.localize('challengeTracker.labels.challengeTrackerButtonTitle') + const svg = ` + challenge-tracker-button-icon + + + + + + + + + ` + if (game.user.isGM) { + const listElement = html.find('li') + for (const element of listElement) { + $(element).append( + `` + ) + } + } else { + const loggedInUserListItem = html.find(`[data-user-id="${game.userId}"]`) + loggedInUserListItem.append( + `` + ) + } + + // Add click event to button + html.on('click', '.challenge-tracker-player-list-button', (event) => { + ChallengeTrackerForm.open(event) + }) +}) + +/* Draw the challenge trackers once rendered */ Hooks.on('renderChallengeTracker', async () => { if (!game.challengeTracker) return for (const challengeTracker of game.challengeTracker) { if (challengeTracker._state === 1) { - challengeTracker.draw() + challengeTracker._draw() challengeTracker.activateListenersPostDraw() } } diff --git a/scripts/flags.js b/scripts/flags.js new file mode 100644 index 0000000..1abf808 --- /dev/null +++ b/scripts/flags.js @@ -0,0 +1,70 @@ +import { ChallengeTrackerSettings, ChallengeTracker } from './main.js' +import { ChallengeTrackerForm } from './form.js' + +export class ChallengeTrackerFlag { + /** + * Get list of flags by user + * @param {string} userId User that created the flags + **/ + static getList (userId) { + const challengeTrackerList = [] + if (!game.users.get(userId)?.data.flags['challenge-tracker']) return + const flagKeys = Object.keys(game.users.get(userId)?.data.flags['challenge-tracker']) + for (const flagKey of flagKeys) { + challengeTrackerList.push(game.users.get(userId)?.getFlag(ChallengeTrackerSettings.id, flagKey)) + } + return challengeTrackerList + } + + /** + * Get flag by owner and Challenge Tracker + * @param {string} ownerId User that owns the flag + * @param {string} challengeTrackerId Unique identifier for the Challenge Tracker + **/ + static get (ownerId, challengeTrackerId) { + if (!game.users.get(ownerId)?.data.flags['challenge-tracker']) return + const flagKey = Object.keys(game.users.get(ownerId)?.data.flags['challenge-tracker']).find(ct => ct === challengeTrackerId) + if (!flagKey) return + const challengeTracker = game.users.get(ownerId)?.getFlag(ChallengeTrackerSettings.id, flagKey) + return challengeTracker + } + + /** + * Set flag by owner and Challenge Tracker. Used to create a challenge tracker. + * @param {string} ownerId User that owns the flag + * @param {array} challengeTrackerOptions Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless + **/ + static async set (ownerId, challengeTrackerOptions) { + await game.users.get(ownerId)?.setFlag(ChallengeTrackerSettings.id, challengeTrackerOptions.id, challengeTrackerOptions) + ChallengeTrackerForm.challengeTrackerForm?.render(false, { width: 'auto', height: 'auto' }) + } + + /** + * Unset flag by owner and Challenge Tracker. Used to delete a challenge tracker. + * @param {string} ownerId User that owns the flag + * @param {string} challengeTrackerId Unique identifier for the Challenge Tracker + **/ + static async unset (ownerId, challengeTrackerId) { + const flagKey = Object.keys(game.users.get(ownerId)?.data.flags['challenge-tracker']).find(ct => ct === challengeTrackerId) + if (!flagKey) { + ui.notifications.error(`Challenge Tracker '${challengeTrackerId}' does not exist.`) + return + } + const deletedFlag = game.users.get(ownerId)?.unsetFlag(ChallengeTrackerSettings.id, challengeTrackerId) + ui.notifications.info(`Challenge Tracker '${challengeTrackerId}' deleted.`) + return deletedFlag + } +} diff --git a/scripts/form.js b/scripts/form.js new file mode 100644 index 0000000..00ec301 --- /dev/null +++ b/scripts/form.js @@ -0,0 +1,177 @@ +import { ChallengeTrackerSettings, ChallengeTracker } from './main.js' +import { ChallengeTrackerFlag } from './flags.js' + +/* Display challenge trackers in a list with options */ +export class ChallengeTrackerForm extends FormApplication { + static get defaultOptions () { + const defaults = super.defaultOptions + + const overrides = { + height: 'auto', + width: 'auto', + id: 'challenge-tracker-form', + template: ChallengeTrackerSettings.templates.challengeTrackerForm, + title: ChallengeTrackerSettings.title, + userId: game.userId, + closeOnSubmit: false, + submitOnChange: true + } + + const mergedOptions = foundry.utils.mergeObject(defaults, overrides) + + return mergedOptions + } + + getData (options) { + return { + ownerId: options.userId, + challengeTrackerList: ChallengeTrackerFlag.getList(options.userId) + } + } + + /* Initialise the ChallengeTrackerForm */ + static init () { + this.challengeTrackerForm = new ChallengeTrackerForm() + } + + /** + * Open the Challenge Tracker form + * @param {object} event Event trigger + **/ + static open (event) { + const userId = $(event.currentTarget).parents('[data-user-id]')?.data()?.userId + ChallengeTrackerForm.challengeTrackerForm.render(true, { userId }) + } + + activateListeners (html) { + super.activateListeners(html) + html.on('click', '[data-action]', this._handleButtonClick.bind(this)) + } + + /** + * Handle form button events + * @param {object} event Event trigger + **/ + async _handleButtonClick (event) { + const clickedElement = $(event.currentTarget) + const action = clickedElement.data().action + const ownerId = clickedElement.parents('[data-owner-id]')?.data()?.ownerId + const challengeTrackerId = clickedElement.parents('li')?.data()?.challengeTrackerId + + switch (action) { + case 'edit': { + await ChallengeTrackerEditForm.open(ownerId, challengeTrackerId) + break + } + case 'open' : { + ChallengeTracker.open(null, null, { id: challengeTrackerId, ownerId }) + this.render(false, { width: 'auto', height: 'auto' }) + break + } + case 'delete': { + await ChallengeTrackerFlag.unset(ownerId, challengeTrackerId) + this.render(false, { width: 'auto', height: 'auto' }) + break + } + case 'new': { + await ChallengeTrackerEditForm.open(ownerId) + this.render(false, { width: 'auto', height: 'auto' }) + break + } + } + } +} + +/* Display challenge tracker options */ +export class ChallengeTrackerEditForm extends FormApplication { + constructor (ownerId, challengeTrackerId) { + super() + this.ownerId = ownerId + this.challengeTrackerId = challengeTrackerId + } + + static get defaultOptions () { + const defaults = super.defaultOptions + + const overrides = { + height: 'auto', + width: 'auto', + id: 'challenge-tracker-edit-form', + template: ChallengeTrackerSettings.templates.challengeTrackerEditForm, + title: `Edit ${ChallengeTrackerSettings.title}`, + userId: game.userId, + closeOnSubmit: true + } + + const mergedOptions = foundry.utils.mergeObject(defaults, overrides) + + return mergedOptions + } + + getData (options) { + if (this.challengeTrackerId) { + return { challengeTracker: ChallengeTrackerFlag.get(this.ownerId, this.challengeTrackerId) } + } else { + return { + challengeTracker: { + frameColor: null, + id: `${ChallengeTrackerSettings.id}-${Math.random().toString(16).slice(2)}`, + innerColor: null, + innerCurrent: 0, + innerTotal: 3, + outerColor: null, + outerCurrent: 0, + outerTotal: 4, + ownerId: this.ownerId, + persist: true, + show: false, + size: null, + title: ChallengeTrackerSettings.title, + windowed: true + } + } + } + } + + /* Initialise the ChallengeTrackerEditForm */ + static init () { + this.challengeTrackerEditForm = new ChallengeTrackerEditForm() + } + + /** + * Open the Edit Challenge Tracker form + * @param {string} ownerId User that owns the flag + * @param {string} [challengeTrackerId=null] Unique identifier for the Challenge Tracker + **/ + static async open (ownerId, challengeTrackerId = null) { + ChallengeTrackerEditForm.challengeTrackerEditForm.ownerId = ownerId + ChallengeTrackerEditForm.challengeTrackerEditForm.challengeTrackerId = challengeTrackerId + ChallengeTrackerEditForm.challengeTrackerEditForm.render(true) + } + + activateListeners (html) { + super.activateListeners(html) + } + + /** + * Merge options with flag and, if open, redraw the Challenge Tracker + * @param {string} ownerId User that owns the flag + * @param {string} [challengeTrackerId=null] Unique identifier for the Challenge Tracker + **/ + async _updateObject (event, formData) { + const ownerId = event.currentTarget.dataset.ownerId + const challengeTrackerId = event.currentTarget.dataset.challengeTrackerId + const flag = ChallengeTrackerFlag.get(ownerId, challengeTrackerId) + let challengeTrackerOptions + if (flag) { + challengeTrackerOptions = foundry.utils.mergeObject(flag, formData) + } else { + const title = formData.title ?? 'Challenge Tracker' + const persist = true + const id = challengeTrackerId + challengeTrackerOptions = foundry.utils.mergeObject(formData, { ownerId, id, persist, title }) + } + await ChallengeTrackerFlag.set(ownerId, challengeTrackerOptions) + await ChallengeTracker.draw(challengeTrackerOptions) + } +} diff --git a/scripts/main.js b/scripts/main.js index 15e8051..392f239 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -1,9 +1,13 @@ +import { ChallengeTrackerForm } from './form.js' import { Utils } from './utils.js' +import { ChallengeTrackerFlag } from './flags.js' export class ChallengeTrackerSettings { static id = 'challenge-tracker' static templates = { - challengeTracker: 'modules/challenge-tracker/templates/challenge-tracker.hbs' + challengeTracker: 'modules/challenge-tracker/templates/challenge-tracker.hbs', + challengeTrackerForm: 'modules/challenge-tracker/templates/challenge-tracker-form.hbs', + challengeTrackerEditForm: 'modules/challenge-tracker/templates/challenge-tracker-edit-form.hbs' } static title = 'Challenge Tracker' @@ -11,10 +15,10 @@ export class ChallengeTrackerSettings { export class ChallengeTracker extends Application { constructor ( - outerTotal = 1, - innerTotal = 1, challengeTrackerOptions = { show: false, + outerTotal: 1, + innerTotal: 1, outerCurrent: 0, innerCurrent: 0, outerColor: null, @@ -22,7 +26,9 @@ export class ChallengeTracker extends Application { frameColor: null, size: null, windowed: null, - title: ChallengeTrackerSettings.title + title: ChallengeTrackerSettings.title, + id: null, + persist: false }, options, ownerId = null @@ -31,14 +37,17 @@ export class ChallengeTracker extends Application { this.ownerId = ownerId this.executorId = null this._disable_popout_module = true // Disable the PopOut! module on this application - this.outerTotal = outerTotal - this.innerTotal = innerTotal // Challenge Tracker Options + const userRole = game.user.role + if (!Utils.checkAllowShow(userRole)) challengeTrackerOptions.show = false this.challengeTrackerOptions = challengeTrackerOptions + this.challengeTrackerOptions.ownerId = ownerId this.challengeTrackerOptions.show = [true, false].includes(challengeTrackerOptions.show) ? challengeTrackerOptions.show : false + this.challengeTrackerOptions.outerTotal = challengeTrackerOptions.outerTotal ?? 4 + this.challengeTrackerOptions.innerTotal = challengeTrackerOptions.innerTotal ?? 3 this.challengeTrackerOptions.outerCurrent = challengeTrackerOptions.outerCurrent ?? 0 this.challengeTrackerOptions.innerCurrent = challengeTrackerOptions.innerCurrent ?? 0 this.challengeTrackerOptions.outerColor = challengeTrackerOptions.outerColor ?? null @@ -48,25 +57,23 @@ export class ChallengeTracker extends Application { this.challengeTrackerOptions.windowed = [true, false].includes(challengeTrackerOptions.windowed) ? challengeTrackerOptions.windowed : null - this.windowed = this.challengeTrackerOptions.windowed ?? - game.settings.get('challenge-tracker', 'windowed') + this.challengeTrackerOptions.persist = [true, false].includes(challengeTrackerOptions.persist) + ? challengeTrackerOptions.persist + : false - // Colors - this.outerColor = this.challengeTrackerOptions.outerColor ?? - game.settings.get('challenge-tracker', 'outerColor') - this.innerColor = this.challengeTrackerOptions.innerColor ?? - game.settings.get('challenge-tracker', 'innerColor') - this.frameColor = this.challengeTrackerOptions.frameColor ?? - game.settings.get('challenge-tracker', 'frameColor') - this.size = this.challengeTrackerOptions.size ?? - game.settings.get('challenge-tracker', 'size') + // Local Options + this.size = null + this.windowed = null + this.outerColor = null + this.innerColor = null + this.frameColor = null this.outerColorShade = null this.innerColorShade = null this.outerColorBackground = null this.innerColorBackground = null this.frameColorHighlight1 = null this.frameColorHighlight2 = null - this.updateColor(this.outerColor, this.innerColor, this.frameColor) + this.setVariables() // Set values from challengeTrackerOptions or module settings for local variables // Canvas this.canvasFrame = undefined @@ -91,55 +98,102 @@ export class ChallengeTracker extends Application { } } + /* Set values from challengeTrackerOptions or module settings for local variables */ + setVariables () { + this.size = this.challengeTrackerOptions.size ?? + game.settings.get('challenge-tracker', 'size') + this.windowed = this.challengeTrackerOptions.windowed ?? + game.settings.get('challenge-tracker', 'windowed') + + // Base Colors + this.outerColor = (this.challengeTrackerOptions.outerColor) + ? this.challengeTrackerOptions.outerColor + : game.settings.get('challenge-tracker', 'outerColor') + this.innerColor = (this.challengeTrackerOptions.innerColor) + ? this.challengeTrackerOptions.innerColor + : game.settings.get('challenge-tracker', 'innerColor') + this.frameColor = (this.challengeTrackerOptions.frameColor) + ? this.challengeTrackerOptions.frameColor + : game.settings.get('challenge-tracker', 'frameColor') + + this.updateColor(this.outerColor, this.innerColor, this.frameColor) + } + /** - * Open Challenge Tracker + * Open a Challenge Tracker * @param {number} outerTotal Number of segments for the outer ring * @param {number} innerTotal Number of segments for the inner circle - * @param {array} [challengeTrackerOptions] show, outerCurrent, innerCurrent, outerColor, innerColor, frameColor, size, windowed, title + * @param {array} [challengeTrackerOptions] Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {string} challengeTrackerOptions.ownerId Owner of the challenge tracker + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless **/ - static open (outerTotal = 1, innerTotal = 1, + static open ( + outerTotal = 4, + innerTotal = 3, challengeTrackerOptions = { - show: false, - outerCurrent: 0, + frameColor: null, + id: null, + innerColor: null, innerCurrent: 0, + innerTotal: 3, outerColor: null, - innerColor: null, - frameColor: null, + outerCurrent: 0, + outerTotal: 4, + ownerId: null, + persist: false, + show: false, size: null, - windowed: null, - title: ChallengeTrackerSettings.title + title: ChallengeTrackerSettings.title, + windowed: null } ) { - const ownerId = game.userId - const userRole = game.user.role + const ownerId = challengeTrackerOptions.ownerId ?? game.userId + // If id included in challengeTrackerOptions, attempt to merge options from flag + if (challengeTrackerOptions.id) { + const flag = ChallengeTrackerFlag.get (ownerId, challengeTrackerOptions.id) + if (flag) { + challengeTrackerOptions = foundry.utils.mergeObject(flag, challengeTrackerOptions) + } else { + ui.notifications.error(`Challenge Tracker '${challengeTrackerOptions.id}' does not exist.`) + return + } + } - // Set defaults - challengeTrackerOptions.show = [true, false].includes(challengeTrackerOptions.show) - ? challengeTrackerOptions.show - : false - if (!Utils.checkAllowShow(userRole)) challengeTrackerOptions.show = false - challengeTrackerOptions.title = challengeTrackerOptions.title ?? ChallengeTrackerSettings.title + challengeTrackerOptions.outerTotal = challengeTrackerOptions.outerTotal ?? outerTotal + challengeTrackerOptions.innerTotal = challengeTrackerOptions.innerTotal ?? innerTotal // Set unique id for each Challenge Tracker - const id = `${ChallengeTrackerSettings.id}-${Math.random().toString(16).slice(2)}` + challengeTrackerOptions.id = challengeTrackerOptions.id ?? + `${ChallengeTrackerSettings.id}-${Math.random().toString(16).slice(2)}` + + // Set title + challengeTrackerOptions.title = challengeTrackerOptions.title ?? ChallengeTrackerSettings.title // Call openHandler for only GM or everyone if (challengeTrackerOptions.show) { ChallengeTrackerSocket.executeForEveryone( 'openHandler', - outerTotal, - innerTotal, challengeTrackerOptions, - { id, title: challengeTrackerOptions.title }, + { id: challengeTrackerOptions.id, title: challengeTrackerOptions.title }, ownerId ) } else { ChallengeTracker.openHandler( - outerTotal, - innerTotal, challengeTrackerOptions, - { id, title: challengeTrackerOptions.title }, + { id: challengeTrackerOptions.id, title: challengeTrackerOptions.title }, ownerId ) } @@ -147,14 +201,25 @@ export class ChallengeTracker extends Application { /** * Open Challenge Tracker by id or open a new Challenge Tracker - * @param {number} outerTotal Number of segments for the outer ring - * @param {number} innerTotal Number of segments for the inner circle - * @param {array} challengeTrackerOptions show, outerCurrent, innerCurrent, outerColor, innerColor, frameColor, size, title + * @param {array} [challengeTrackerOptions] Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless * @param {array} options id, template, title * @param {string} ownerId User that created the Challenge Tracker * @param {string} executorId User that executed the method **/ - static async openHandler (outerTotal, innerTotal, challengeTrackerOptions, options, ownerId, executorId = ownerId) { + static async openHandler (challengeTrackerOptions, options, ownerId, executorId = ownerId) { // If array does not exist, create an empty array if (!game.challengeTracker) game.challengeTracker = [] @@ -171,19 +236,16 @@ export class ChallengeTracker extends Application { if (!game.challengeTracker[index]) { await renderTemplate(ChallengeTrackerSettings.templates.challengeTracker) game.challengeTracker[index] = new ChallengeTracker( - outerTotal, - innerTotal, challengeTrackerOptions, options, ownerId ) } else { - this.outerTotal = outerTotal - this.innerTotal = innerTotal this.challengeTrackerOptions = challengeTrackerOptions // Switch the Show/Hide element for the owner - if ((game.user.isGM || game.userId === element.ownerId) && game.userId !== executorId && !element.challengeTrackerOptions.show) { + if ((game.user.isGM || game.userId === element.ownerId) && + game.userId !== executorId && !element.challengeTrackerOptions.show) { const show = true element.updateShowHideElement(show) return @@ -217,18 +279,18 @@ export class ChallengeTracker extends Application { **/ static closeHandler (options, executorId) { if (!game.challengeTracker) return - const element = game.challengeTracker.find(element => element.id === options.id) - if (!element) return + const challengeTracker = game.challengeTracker.find(ct => ct.id === options.id) + if (!challengeTracker) return // Keep open for owner, instead switch the Show/Hide element - if (game.userId === element.ownerId && executorId !== element.ownerId) { + if (game.userId === challengeTracker.ownerId && executorId !== challengeTracker.ownerId) { const show = false - element.updateShowHideElement(show) + challengeTracker.updateShowHideElement(show) return } - const index = game.challengeTracker.indexOf(element) - element.close() + const index = game.challengeTracker.indexOf(challengeTracker) + challengeTracker.close() game.challengeTracker.splice(index, 1) } @@ -248,7 +310,7 @@ export class ChallengeTracker extends Application { if (hasPermission) { this.updateCloseElement(game.settings.get('challenge-tracker', 'size')) this.element.find('.close').before('') - this.showHide(this.challengeTrackerOptions.show) + this.updateShowHide(this.challengeTrackerOptions.show) } // Remove the Close button for players @@ -309,16 +371,16 @@ export class ChallengeTracker extends Application { * @param {object} event Listener event **/ challengeTrackerClickEvent (event) { - if (this.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, event.offsetX, event.offsetY)) { - this.challengeTrackerOptions.innerCurrent = (this.challengeTrackerOptions.innerCurrent === this.innerTotal) - ? this.innerTotal + if (this.challengeTrackerOptions.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, event.offsetX, event.offsetY)) { + this.challengeTrackerOptions.innerCurrent = (this.challengeTrackerOptions.innerCurrent === this.challengeTrackerOptions.innerTotal) + ? this.challengeTrackerOptions.innerTotal : this.challengeTrackerOptions.innerCurrent + 1 - this.draw() + this._draw() } else if (this.contextFrame.isPointInPath(this.outerArc, event.offsetX, event.offsetY)) { - this.challengeTrackerOptions.outerCurrent = (this.challengeTrackerOptions.outerCurrent === this.outerTotal) - ? this.outerTotal + this.challengeTrackerOptions.outerCurrent = (this.challengeTrackerOptions.outerCurrent === this.challengeTrackerOptions.outerTotal) + ? this.challengeTrackerOptions.outerTotal : this.challengeTrackerOptions.outerCurrent + 1 - this.draw() + this._draw() } } @@ -327,18 +389,18 @@ export class ChallengeTracker extends Application { * @param {object} event Listener event **/ challengeTrackerContextMenuEvent (event) { - if (this.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, event.offsetX, event.offsetY)) { + if (this.challengeTrackerOptions.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, event.offsetX, event.offsetY)) { event.preventDefault() this.challengeTrackerOptions.innerCurrent = (this.challengeTrackerOptions.innerCurrent === 0) - ? this.innerTotal + ? this.challengeTrackerOptions.innerTotal : this.challengeTrackerOptions.innerCurrent - 1 - this.draw() + this._draw() } else if (this.contextFrame.isPointInPath(this.outerArc, event.offsetX, event.offsetY)) { event.preventDefault() this.challengeTrackerOptions.outerCurrent = (this.challengeTrackerOptions.outerCurrent === 0) - ? this.outerTotal + ? this.challengeTrackerOptions.outerTotal : this.challengeTrackerOptions.outerCurrent - 1 - this.draw() + this._draw() } } @@ -350,28 +412,29 @@ export class ChallengeTracker extends Application { const rect = this.canvasFrame.getBoundingClientRect() const x = this.mousePosition.x - rect.left const y = this.mousePosition.y - rect.top - if (this.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, x, y)) { + if (this.challengeTrackerOptions.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, x, y)) { console.log(event.code) if (event.code === 'Minus') { - if (this.innerTotal > 1) this.innerTotal-- - this.challengeTrackerOptions.innerCurrent = (this.challengeTrackerOptions.innerCurrent > this.innerTotal) - ? this.innerTotal - : this.challengeTrackerOptions.innerCurrent - this.draw() + if (this.challengeTrackerOptions.innerTotal > 1) this.challengeTrackerOptions.innerTotal-- + this.challengeTrackerOptions.innerCurrent = + (this.challengeTrackerOptions.innerCurrent > this.challengeTrackerOptions.innerTotal) + ? this.challengeTrackerOptions.innerTotal + : this.challengeTrackerOptions.innerCurrent + this._draw() } if (event.code === 'Equal') { - this.innerTotal++ - this.draw() + this.challengeTrackerOptions.innerTotal++ + this._draw() } } else if (this.contextFrame.isPointInPath(this.outerArc, x, y)) { console.log(event.code) if (event.code === 'Minus') { - if (this.outerTotal > 1) this.outerTotal-- - this.draw() + if (this.challengeTrackerOptions.outerTotal > 1) this.challengeTrackerOptions.outerTotal-- + this._draw() } if (event.code === 'Equal') { - this.outerTotal++ - this.draw() + this.challengeTrackerOptions.outerTotal++ + this._draw() } } } @@ -384,75 +447,133 @@ export class ChallengeTracker extends Application { const rect = this.canvasFrame.getBoundingClientRect() const x = this.mousePosition.x - rect.left const y = this.mousePosition.y - rect.top - if (this.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, x, y)) { + if (this.challengeTrackerOptions.innerTotal > 0 && this.contextFrame.isPointInPath(this.innerArc, x, y)) { if (event.deltaY > 0) { - if (this.innerTotal > 1) this.innerTotal-- - this.challengeTrackerOptions.innerCurrent = (this.challengeTrackerOptions.innerCurrent > this.innerTotal) - ? this.innerTotal - : this.challengeTrackerOptions.innerCurrent + if (this.challengeTrackerOptions.innerTotal > 1) this.challengeTrackerOptions.innerTotal-- + this.challengeTrackerOptions.innerCurrent = + (this.challengeTrackerOptions.innerCurrent > this.challengeTrackerOptions.innerTotal) + ? this.challengeTrackerOptions.innerTotal + : this.challengeTrackerOptions.innerCurrent } if (event.deltaY < 0) { - this.innerTotal++ + this.challengeTrackerOptions.innerTotal++ } - this.draw() + this._draw() } else if (this.contextFrame.isPointInPath(this.outerArc, x, y)) { if (event.deltaY > 0) { - if (this.outerTotal > 1) this.outerTotal-- - this.challengeTrackerOptions.outerCurrent = (this.challengeTrackerOptions.outerCurrent > this.outerTotal) - ? this.outerTotal + if (this.challengeTrackerOptions.outerTotal > 1) this.challengeTrackerOptions.outerTotal-- + this.challengeTrackerOptions.outerCurrent = (this.challengeTrackerOptions.outerCurrent > this.challengeTrackerOptions.outerTotal) + ? this.challengeTrackerOptions.outerTotal : this.challengeTrackerOptions.outerCurrent } if (event.deltaY < 0) { - this.outerTotal++ + this.challengeTrackerOptions.outerTotal++ + } + this._draw() + } + } + + /** + * Draw Challenge Tracker by Id + * @param {array} [challengeTrackerOptions=null] Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless + **/ + static async draw (challengeTrackerOptions = null) { + const challengeTrackerId = challengeTrackerOptions.id + if (challengeTrackerId) { + const challengeTracker = game.challengeTracker?.find(ct => ct.id === challengeTrackerId) + if (!challengeTracker) return + challengeTracker.challengeTrackerOptions = challengeTrackerOptions + challengeTracker.setVariables() + challengeTracker.updateShowHide() + challengeTracker._draw() + } else { + for (const challengeTracker of game.challengeTracker) { + challengeTracker._draw() } - this.draw() } } /* Draw the Challenge Tracker */ - draw () { + _draw () { // Call drawHandler for GM only or everyone if (this.challengeTrackerOptions.show) { ChallengeTrackerSocket.executeForEveryone( 'drawHandler', - this.outerTotal, - this.innerTotal, this.challengeTrackerOptions, this.options ) } else { ChallengeTracker.drawHandler( - this.outerTotal, - this.innerTotal, this.challengeTrackerOptions, this.options ) } + if (this.challengeTrackerOptions.persist) { + ChallengeTrackerFlag.set(this.ownerId, this.challengeTrackerOptions) + } } /** * Draw Challenge Tracker by Id - * @param {number} outerTotal Number of segments for the outer ring - * @param {number} innerTotal Number of segments for the inner circle - * @param {array} challengeTrackerOptions show, outerCurrent, innerCurrent, outerColor, innerColor, frameColor, size, title + * @param {array} challengeTrackerOptions Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless * @param {array} options id, template, title **/ - static drawHandler (outerTotal, innerTotal, challengeTrackerOptions, options) { - const element = game.challengeTracker.find(element => element.id === options.id) - if (!element) return - element.drawCanvas(outerTotal, innerTotal, challengeTrackerOptions) + static drawHandler (challengeTrackerOptions, options) { + const challengeTracker = game.challengeTracker.find(ct => ct.id === options.id) + if (!challengeTracker) return + challengeTracker.drawCanvas(challengeTrackerOptions) + if (challengeTrackerOptions.windowed) { + challengeTracker.element.removeClass('windowless') + } else { + challengeTracker.element.addClass('windowless') + } } /** * Draw the Challenge Tracker canvas - * @param {number} outerTotal Number of segments for the outer ring - * @param {number} innerTotal Number of segments for the inner circle - * @param {array} challengeTrackerOptions show, outerCurrent, innerCurrent, outerColor, innerColor, frameColor, size, title + * @param {array} challengeTrackerOptions Challenge Tracker Options + * @param {string} challengeTrackerOptions.frameColor Hex color of the frame + * @param {string} challengeTrackerOptions.id Unique identifier of the challenge tracker + * @param {string} challengeTrackerOptions.innerColor Hex color of the inner circle + * @param {number} challengeTrackerOptions.innerCurrent Number of filled segments of the inner circle + * @param {number} challengeTrackerOptions.innerTotal Number of segments for the inner circle + * @param {string} challengeTrackerOptions.outerColor Hex color of the outer ring + * @param {number} challengeTrackerOptions.outerCurrent Number of filled segments of the outer ring + * @param {number} challengeTrackerOptions.outerTotal Number of segments for the outer ring + * @param {boolean} challengeTrackerOptions.persist true = Persist, false = Do not persist + * @param {boolean} challengeTrackerOptions.show true = Show, false = Hide + * @param {number} challengeTrackerOptions.size Size of the challenge tracker in pixels + * @param {string} challengeTrackerOptions.title Title of the challenge tracker + * @param {boolean} challengeTrackerOptions.windowed true = Windowed, false = Windowless **/ - drawCanvas (outerTotal, innerTotal, challengeTrackerOptions) { + drawCanvas (challengeTrackerOptions) { // Set variables - this.outerTotal = outerTotal - this.innerTotal = innerTotal this.challengeTrackerOptions = challengeTrackerOptions const canvasSize = this.size const halfCanvasSize = canvasSize / 2 @@ -480,8 +601,8 @@ export class ChallengeTracker extends Application { this.innerArc = new Path2D() this.outerArc = new Path2D() - const outerSliceRadians = (360 / this.outerTotal) * Math.PI / 180 - const innerSliceRadians = (360 / this.innerTotal) * Math.PI / 180 + const outerSliceRadians = (360 / this.challengeTrackerOptions.outerTotal) * Math.PI / 180 + const innerSliceRadians = (360 / this.challengeTrackerOptions.innerTotal) * Math.PI / 180 const startAngle = 1.5 * Math.PI const outerEndAngle = (outerSliceRadians * this.challengeTrackerOptions.outerCurrent) + 1.5 * Math.PI const innerEndAngle = (innerSliceRadians * this.challengeTrackerOptions.innerCurrent) + 1.5 * Math.PI @@ -512,12 +633,14 @@ export class ChallengeTracker extends Application { // Draw outer ring current arc context.beginPath() context.moveTo(halfCanvasSize, halfCanvasSize) - if (this.challengeTrackerOptions.outerCurrent > 0) context.arc(halfCanvasSize, halfCanvasSize, radius, startAngle, outerEndAngle) + if (this.challengeTrackerOptions.outerCurrent > 0) { + context.arc(halfCanvasSize, halfCanvasSize, radius, startAngle, outerEndAngle) + } context.fillStyle = outerGradient context.fill() context.closePath() - if (this.innerTotal > 0) { + if (this.challengeTrackerOptions.innerTotal > 0) { // Remove centre of outer ring for the inner circle context.save() context.beginPath() @@ -578,11 +701,11 @@ export class ChallengeTracker extends Application { // Draw lines between segments of outer ring this.contextFrame.save() this.contextFrame.translate(halfCanvasSize, halfCanvasSize) - this.contextFrame.rotate(outerSliceRadians * this.outerTotal / 2) - if (this.outerTotal > 1) { - for (let outerSlice = 1; outerSlice <= this.outerTotal; outerSlice++) { + this.contextFrame.rotate(outerSliceRadians * this.challengeTrackerOptions.outerTotal / 2) + if (this.challengeTrackerOptions.outerTotal > 1) { + for (let outerSlice = 1; outerSlice <= this.challengeTrackerOptions.outerTotal; outerSlice++) { if (outerSlice > 1) this.contextFrame.rotate(outerSliceRadians) - if (this.innerTotal > 0) { + if (this.challengeTrackerOptions.innerTotal > 0) { this.contextFrame.moveTo(0, radius / 5 * 3) } else { this.contextFrame.moveTo(0, 0) @@ -592,13 +715,13 @@ export class ChallengeTracker extends Application { } this.contextFrame.restore() - if (this.innerTotal > 0) { + if (this.challengeTrackerOptions.innerTotal > 0) { // Draw lines between segments of inner circle this.contextFrame.save() this.contextFrame.translate(halfCanvasSize, halfCanvasSize) - this.contextFrame.rotate(innerSliceRadians * this.innerTotal / 2) - if (this.innerTotal > 1) { - for (let innerSlice = 1; innerSlice <= this.innerTotal; innerSlice++) { + this.contextFrame.rotate(innerSliceRadians * this.challengeTrackerOptions.innerTotal / 2) + if (this.challengeTrackerOptions.innerTotal > 1) { + for (let innerSlice = 1; innerSlice <= this.challengeTrackerOptions.innerTotal; innerSlice++) { if (innerSlice > 1) this.contextFrame.rotate(innerSliceRadians) this.contextFrame.moveTo(0, 0) this.contextFrame.lineTo(0, radius / 5 * 3) @@ -636,7 +759,7 @@ export class ChallengeTracker extends Application { this.contextFrame.stroke(this.outerArc) this.contextFrame.closePath() - if (this.innerTotal > 0) { + if (this.challengeTrackerOptions.innerTotal > 0) { const innerFrameGradient = context.createRadialGradient( halfCanvasSize + (halfLineWidth / 4), halfCanvasSize + (halfLineWidth / 4), @@ -670,7 +793,7 @@ export class ChallengeTracker extends Application { if (!game.challengeTracker) return for (const challengeTracker of game.challengeTracker) { challengeTracker.updateColor(outerColor, innerColor, frameColor) - challengeTracker.draw() + challengeTracker._draw() } } @@ -681,9 +804,15 @@ export class ChallengeTracker extends Application { * @param {string} frameColor Hex color for the frame **/ updateColor (outerColor, innerColor, frameColor) { - this.outerColor = this.challengeTrackerOptions.outerColor ?? outerColor - this.innerColor = this.challengeTrackerOptions.innerColor ?? innerColor - this.frameColor = this.challengeTrackerOptions.frameColor ?? frameColor + this.outerColor = (this.challengeTrackerOptions.outerColor) + ? this.challengeTrackerOptions.outerColor + : outerColor + this.innerColor = (this.challengeTrackerOptions.innerColor) + ? this.challengeTrackerOptions.innerColor + : innerColor + this.frameColor = this.frameColor = (this.challengeTrackerOptions.frameColor) + ? this.challengeTrackerOptions.frameColor + : frameColor this.outerColorShade = Utils.shadeColor(this.outerColor, 1.25) this.innerColorShade = Utils.shadeColor(this.innerColor, 1.25) this.outerColorBackground = this.outerColorShade.substring(0, 7) + '66' @@ -702,7 +831,7 @@ export class ChallengeTracker extends Application { challengeTracker.size = challengeTracker.challengeTrackerOptions.size ?? size challengeTracker.updateShowHideElement() challengeTracker.updateCloseElement() - challengeTracker.draw() + challengeTracker._draw() } } @@ -774,19 +903,18 @@ export class ChallengeTracker extends Application { showHideHtmlText = 'Show' showHideHtmlIcon = 'fas fa-eye fa-fw' } - if (this.size < 300) showHideHtmlText = '' + if (this.challengeTrackerOptions.size < 300) showHideHtmlText = '' const showHideHtml = `${showHideHtmlText}` showHideElement.replaceWith(showHideHtml) this.showHideEvent() } - showHide () { + /* Show/hide the Challenge Tracker for others */ + updateShowHide () { const executorId = game.userId if (this.challengeTrackerOptions.show) { ChallengeTrackerSocket.executeForOthers( 'openHandler', - this.outerTotal, - this.innerTotal, this.challengeTrackerOptions, this.options, executorId @@ -799,12 +927,13 @@ export class ChallengeTracker extends Application { ) } this.updateShowHideElement() + ChallengeTrackerFlag.set(this.ownerId, this.challengeTrackerOptions) } /* Switch the challengeTrackerOptions.show value */ switchShowHide () { this.challengeTrackerOptions.show = !(this.challengeTrackerOptions.show) - this.showHide() + this.updateShowHide() } /* Add click event to the show/hide element */ @@ -817,7 +946,6 @@ export class ChallengeTracker extends Application { * @param {string} [title = null] Title of the Challenge Tracker **/ static show (title = null) { - // Only allow GM to execute if (!game.user.isGM || !Utils.checkAllowShow) return if (!game.challengeTracker) return for (const challengeTracker of game.challengeTracker) { @@ -829,7 +957,7 @@ export class ChallengeTracker extends Application { showHandler () { this.challengeTrackerOptions.show = true - this.showHide() + this.updateShowHide() } /** @@ -837,7 +965,6 @@ export class ChallengeTracker extends Application { * @param {string} [title = null] Title of the Challenge Tracker **/ static hide (title = null) { - // Only allow GM to execute if (!game.user.isGM || !Utils.checkAllowShow) return if (!game.challengeTracker) return for (const challengeTracker of game.challengeTracker) { @@ -849,6 +976,6 @@ export class ChallengeTracker extends Application { hideHandler () { this.challengeTrackerOptions.show = false - this.showHide() + this.updateShowHide() } } diff --git a/scripts/settings.js b/scripts/settings.js index 8e6be8e..35a30dc 100644 --- a/scripts/settings.js +++ b/scripts/settings.js @@ -3,8 +3,8 @@ import { ChallengeTracker } from './main.js' export class Settings { static init () { game.settings.register('challenge-tracker', 'allowShow', { - name: game.i18n.localize('settings.allowShow.name'), - hint: game.i18n.localize('settings.allowShow.hint'), + name: game.i18n.localize('challengeTracker.settings.allowShow.name'), + hint: game.i18n.localize('challengeTracker.settings.allowShow.hint'), scope: 'world', config: true, type: String, @@ -19,8 +19,8 @@ export class Settings { }) game.settings.register('challenge-tracker', 'size', { - name: game.i18n.localize('settings.size.name'), - hint: game.i18n.localize('settings.size.hint'), + name: game.i18n.localize('challengeTracker.settings.size.name'), + hint: game.i18n.localize('challengeTracker.settings.size.hint'), scope: 'world', config: true, type: Number, @@ -34,8 +34,8 @@ export class Settings { }) game.settings.register('challenge-tracker', 'windowed', { - name: game.i18n.localize('settings.windowed.name'), - hint: game.i18n.localize('settings.windowed.hint'), + name: game.i18n.localize('challengeTracker.settings.windowed.name'), + hint: game.i18n.localize('challengeTracker.settings.windowed.hint'), scope: 'client', config: true, type: Boolean, @@ -44,8 +44,8 @@ export class Settings { }) game.settings.register('challenge-tracker', 'scroll', { - name: game.i18n.localize('settings.scroll.name'), - hint: game.i18n.localize('settings.scroll.hint'), + name: game.i18n.localize('challengeTracker.settings.scroll.name'), + hint: game.i18n.localize('challengeTracker.settings.scroll.hint'), scope: 'client', config: true, type: Boolean, @@ -56,9 +56,9 @@ export class Settings { static initColorSettings () { new window.Ardittristan.ColorSetting('challenge-tracker', 'outerColor', { - name: game.i18n.localize('settings.outerColor.name'), - hint: game.i18n.localize('settings.outerColor.hint'), - label: game.i18n.localize('settings.outerColor.label'), + name: game.i18n.localize('challengeTracker.settings.outerColor.name'), + hint: game.i18n.localize('challengeTracker.settings.outerColor.hint'), + label: game.i18n.localize('challengeTracker.settings.outerColor.label'), scope: 'world', restricted: true, defaultColor: '#228B22', @@ -73,9 +73,9 @@ export class Settings { }) new window.Ardittristan.ColorSetting('challenge-tracker', 'innerColor', { - name: game.i18n.localize('settings.innerColor.name'), - hint: game.i18n.localize('settings.innerColor.hint'), - label: game.i18n.localize('settings.innerColor.label'), + name: game.i18n.localize('challengeTracker.settings.innerColor.name'), + hint: game.i18n.localize('challengeTracker.settings.innerColor.hint'), + label: game.i18n.localize('challengeTracker.settings.innerColor.label'), scope: 'world', restricted: true, defaultColor: '#DC0000', @@ -90,9 +90,9 @@ export class Settings { }) new window.Ardittristan.ColorSetting('challenge-tracker', 'frameColor', { - name: game.i18n.localize('settings.frameColor.name'), - hint: game.i18n.localize('settings.frameColor.hint'), - label: game.i18n.localize('settings.frameColor.label'), + name: game.i18n.localize('challengeTracker.settings.frameColor.name'), + hint: game.i18n.localize('challengeTracker.settings.frameColor.hint'), + label: game.i18n.localize('challengeTracker.settings.frameColor.label'), scope: 'world', restricted: true, defaultColor: '#0F1414', diff --git a/styles/challenge-tracker.css b/styles/challenge-tracker.css index 1fe6212..61abada 100644 --- a/styles/challenge-tracker.css +++ b/styles/challenge-tracker.css @@ -35,14 +35,100 @@ text-shadow: 0px 0px 2px #00000040, 0px 0px 10px #000000; } -.challenge-tracker.windowless:hover > .window-header{ +.challenge-tracker.windowless:hover > .window-header { visibility: visible; transition: visibility 0.2s ease-in; transition-delay: 0.5s; } -.challenge-tracker.windowless:not(:hover) > .window-header{ +.challenge-tracker.windowless:not(:hover) > .window-header { visibility: hidden; transition: visibility 0.2s ease-in; transition-delay: 0.1s; +} + +.challenge-tracker-player-list-button { + background: transparent; + border: 0; + padding: 0; + line-height: 0; + align-self: center; + width: 60px; + cursor: pointer; +} + +.challenge-tracker-player-list-button > svg { + color: var(--color-text-light-highlight); + width: auto; + height: var(--font-size-18); +} + +.challenge-tracker-player-list-button:hover, .challenge-tracker-player-list-button:focus { + overflow: visible; + box-shadow: none; + filter: drop-shadow(0px 0px 5px rgb(255 0 0 / 1)); +} + +#challenge-tracker-form { + width: auto !important; +} + +.challenge-tracker-form { + padding: 0 0.5em 0.5em 0; + margin-top: 0; + gap: 1em; + overflow: auto; + max-height: 300px +} + +.challenge-tracker-form > li { + align-items: center; + gap: 1em; + justify-content: space-between; + border-top: 1px solid rgba(0,0,0,.1); + padding-top: 0.5em; +} + +.challenge-tracker-form > li:first-child { + border: none; + padding-top: 0; +} + +.challenge-tracker-form-button-group { + display: flex; + justify-content: flex-start; + gap: 0.25em; + padding-top: 0.5em; +} + +.challenge-tracker-form-button-box { + border: 2px groove #eeede0; + padding: 3px; +} + +.challenge-tracker-button { + width: 70px; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +} + +.challenge-tracker-form-box { + border-top: 1px solid rgba(0,0,0,.1); + padding-top: 0.5em; +} + +.challenge-tracker-form-box:first-child { + border: 0; + padding-top: 0; +} + +.challenge-tracker-edit-form { + row-gap: 2px +} + +.challenge-tracker-submit-button { + margin: 0px; + margin-top: 2px; } \ No newline at end of file diff --git a/templates/challenge-tracker-edit-form.hbs b/templates/challenge-tracker-edit-form.hbs new file mode 100644 index 0000000..dc5a8fb --- /dev/null +++ b/templates/challenge-tracker-edit-form.hbs @@ -0,0 +1,66 @@ +{{#with challengeTracker}} +

    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +

    Outer Segments

    +
    + + +
    +
    + + +
    +
    + + {{#colorPicker name="outerColor" value=outerColor}}{{/colorPicker}} +
    +
    +
    +

    Inner Segments

    +
    + + +
    +
    + + +
    +
    + + {{#colorPicker name="innerColor" value=innerColor}}{{/colorPicker}} +
    +
    +
    +

    Frame

    +
    + + {{#colorPicker name="frameColor" value=frameColor}}{{/colorPicker}} +
    + +
    +
    + +
    + +{{/with}} \ No newline at end of file diff --git a/templates/challenge-tracker-form.hbs b/templates/challenge-tracker-form.hbs new file mode 100644 index 0000000..235c14b --- /dev/null +++ b/templates/challenge-tracker-form.hbs @@ -0,0 +1,32 @@ +
    +
      + {{#each challengeTrackerList}} +
    • +
      +
      + {{title}} +
      +
      + [{{outerCurrent}}/{{outerTotal}}]{{#ifEquals innerTotal 0}}{{else}} [{{innerCurrent}}/{{innerTotal}}]{{/ifEquals}} +
      +
      +
      + + + +
      +
    • + {{/each}} +
    + +
    \ No newline at end of file