diff --git a/module/actor.js b/module/actor.js index acaee33..034b26a 100644 --- a/module/actor.js +++ b/module/actor.js @@ -21,6 +21,16 @@ export class SimpleActor extends Actor { return EntitySheetHelper.createDialog.call(this, data, options); } + /* -------------------------------------------- */ + + /** + * Is this Actor used as a template for other Actors? + * @type {boolean} + */ + get isTemplate() { + return !!this.getFlag("worldbuilding", "isTemplate"); + } + /* -------------------------------------------- */ /* Roll Data Preparation */ /* -------------------------------------------- */ diff --git a/module/item.js b/module/item.js index 5cfb6a8..99fb5a0 100644 --- a/module/item.js +++ b/module/item.js @@ -20,4 +20,14 @@ export class SimpleItem extends Item { static async createDialog(data={}, options={}) { return EntitySheetHelper.createDialog.call(this, data, options); } + + /* -------------------------------------------- */ + + /** + * Is this Item used as a template for other Items? + * @type {boolean} + */ + get isTemplate() { + return !!this.getFlag("worldbuilding", "isTemplate"); + } } diff --git a/module/simple.js b/module/simple.js index 59b663c..6ffff4d 100644 --- a/module/simple.js +++ b/module/simple.js @@ -115,7 +115,7 @@ Hooks.on("getActorDirectoryEntryContext", (html, options) => { icon: '', condition: li => { const actor = game.actors.get(li.data(idAttr)); - return !actor.getFlag("worldbuilding", "isTemplate"); + return !actor.isTemplate; }, callback: li => { const actor = game.actors.get(li.data(idAttr)); @@ -129,7 +129,7 @@ Hooks.on("getActorDirectoryEntryContext", (html, options) => { icon: '', condition: li => { const actor = game.actors.get(li.data(idAttr)); - return actor.getFlag("worldbuilding", "isTemplate"); + return actor.isTemplate; }, callback: li => { const actor = game.actors.get(li.data(idAttr)); @@ -149,7 +149,7 @@ Hooks.on("getItemDirectoryEntryContext", (html, options) => { icon: '', condition: li => { const item = game.items.get(li.data(idAttr)); - return !item.getFlag("worldbuilding", "isTemplate"); + return !item.isTemplate; }, callback: li => { const item = game.items.get(li.data(idAttr)); @@ -163,7 +163,7 @@ Hooks.on("getItemDirectoryEntryContext", (html, options) => { icon: '', condition: li => { const item = game.items.get(li.data(idAttr)); - return item.getFlag("worldbuilding", "isTemplate"); + return item.isTemplate; }, callback: li => { const item = game.items.get(li.data(idAttr)); diff --git a/module/simpletokendocument.js b/module/simpletokendocument.js deleted file mode 100644 index dd63f65..0000000 --- a/module/simpletokendocument.js +++ /dev/null @@ -1,11 +0,0 @@ -export class SimpleTokenDocument extends TokenDocument { - - /** @inheritdoc */ - getBarAttribute(barName, {alternative}={}) { - const attr = super.getBarAttribute(barName, {alternative}); - if ( attr === null ) return null; - attr.editable = true; // Attribute always editable, super requires attr to exist in actor template - return attr; - } - -} \ No newline at end of file diff --git a/module/token.js b/module/token.js index 220826b..aca893a 100644 --- a/module/token.js +++ b/module/token.js @@ -1,10 +1,10 @@ /** - * Extend the base TokenDocument to allow resource to support resource type attributes. + * Extend the base TokenDocument to support resource type attributes. * @extends {TokenDocument} */ export class SimpleTokenDocument extends TokenDocument { /** @inheritdoc */ - getBarAttribute(barName, {alternative}={}) { + getBarAttribute(barName, {alternative}={}) { const data = super.getBarAttribute(barName, {alternative}); const attr = alternative || this.data[barName]?.attribute; if ( !data || !attr || !this.actor ) return data; @@ -13,6 +13,20 @@ export class SimpleTokenDocument extends TokenDocument { data.editable = true; return data; } + + /* -------------------------------------------- */ + + static getTrackedAttributes(data, _path=[]) { + if ( data || _path.length ) return super.getTrackedAttributes(data, _path); + data = {}; + for ( const model of Object.values(game.system.model.Actor) ) { + foundry.utils.mergeObject(data, model); + } + for ( const actor of game.actors ) { + if ( actor.isTemplate ) foundry.utils.mergeObject(data, actor.toObject().data); + } + return super.getTrackedAttributes(data); + } }