From 59f9022e4352a42f320445467f0ee4bc0368edb6 Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sun, 8 Jun 2025 23:07:08 -0500 Subject: [PATCH] update summon cost application to use compendium --- src/module/powers/basePowers.js | 26 ++++++++++++-------------- src/module/powers/summon.js | 6 +++--- src/module/powers/summonSupport.js | 16 +++++++++++----- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/module/powers/basePowers.js b/src/module/powers/basePowers.js index 478a145..97a28c6 100644 --- a/src/module/powers/basePowers.js +++ b/src/module/powers/basePowers.js @@ -788,20 +788,18 @@ export class PowerEffect { export class ActorFolderEffect extends PowerEffect { async init() { await super.init(); - this.packActors = await this.actorFolderPack.getIndex({ fields: ['system.stats.size'] }); + const extraFields = ['system.stats.size', 'flags.swade-mb-helpers.summonData']; + this.packActors = await ActorFolderEffect.actorFolderPack.getIndex({ fields: extraFields }); this.data.actors = this.prepActors(); } - get actorFolderPackId() { - return moduleHelpers.getSetting(settingKeys.powerActorsCompendium); - } - get actorFolderBase() { return ''; } - get actorFolderPack() { - const pack = game.packs.get(this.actorFolderPackId); + static get actorFolderPack() { + const packId = moduleHelpers.getSetting(settingKeys.powerActorsCompendium); + const pack = game.packs.get(packId); if (!pack) { return undefined; } @@ -814,16 +812,16 @@ export class ActorFolderEffect extends PowerEffect { return `${this.actorFolderBase}/${this.name}`; } - getPackFolderByPath(path) { + static getPackFolderByPath(path) { const names = path.split('/'); if (names[0] === '') { names.shift(); } let name = names.shift(); - if (!this.actorFolderPack) { + if (!ActorFolderEffect.actorFolderPack) { return undefined; } - let folder = this.actorFolderPack.folders + let folder = ActorFolderEffect.actorFolderPack.folders .filter((f) => f.type === 'Actor' && !f.folder) .find((f) => f.name === name); if (!folder) { @@ -840,14 +838,14 @@ export class ActorFolderEffect extends PowerEffect { return folder; } - getPackActorsInFolder(inFolder) { + static getPackActorsInFolder(inFolder) { const prefixStack = ['']; const actors = {}; const folderStack = [inFolder]; while (folderStack.length > 0) { const prefix = prefixStack.shift(); const folder = folderStack.shift(); - for (const actor of this.packActors.filter((pa) => pa.folder === folder.id)) { + for (const actor of folder.contents) { actors[`${prefix}${actor.name}`] = actor; } for (const child of folder.children) { @@ -871,7 +869,7 @@ export class ActorFolderEffect extends PowerEffect { `${this.actorFolder}/${this.source.actor.name}`, ]; for (const folderName of folderNames) { - const folder = this.getPackFolderByPath(folderName); + const folder = ActorFolderEffect.getPackFolderByPath(folderName); if (folder) { log(`Found actor folder ${folderName}`); folders.push(folder); @@ -887,7 +885,7 @@ export class ActorFolderEffect extends PowerEffect { const folders = this.prepFolders(); const actors = {}; for (const folder of folders) { - const folderActors = this.getPackActorsInFolder(folder); + const folderActors = ActorFolderEffect.getPackActorsInFolder(folder); for (const key in folderActors) { actors[key] = folderActors[key]; } diff --git a/src/module/powers/summon.js b/src/module/powers/summon.js index c9e112d..9badb05 100644 --- a/src/module/powers/summon.js +++ b/src/module/powers/summon.js @@ -3,7 +3,7 @@ import { BaseSummonEffect } from './summonSupport.js'; class BaseAllyEffect extends BaseSummonEffect { get actorFolder() { - return 'Creatures'; + return `${this.actorFolderBase}/Creatures`; } get basePowerPoints() { @@ -85,7 +85,7 @@ class BaseAllyEffect extends BaseSummonEffect { const newActors = {}; for (const key of Object.keys(actors)) { const actor = actors[key]; - const summon = actor.getFlag(moduleName, 'summonData'); + const summon = actor.flags?.['swade-mb-helpers']?.summonData; if (summon?.powers?.[this.name]) { newActors[key] = actor; } @@ -94,7 +94,7 @@ class BaseAllyEffect extends BaseSummonEffect { } actorValue(actor) { - const summon = actor.getFlag(moduleName, 'summonData'); + const summon = actor.flags?.['swade-mb-helpers']?.summonData; return summon?.cost ?? 0; } diff --git a/src/module/powers/summonSupport.js b/src/module/powers/summonSupport.js index d4401c7..322d8d7 100644 --- a/src/module/powers/summonSupport.js +++ b/src/module/powers/summonSupport.js @@ -1,5 +1,5 @@ /* globals Sequencer */ -import { log, moduleHelpers, moduleName } from '../globals.js'; +import { log, moduleHelpers, moduleName, settingKeys } from '../globals.js'; import { templates } from '../preloadTemplates.js'; import { ActorFolderEffect } from './basePowers.js'; @@ -71,7 +71,7 @@ export class SummonCostApplication extends FormApplication { static get defaultOptions() { return foundry.utils.mergeObject(super.defaultOptions, { - classes: ['sheet', 'mbSwadeForm', 'mbSwadeSummonCostForm'], + classes: ['sheet', 'mbSwade', 'mbSwadeForm', 'mbSwadeSummonCostForm'], popOut: true, template: templates['summonCosts.html'], id: ['mbSwadeSummonCostFormApplication'], @@ -148,14 +148,20 @@ export class SummonCostApplication extends FormApplication { } } -export function setSummonCosts(powers = [], folderName = null) { +export async function setSummonCosts(powers = [], folderName = null) { if (!folderName) { folderName = 'Summonables/Creatures'; } - const folder = moduleHelpers.getActorFolderByPath(folderName); + const folder = ActorFolderEffect.getPackFolderByPath(folderName); if (!folder) { log(`ERROR: Could not find folder ${folderName}`); } - const actors = moduleHelpers.getActorsInFolder(folder); + const indexActors = ActorFolderEffect.getPackActorsInFolder(folder); + const actors = {}; + const promises = []; + for (const actorName in indexActors) { + promises.push(foundry.utils.fromUuid(indexActors[actorName].uuid).then((result) => (actors[actorName] = result))); + } + await Promise.all(promises); new SummonCostApplication(actors, powers).render(true); }