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