update summon cost application to use compendium

This commit is contained in:
Mike Bloy 2025-06-08 23:07:08 -05:00
parent 0153896eeb
commit 59f9022e43
3 changed files with 26 additions and 22 deletions

View File

@ -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];
}

View File

@ -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;
}

View File

@ -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);
}