update summon cost application to use compendium
This commit is contained in:
parent
0153896eeb
commit
59f9022e43
@ -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];
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user