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 {
|
export class ActorFolderEffect extends PowerEffect {
|
||||||
async init() {
|
async init() {
|
||||||
await super.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();
|
this.data.actors = this.prepActors();
|
||||||
}
|
}
|
||||||
|
|
||||||
get actorFolderPackId() {
|
|
||||||
return moduleHelpers.getSetting(settingKeys.powerActorsCompendium);
|
|
||||||
}
|
|
||||||
|
|
||||||
get actorFolderBase() {
|
get actorFolderBase() {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
get actorFolderPack() {
|
static get actorFolderPack() {
|
||||||
const pack = game.packs.get(this.actorFolderPackId);
|
const packId = moduleHelpers.getSetting(settingKeys.powerActorsCompendium);
|
||||||
|
const pack = game.packs.get(packId);
|
||||||
if (!pack) {
|
if (!pack) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@ -814,16 +812,16 @@ export class ActorFolderEffect extends PowerEffect {
|
|||||||
return `${this.actorFolderBase}/${this.name}`;
|
return `${this.actorFolderBase}/${this.name}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
getPackFolderByPath(path) {
|
static getPackFolderByPath(path) {
|
||||||
const names = path.split('/');
|
const names = path.split('/');
|
||||||
if (names[0] === '') {
|
if (names[0] === '') {
|
||||||
names.shift();
|
names.shift();
|
||||||
}
|
}
|
||||||
let name = names.shift();
|
let name = names.shift();
|
||||||
if (!this.actorFolderPack) {
|
if (!ActorFolderEffect.actorFolderPack) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
let folder = this.actorFolderPack.folders
|
let folder = ActorFolderEffect.actorFolderPack.folders
|
||||||
.filter((f) => f.type === 'Actor' && !f.folder)
|
.filter((f) => f.type === 'Actor' && !f.folder)
|
||||||
.find((f) => f.name === name);
|
.find((f) => f.name === name);
|
||||||
if (!folder) {
|
if (!folder) {
|
||||||
@ -840,14 +838,14 @@ export class ActorFolderEffect extends PowerEffect {
|
|||||||
return folder;
|
return folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
getPackActorsInFolder(inFolder) {
|
static getPackActorsInFolder(inFolder) {
|
||||||
const prefixStack = [''];
|
const prefixStack = [''];
|
||||||
const actors = {};
|
const actors = {};
|
||||||
const folderStack = [inFolder];
|
const folderStack = [inFolder];
|
||||||
while (folderStack.length > 0) {
|
while (folderStack.length > 0) {
|
||||||
const prefix = prefixStack.shift();
|
const prefix = prefixStack.shift();
|
||||||
const folder = folderStack.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;
|
actors[`${prefix}${actor.name}`] = actor;
|
||||||
}
|
}
|
||||||
for (const child of folder.children) {
|
for (const child of folder.children) {
|
||||||
@ -871,7 +869,7 @@ export class ActorFolderEffect extends PowerEffect {
|
|||||||
`${this.actorFolder}/${this.source.actor.name}`,
|
`${this.actorFolder}/${this.source.actor.name}`,
|
||||||
];
|
];
|
||||||
for (const folderName of folderNames) {
|
for (const folderName of folderNames) {
|
||||||
const folder = this.getPackFolderByPath(folderName);
|
const folder = ActorFolderEffect.getPackFolderByPath(folderName);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
log(`Found actor folder ${folderName}`);
|
log(`Found actor folder ${folderName}`);
|
||||||
folders.push(folder);
|
folders.push(folder);
|
||||||
@ -887,7 +885,7 @@ export class ActorFolderEffect extends PowerEffect {
|
|||||||
const folders = this.prepFolders();
|
const folders = this.prepFolders();
|
||||||
const actors = {};
|
const actors = {};
|
||||||
for (const folder of folders) {
|
for (const folder of folders) {
|
||||||
const folderActors = this.getPackActorsInFolder(folder);
|
const folderActors = ActorFolderEffect.getPackActorsInFolder(folder);
|
||||||
for (const key in folderActors) {
|
for (const key in folderActors) {
|
||||||
actors[key] = folderActors[key];
|
actors[key] = folderActors[key];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { BaseSummonEffect } from './summonSupport.js';
|
|||||||
|
|
||||||
class BaseAllyEffect extends BaseSummonEffect {
|
class BaseAllyEffect extends BaseSummonEffect {
|
||||||
get actorFolder() {
|
get actorFolder() {
|
||||||
return 'Creatures';
|
return `${this.actorFolderBase}/Creatures`;
|
||||||
}
|
}
|
||||||
|
|
||||||
get basePowerPoints() {
|
get basePowerPoints() {
|
||||||
@ -85,7 +85,7 @@ class BaseAllyEffect extends BaseSummonEffect {
|
|||||||
const newActors = {};
|
const newActors = {};
|
||||||
for (const key of Object.keys(actors)) {
|
for (const key of Object.keys(actors)) {
|
||||||
const actor = actors[key];
|
const actor = actors[key];
|
||||||
const summon = actor.getFlag(moduleName, 'summonData');
|
const summon = actor.flags?.['swade-mb-helpers']?.summonData;
|
||||||
if (summon?.powers?.[this.name]) {
|
if (summon?.powers?.[this.name]) {
|
||||||
newActors[key] = actor;
|
newActors[key] = actor;
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ class BaseAllyEffect extends BaseSummonEffect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
actorValue(actor) {
|
actorValue(actor) {
|
||||||
const summon = actor.getFlag(moduleName, 'summonData');
|
const summon = actor.flags?.['swade-mb-helpers']?.summonData;
|
||||||
return summon?.cost ?? 0;
|
return summon?.cost ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/* globals Sequencer */
|
/* globals Sequencer */
|
||||||
import { log, moduleHelpers, moduleName } from '../globals.js';
|
import { log, moduleHelpers, moduleName, settingKeys } from '../globals.js';
|
||||||
import { templates } from '../preloadTemplates.js';
|
import { templates } from '../preloadTemplates.js';
|
||||||
import { ActorFolderEffect } from './basePowers.js';
|
import { ActorFolderEffect } from './basePowers.js';
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ export class SummonCostApplication extends FormApplication {
|
|||||||
|
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||||
classes: ['sheet', 'mbSwadeForm', 'mbSwadeSummonCostForm'],
|
classes: ['sheet', 'mbSwade', 'mbSwadeForm', 'mbSwadeSummonCostForm'],
|
||||||
popOut: true,
|
popOut: true,
|
||||||
template: templates['summonCosts.html'],
|
template: templates['summonCosts.html'],
|
||||||
id: ['mbSwadeSummonCostFormApplication'],
|
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) {
|
if (!folderName) {
|
||||||
folderName = 'Summonables/Creatures';
|
folderName = 'Summonables/Creatures';
|
||||||
}
|
}
|
||||||
const folder = moduleHelpers.getActorFolderByPath(folderName);
|
const folder = ActorFolderEffect.getPackFolderByPath(folderName);
|
||||||
if (!folder) {
|
if (!folder) {
|
||||||
log(`ERROR: Could not find folder ${folderName}`);
|
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);
|
new SummonCostApplication(actors, powers).render(true);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user