From ee6b16fcd609a9a320385e2be1e3489f9df4491a Mon Sep 17 00:00:00 2001 From: Forien Date: Thu, 3 Oct 2024 13:52:25 +0200 Subject: [PATCH] update hooks for WFRP4e 8.1.0 --- CHANGELOG.md | 4 +- dist/modules/apps/ScrollDialog.mjs | 6 +- dist/modules/features/CastingFatigue.mjs | 29 +++- dist/modules/features/Grimoires.mjs | 8 +- dist/modules/features/Scrolls.mjs | 61 ++++++- dist/modules/tests/ScrollTest.mjs | 1 + dist/modules/utility/Utility.mjs | 12 ++ dist/styles/forien-armoury.css | 162 ++++++++++-------- dist/styles/forien-armoury.css.map | 2 +- .../actor-sheet-wfrp4e-magic-scrolls-v2.hbs | 33 ++++ src/styles/scss/forien-armoury.scss | 86 ++-------- .../scss/partials/magical-endurance.scss | 106 ++++++++++++ 12 files changed, 347 insertions(+), 163 deletions(-) create mode 100644 dist/templates/partials/actor-sheet-wfrp4e-magic-scrolls-v2.hbs create mode 100644 src/styles/scss/partials/magical-endurance.scss diff --git a/CHANGELOG.md b/CHANGELOG.md index 2657f71..e04e0c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,10 @@ ## v3.X.X -### v3.1.2 ? +### v3.2.0 * Fixed Grimoires not applying SourceId flag correctly, resulting in duplicating spells in very specific conditions +* Fixed spelling in Hooks registration after they have been renamed +* Added support for Character Sheet v2 introduced in WFRP4e 8.1.0 for Magical Endurance and Scrolls. ### v3.1.1 * Fixed multiple macros and features being broken due to renaming of Actor class from `ActorWfrp4e` to `ActorWFRP4e` diff --git a/dist/modules/apps/ScrollDialog.mjs b/dist/modules/apps/ScrollDialog.mjs index a90a882..4166092 100644 --- a/dist/modules/apps/ScrollDialog.mjs +++ b/dist/modules/apps/ScrollDialog.mjs @@ -38,7 +38,7 @@ export default class ScrollDialog extends CastDialog { data.scripts = data.scripts.concat(data.spell?.getScripts("dialog"), data.skill?.getScripts("dialog") || []) return new Promise(resolve => { - new this(fields, data, resolve, options).render(true); + new this(data, fields, options, resolve).render(true); }); } @@ -48,8 +48,8 @@ export default class ScrollDialog extends CastDialog { * @returns {{}} * @protected */ - _constructTestData() { - let data = super._constructTestData(); + _getSubmissionData() { + let data = super._getSubmissionData(); data.item = this.data.spell; data.scroll = this.data.scroll; diff --git a/dist/modules/features/CastingFatigue.mjs b/dist/modules/features/CastingFatigue.mjs index d8b273c..bbb14e4 100644 --- a/dist/modules/features/CastingFatigue.mjs +++ b/dist/modules/features/CastingFatigue.mjs @@ -19,8 +19,10 @@ export default class CastingFatigue extends ForienBaseModule { bindHooks() { Hooks.on("wfrp4e:rollChannelTest", this.#processRollChannelTest.bind(this)); Hooks.on("wfrp4e:rollCastTest", this.#processRollCastTest.bind(this)); - Hooks.on("renderActorSheetWfrp4eCharacter", this.#onRenderActorSheet.bind(this)); - Hooks.on("renderActorSheetWfrp4eNPC", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eCharacter", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eNPC", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eCharacterV2", this.#onRenderActorV2Sheet.bind(this)); + // Hooks.on("renderActorSheetWFRP4eNPCV2", this.#onRenderActorV2Sheet.bind(this)); Hooks.on("ready", this.#registerAutoRegenListeners.bind(this)); } @@ -55,7 +57,7 @@ export default class CastingFatigue extends ForienBaseModule { /** * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {jQuery} html * @param {{}} _options */ @@ -73,6 +75,27 @@ export default class CastingFatigue extends ForienBaseModule { }); } + /** + * + * @param {ActorSheetWFRP4e} sheet + * @param {HTMLElement} html + * @param {{}} _options + */ + #onRenderActorV2Sheet(sheet, html, _options) { + if (!this.magicalEnduranceEnabled) return; + + const tabMagic = html.querySelector('.tab[data-tab="magic"]'); + const actor = sheet.actor; + const magicalEndurance = this.getMagicalEnduranceData(actor); + + renderTemplate(Utility.getTemplate(this.templates.magicalEndurance), magicalEndurance).then(content => { + const child = Utility.stringToHTMLElement(content) + tabMagic.prepend(child); + + html.querySelector('#magical-endurance-value').addEventListener("change", (ev) => this.#onMagicalEnduranceValueChange(ev, actor)); + }); + } + /** * @param {Event} ev * @param {ActorWFRP4e} actor diff --git a/dist/modules/features/Grimoires.mjs b/dist/modules/features/Grimoires.mjs index 9557e5b..bf07ebf 100644 --- a/dist/modules/features/Grimoires.mjs +++ b/dist/modules/features/Grimoires.mjs @@ -10,14 +10,14 @@ export default class Grimoires extends ForienBaseModule { */ bindHooks() { Hooks.on("wfrp4e:constructInventory", this.#onWfrp4eConstructInventory.bind(this)); - Hooks.on("renderActorSheetWfrp4eCharacter", this.#onRenderActorSheet.bind(this)); - Hooks.on("renderActorSheetWfrp4eNPC", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eCharacter", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eNPC", this.#onRenderActorSheet.bind(this)); } /** * Add Scrolls to appropriate Inventory categories * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {{}} categories * @param {{}} collapsed */ @@ -43,7 +43,7 @@ export default class Grimoires extends ForienBaseModule { /** * Registers Grimoire-specific Event Listeners * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {jQuery} html * @param {{}} _options * diff --git a/dist/modules/features/Scrolls.mjs b/dist/modules/features/Scrolls.mjs index 41befdd..9aaf2cc 100644 --- a/dist/modules/features/Scrolls.mjs +++ b/dist/modules/features/Scrolls.mjs @@ -1,27 +1,28 @@ import ForienBaseModule from "../utility/ForienBaseModule.mjs"; import Utility from "../utility/Utility.mjs"; -import ScrollDialog from "../apps/ScrollDialog.mjs"; import ScrollTest from "../tests/ScrollTest.mjs"; import {dataTypes, settings} from "../constants.mjs"; export default class Scrolls extends ForienBaseModule { templates = { magicScrolls: 'partials/actor-sheet-wfrp4e-magic-scrolls.hbs', + magicScrollsV2: 'partials/actor-sheet-wfrp4e-magic-scrolls-v2.hbs', } /** * @inheritDoc */ bindHooks() { - Hooks.on("renderActorSheetWfrp4eCharacter", this.#onRenderActorSheet.bind(this)); - Hooks.on("renderActorSheetWfrp4eNPC", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eCharacter", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eNPC", this.#onRenderActorSheet.bind(this)); + Hooks.on("renderActorSheetWFRP4eCharacterV2", this.#onRenderActorSheetV2.bind(this)); Hooks.on("wfrp4e:constructInventory", this.#onWfrp4eConstructInventory.bind(this)); } /** * Add Scrolls to appropriate Inventory categories * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {{}} categories * @param {{}} collapsed */ @@ -44,7 +45,7 @@ export default class Scrolls extends ForienBaseModule { /** * Adds scrolls to Magic tab and registers Scroll-specific Event Listeners * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {jQuery} html * @param {{}} _options * @@ -70,10 +71,56 @@ export default class Scrolls extends ForienBaseModule { } } + /** + * Adds scrolls to Magic tab and registers Scroll-specific Event Listeners + * + * @param {ActorSheetWFRP4e} sheet + * @param {HTMLElement} html + * @param {{}} _options + * + * @returns {Promise} + */ + async #onRenderActorSheetV2(sheet, html, _options) { + const actor = sheet.actor; + const scrolls = actor.itemTypes[dataTypes.scroll]; + + const content = await renderTemplate(Utility.getTemplate(this.templates.magicScrollsV2), { + scrolls, + isOwner: sheet.document.isOwner, + dataType: dataTypes.scroll + }); + + const tabMagic = html.querySelector('.tab[data-tab="magic"]'); + tabMagic.append(Utility.stringToHTMLElement(content)); + + tabMagic.querySelectorAll(".scrolls .scroll-spell-link").forEach(element => { + element.addEventListener("click", (event) => this.#onScrollSpellLinkClick(event)) + }); + tabMagic.querySelectorAll(".scrolls .scroll-spell-cast").forEach(element => { + element.addEventListener("click", (event) => this.#onScrollSpellCastClick(sheet, event)) + }); + + tabMagic.querySelectorAll(".scrolls .rollable").forEach(element => { + element.addEventListener("mouseenter", ev => { + let img = ev.target.matches("img") ? ev.target : ev.target.querySelector("img"); + if (img) { + this._icon = img.src; + img.src = "systems/wfrp4e/ui/buttons/d10.webp"; + } + }) + element.addEventListener("mouseleave", ev => { + let img = ev.target.matches("img") ? ev.target : ev.target.querySelector("img"); + if (img) { + img.src = this._icon; + } + }) + }); + } + /** * When scroll is clicked to be used (for example by clicking on "Use Scroll" button), prepare the Test. * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {MouseEvent} event * * @returns {Promise} @@ -90,7 +137,7 @@ export default class Scrolls extends ForienBaseModule { /** * When Scroll is clicked directly on Magic tab, unveil the Item Summary (on right click) or use the scroll * - * @param {ActorSheetWfrp4e} sheet + * @param {ActorSheetWFRP4e} sheet * @param {MouseEvent} event * * @returns {Promise} diff --git a/dist/modules/tests/ScrollTest.mjs b/dist/modules/tests/ScrollTest.mjs index 2bc480f..4e654c2 100644 --- a/dist/modules/tests/ScrollTest.mjs +++ b/dist/modules/tests/ScrollTest.mjs @@ -75,6 +75,7 @@ export default class ScrollTest extends WomCastTest { #mapEffects(e) { let effect = foundry.utils.duplicate(e); effect.uuid = `${this.scroll.system.spellUuid}.ActiveEffect.${effect._id}`; + effect.actor = this.data.actor; return effect; } diff --git a/dist/modules/utility/Utility.mjs b/dist/modules/utility/Utility.mjs index 1af22e4..175cf38 100644 --- a/dist/modules/utility/Utility.mjs +++ b/dist/modules/utility/Utility.mjs @@ -109,4 +109,16 @@ export default class Utility { static getSetting(setting) { return game.settings.get(constants.moduleId, setting); } + + /** + * Converts a string representing a HTML containing a single top level node to ChildNode. + * + * @param {string} string + * @returns {ChildNode} + */ + static stringToHTMLElement(string) { + const element = document.createElement('template'); + element.innerHTML = string.trim(); + return element.content.firstChild; + } } \ No newline at end of file diff --git a/dist/styles/forien-armoury.css b/dist/styles/forien-armoury.css index da582e9..618165e 100644 --- a/dist/styles/forien-armoury.css +++ b/dist/styles/forien-armoury.css @@ -191,6 +191,100 @@ align-items: center; } +.app.window-app .forien-armoury.magical-endurance-header .label { + font-family: CaslonAntique, serif; + font-weight: 700; + font-size: var(--font-size-16); + color: rgba(70, 67, 49, 0.768627451); + border: 1px solid rgba(115, 105, 83, 0.6509803922); +} +.app.window-app .forien-armoury.magical-endurance-header .label.value { + color: #222; +} +.app.window-app .forien-armoury.magical-endurance-header .input { + border: 1px solid rgba(115, 105, 83, 0.6509803922); + border-left: none; + border-right: none; +} +.app.window-app .forien-armoury.magical-endurance-header .input input { + font-family: CaslonAntique, serif; + font-weight: 500; + font-size: var(--font-size-16); + color: #111; +} + +.forien-armoury.magical-endurance-header { + display: flex; + flex-direction: row; + margin-bottom: 6px; + height: 25px; +} +.forien-armoury.magical-endurance-header .magical-endurance-box { + display: flex; + flex-direction: row; + margin-right: 6px; + flex: 4; +} +.forien-armoury.magical-endurance-header .magical-endurance-box:last-of-type { + margin-right: 0; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .label { + text-align: center; + border: 1px solid var(--list-header-border); + margin: 0; + height: inherit; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3215686275) inset; + padding: 3px 0 0; + width: 70px; + flex: 3; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .label:not(.value):not(.divide) { + background-color: var(--list-header); +} +.forien-armoury.magical-endurance-header .magical-endurance-box .label.unit { + flex: 1; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .label.divide { + box-shadow: none; + border-left: none; + border-right: none; + flex: 0; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .label.value { + box-shadow: none; + border-left: none; + flex: 1; + font-weight: 500; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .input { + text-align: center; + border: 1px solid var(--list-header-border); + border-left: none; + border-right: none; + margin: 0; + padding: 0; + height: inherit; + flex: 1; +} +.forien-armoury.magical-endurance-header .magical-endurance-box .input input { + text-align: center; + margin: 0; + padding: 3px 0 0 0; + height: 23px; + width: 100%; + background: none; + display: inline-block; +} + +.wfrp4e.sheet.application .rollable:hover > img:after { + display: block; + position: absolute; + top: 0; + left: 0; + content: " "; + background-image: url("/systems/wfrp4e/ui/buttons/d10.webp"); +} + .forien-armoury { /** * Select Item Dialog @@ -307,74 +401,6 @@ font-weight: bold; box-shadow: 0 0 20px 0 #b79756, inset 0 0 20px 0 #b79756; } -.forien-armoury.magical-endurance-header { - display: flex; - flex-direction: row; - margin-bottom: 6px; - height: 25px; -} -.forien-armoury.magical-endurance-header .magical-endurance-box { - display: flex; - flex-direction: row; - margin-right: 6px; - flex: 4; -} -.forien-armoury.magical-endurance-header .magical-endurance-box:last-of-type { - margin-right: 0; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .label { - font-family: CaslonAntique, serif; - font-weight: 700; - font-size: var(--font-size-16); - color: rgba(70, 67, 49, 0.768627451); - text-align: center; - border: 1px solid rgba(115, 105, 83, 0.6509803922); - margin: 0; - height: inherit; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3215686275) inset; - padding: 3px 0 0; - width: 70px; - flex: 3; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .label.unit { - flex: 1; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .label.divide { - box-shadow: none; - border-left: none; - border-right: none; - flex: 0; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .label.value { - box-shadow: none; - border-left: none; - flex: 1; - color: #222; - font-weight: 500; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .input { - text-align: center; - border: 1px solid rgba(115, 105, 83, 0.6509803922); - border-left: none; - border-right: none; - margin: 0; - padding: 0; - height: inherit; - flex: 1; -} -.forien-armoury.magical-endurance-header .magical-endurance-box .input input { - text-align: center; - margin: 0; - padding: 3px 0 0 0; - height: 23px; - width: 100%; - background: none; - font-family: CaslonAntique, serif; - font-weight: 500; - font-size: var(--font-size-16); - display: inline-block; - color: #111; -} .app.window-app.sheet.wfrp4e.actor .tab.inventory .inventory-list.scrolls .scroll-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.inventory .inventory-list.scrolls .grimoire-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.inventory .inventory-list .scroll-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.inventory .inventory-list .grimoire-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.magic .inventory-list.scrolls .scroll-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.magic .inventory-list.scrolls .grimoire-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.magic .inventory-list .scroll-spell-link, .app.window-app.sheet.wfrp4e.actor .tab.magic .inventory-list .grimoire-spell-link { font-weight: bold; diff --git a/dist/styles/forien-armoury.css.map b/dist/styles/forien-armoury.css.map index e9112e6..4c56e18 100644 --- a/dist/styles/forien-armoury.css.map +++ b/dist/styles/forien-armoury.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../src/styles/scss/partials/settings-app.scss","../../src/styles/scss/partials/custom-item-sheets.scss","../../src/styles/scss/mixins/square.scss","../../src/styles/scss/mixins/blur.scss","../../src/styles/scss/forien-armoury.scss"],"names":[],"mappings":"AAME;EACE;EACA;;AAEA;EACE;EACA;;AAGA;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA,kBAvBW;EAwBX;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE,cApFS;;AAyFf;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAMJ;EACE;;;ACxHN;EACE;;AAOU;EACE;;AAGF;EACE;EACA;;AAEA;ECpBhB,ODqBkC;ECpBlC,QDoBkC;;AAGlB;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAQF;EC9DlB,OD+DoC;EC9DpC,QD8DoC;;AAGlB;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAIJ;EACE;;AAMA;EErGpB;;AFwGoB;EExGpB;;AF+Gc;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AGtHlB;AAmHE;AAAA;AAAA;;AAlHA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EFfF,OEgBoB;EFfpB,QEeoB;;AAGlB;EACE;EACA;;AAIJ;EACE;;AAEA;EACE;;AAOF;EACE;;AAGF;EAEE;;AAEA;EAEE;;AAEA;EACE;EACA;;AAGF;EAIE;EACA;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AASF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EFzIJ,OE0IsB;EFzItB,QEyIsB;EAChB;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUJ;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUF;EACE;;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"forien-armoury.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../src/styles/scss/partials/settings-app.scss","../../src/styles/scss/partials/custom-item-sheets.scss","../../src/styles/scss/mixins/square.scss","../../src/styles/scss/mixins/blur.scss","../../src/styles/scss/partials/magical-endurance.scss","../../src/styles/scss/forien-armoury.scss"],"names":[],"mappings":"AAME;EACE;EACA;;AAEA;EACE;EACA;;AAGA;EACE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA,kBAvBW;EAwBX;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE,cApFS;;AAyFf;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAMJ;EACE;;;ACxHN;EACE;;AAOU;EACE;;AAGF;EACE;EACA;;AAEA;ECpBhB,ODqBkC;ECpBlC,QDoBkC;;AAGlB;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAQF;EC9DlB,OD+DoC;EC9DpC,QD8DoC;;AAGlB;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAIJ;EACE;;AAMA;EErGpB;;AFwGoB;EExGpB;;AF+Gc;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AGvHZ;EACE;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAQR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AC9FV;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAmHE;AAAA;AAAA;;AAlHA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EHzBF,OG0BoB;EHzBpB,QGyBoB;;AAGlB;EACE;EACA;;AAIJ;EACE;;AAEA;EACE;;AAOF;EACE;;AAGF;EAEE;;AAEA;EAEE;;AAEA;EACE;EACA;;AAGF;EAIE;EACA;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;;AASF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EHnJJ,OGoJsB;EHnJtB,QGmJsB;EAChB;;AAGF;EACE;EACA;EACA;;AAIJ;EACE;EACA;;;AAUA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUF;EACE;;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","file":"forien-armoury.css"} \ No newline at end of file diff --git a/dist/templates/partials/actor-sheet-wfrp4e-magic-scrolls-v2.hbs b/dist/templates/partials/actor-sheet-wfrp4e-magic-scrolls-v2.hbs new file mode 100644 index 0000000..59b25e4 --- /dev/null +++ b/dist/templates/partials/actor-sheet-wfrp4e-magic-scrolls-v2.hbs @@ -0,0 +1,33 @@ +
+
+
+ {{localize "Forien.Armoury.Scrolls.Scrolls"}} +
+
+ + + +
+
+
+ {{#each scrolls as |item i|}} +
+
+ + +
+ +
+
+ + {{> sheetButtons document=this}} + +
+ {{/each}} +
+
\ No newline at end of file diff --git a/src/styles/scss/forien-armoury.scss b/src/styles/scss/forien-armoury.scss index 797479f..514bec0 100644 --- a/src/styles/scss/forien-armoury.scss +++ b/src/styles/scss/forien-armoury.scss @@ -1,8 +1,18 @@ @import "mixins/square"; @import "partials/settings-app"; @import "partials/custom-item-sheets"; +@import "partials/magical-endurance"; +.wfrp4e.sheet.application .rollable:hover > img:after { + display: block; + position: absolute; + top:0; + left:0; + content: " "; + background-image: url("/systems/wfrp4e/ui/buttons/d10.webp"); +} + .forien-armoury { .forien-armoury-hr { border-bottom: 1px solid var(--color-border-light-highlight); @@ -155,82 +165,6 @@ } - &.magical-endurance-header { - display: flex; - flex-direction: row; - margin-bottom: 6px; - height: 25px; - - .magical-endurance-box { - display: flex; - flex-direction: row; - margin-right: 6px; - flex: 4; - - &:last-of-type { - margin-right: 0; - } - - .label { - font-family: CaslonAntique, serif; - font-weight: 700; - font-size: var(--font-size-16); - color: #464331c4; - text-align: center; - border: 1px solid #736953a6; - margin: 0; - height: inherit; - box-shadow: 0 0 10px #00000052 inset; - padding: 3px 0 0; - width: 70px; - flex: 3; - - &.unit { - flex: 1; - } - - &.divide { - box-shadow: none; - border-left: none; - border-right: none; - flex: 0; - } - - &.value { - box-shadow: none; - border-left: none; - flex: 1; - color: #222; - font-weight: 500; - } - } - - .input { - text-align: center; - border: 1px solid #736953a6; - border-left: none; - border-right: none; - margin: 0; - padding: 0; - height: inherit; - flex: 1; - - input { - text-align: center; - margin: 0; - padding: 3px 0 0 0; - height: 23px; - width: 100%; - background: none; - font-family: CaslonAntique, serif; - font-weight: 500; - font-size: var(--font-size-16); - display: inline-block; - color: #111; - } - } - } - } } .app.window-app.sheet.wfrp4e.actor { diff --git a/src/styles/scss/partials/magical-endurance.scss b/src/styles/scss/partials/magical-endurance.scss new file mode 100644 index 0000000..8516a85 --- /dev/null +++ b/src/styles/scss/partials/magical-endurance.scss @@ -0,0 +1,106 @@ +// App v1 compatibility +.app.window-app { + .forien-armoury { + &.magical-endurance-header { + .label { + font-family: CaslonAntique, serif; + font-weight: 700; + font-size: var(--font-size-16); + color: #464331c4; + border: 1px solid #736953a6; + + + &.value { + color: #222; + } + } + + .input { + border: 1px solid #736953a6; + border-left: none; + border-right: none; + + input { + font-family: CaslonAntique, serif; + font-weight: 500; + font-size: var(--font-size-16); + color: #111; + } + } + } + } +} + +.forien-armoury { + &.magical-endurance-header { + display: flex; + flex-direction: row; + margin-bottom: 6px; + height: 25px; + + .magical-endurance-box { + display: flex; + flex-direction: row; + margin-right: 6px; + flex: 4; + + &:last-of-type { + margin-right: 0; + } + + .label { + text-align: center; + border: 1px solid var(--list-header-border); + margin: 0; + height: inherit; + box-shadow: 0 0 10px #00000052 inset; + padding: 3px 0 0; + width: 70px; + flex: 3; + + &:not(.value):not(.divide) { + background-color: var(--list-header); + } + + &.unit { + flex: 1; + } + + &.divide { + box-shadow: none; + border-left: none; + border-right: none; + flex: 0; + } + + &.value { + box-shadow: none; + border-left: none; + flex: 1; + font-weight: 500; + } + } + + .input { + text-align: center; + border: 1px solid var(--list-header-border); + border-left: none; + border-right: none; + margin: 0; + padding: 0; + height: inherit; + flex: 1; + + input { + text-align: center; + margin: 0; + padding: 3px 0 0 0; + height: 23px; + width: 100%; + background: none; + display: inline-block; + } + } + } + } +} \ No newline at end of file