add actor folder helpers

This commit is contained in:
Mike Bloy 2023-03-04 23:35:02 -06:00
parent 30b489e397
commit 04b9c21ea8
2 changed files with 44 additions and 2 deletions

View File

@ -9,10 +9,12 @@ export class api {
static globals () { static globals () {
globalThis.swadeMBHelpers = { globalThis.swadeMBHelpers = {
DEBUG: true, DEBUG: true,
runOnTargetOrSelectedTokens: helpers.runOnTargetOrSelectedTokens,
createEffectDocument: helpers.createEffectDocument, createEffectDocument: helpers.createEffectDocument,
createMutationWithEffect: helpers.createMutationWithEffect, createMutationWithEffect: helpers.createMutationWithEffect,
defaultMutationOptions: helpers.defaultMutationOptions defaultMutationOptions: helpers.defaultMutationOptions,
getActorFolderByPath: helpers.getActorFolderByPath,
getActorsInFolder: helpers.getActorsInFolder,
runOnTargetOrSelectedTokens: helpers.runOnTargetOrSelectedTokens
} }
} }
} }

View File

@ -49,4 +49,44 @@ export class helpers {
} }
return mutateOptions return mutateOptions
} }
static getActorFolderByPath (path) {
const names = path.split('/')
if (names[0] === '') {
names.shift()
}
let name = names.shift()
let folder = game.folders.find(f => f.name === name && !f.folder)
while (names.length > 0) {
name = names.shift()
folder = folder.children.find(c => c.folder.name === name)
folder = folder.folder
}
return folder
}
static getActorsInFolder (inFolder) {
const prefixStack = ['']
const actors = {}
const folderStack = [inFolder]
while (folderStack.length > 0) {
const prefix = prefixStack.shift()
const folder = folderStack.shift()
for (const actor of folder.contents) {
if (
game.user.isGM || actor.testUserPermission(
game.user, foundry.CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER)
) {
actors[`${prefix}${actor.name}`] = actor
}
}
for (const child of folder.children) {
const newPrefix = `${prefix}${child.folder.name} | `
prefixStack.push(newPrefix)
folderStack.push(child.folder)
}
}
return actors
}
} }