From 1129ff57a9c54b1f25cdc46b16dd75c7baf5f818 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Mon, 9 Jun 2025 14:53:06 +0200 Subject: [PATCH] Added a basic BaseDataActor data model --- lang/en.json | 1 - module/data/_module.mjs | 4 +-- module/data/{ => actor}/adversary.mjs | 12 +++++++-- module/data/actor/base.mjs | 34 +++++++++++++++++++++++++ module/data/{ => actor}/character.mjs | 17 +++++++++---- module/data/{ => actor}/environment.mjs | 11 ++++++-- 6 files changed, 67 insertions(+), 12 deletions(-) rename module/data/{ => actor}/adversary.mjs (90%) create mode 100644 module/data/actor/base.mjs rename module/data/{ => actor}/character.mjs (95%) rename module/data/{ => actor}/environment.mjs (79%) diff --git a/lang/en.json b/lang/en.json index a843e2c6..363a4e63 100755 --- a/lang/en.json +++ b/lang/en.json @@ -14,7 +14,6 @@ }, "Actor": { "character": "Character", - "npc": "NPC", "adversary": "Adversary", "environment": "Environment" } diff --git a/module/data/_module.mjs b/module/data/_module.mjs index 85dae6dd..44ff4006 100644 --- a/module/data/_module.mjs +++ b/module/data/_module.mjs @@ -1,9 +1,9 @@ -export { default as DhCharacter } from './character.mjs'; +export { default as DhCharacter } from './actor/character.mjs'; export { default as DhClass } from './item/class.mjs'; export { default as DhSubclass } from './item/subclass.mjs'; export { default as DhCombat } from './combat.mjs'; export { default as DhCombatant } from './combatant.mjs'; -export { default as DhpAdversary } from './adversary.mjs'; +export { default as DhpAdversary } from './actor/adversary.mjs'; export { default as DhpEnvironment } from './environment.mjs'; export * as items from './item/_module.mjs'; diff --git a/module/data/adversary.mjs b/module/data/actor/adversary.mjs similarity index 90% rename from module/data/adversary.mjs rename to module/data/actor/adversary.mjs index 7e4c28f1..834c5f17 100644 --- a/module/data/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -1,12 +1,21 @@ +import BaseDataActor from './base.mjs'; + const resourceField = () => new foundry.data.fields.SchemaField({ value: new foundry.data.fields.NumberField({ initial: 0, integer: true }), max: new foundry.data.fields.NumberField({ initial: 0, integer: true }) }); -export default class DhpAdversary extends foundry.abstract.TypeDataModel { +export default class DhpAdversary extends BaseDataActor { static LOCALIZATION_PREFIXES = ['DAGGERHEART.Sheets.Adversary']; + static get metadata() { + return foundry.utils.mergeObject(super.metadata, { + label: 'TYPES.Actor.adversary', + type: 'adversary' + }); + } + static defineSchema() { const fields = foundry.data.fields; return { @@ -20,7 +29,6 @@ export default class DhpAdversary extends foundry.abstract.TypeDataModel { choices: SYSTEM.ACTOR.adversaryTypes, initial: SYSTEM.ACTOR.adversaryTypes.standard.id }), - description: new fields.HTMLField(), motivesAndTactics: new fields.HTMLField(), difficulty: new fields.NumberField({ required: true, initial: 1, integer: true }), damageThresholds: new fields.SchemaField({ diff --git a/module/data/actor/base.mjs b/module/data/actor/base.mjs new file mode 100644 index 00000000..ebd826df --- /dev/null +++ b/module/data/actor/base.mjs @@ -0,0 +1,34 @@ +/** + * Describes metadata about the actor data model type + * @typedef {Object} ItemDataModelMetadata + * @property {string} label - A localizable label used on application. + * @property {string} type - The system type that this data model represents. + */ +export default class BaseDataActor extends foundry.abstract.TypeDataModel { + /** @returns {ItemDataModelMetadata}*/ + static get metadata() { + return { + label: 'Base Actor', + type: 'base' + }; + } + + /** @inheritDoc */ + static defineSchema() { + const fields = foundry.data.fields; + + return { + description: new fields.HTMLField({ required: true, nullable: true }) + }; + } + + /** + * Obtain a data object used to evaluate any dice rolls associated with this Item Type + * @param {object} [options] - Options which modify the getRollData method. + * @returns {object} + */ + getRollData(options = {}) { + const data = this.getRollData(); + return data; + } +} diff --git a/module/data/character.mjs b/module/data/actor/character.mjs similarity index 95% rename from module/data/character.mjs rename to module/data/actor/character.mjs index a3494ecd..def502b5 100644 --- a/module/data/character.mjs +++ b/module/data/actor/character.mjs @@ -1,6 +1,7 @@ -import { burden } from '../config/generalConfig.mjs'; -import ForeignDocumentUUIDField from './fields/foreignDocumentUUIDField.mjs'; -import { LevelOptionType } from './levelTier.mjs'; +import { burden } from '../../config/generalConfig.mjs'; +import ForeignDocumentUUIDField from '../fields/foreignDocumentUUIDField.mjs'; +import { LevelOptionType } from '../levelTier.mjs'; +import BaseDataActor from './base.mjs'; const attributeField = () => new foundry.data.fields.SchemaField({ @@ -14,7 +15,14 @@ const resourceField = max => max: new foundry.data.fields.NumberField({ initial: max, integer: true }) }); -export default class DhCharacter extends foundry.abstract.TypeDataModel { +export default class DhCharacter extends BaseDataActor { + static get metadata() { + return foundry.utils.mergeObject(super.metadata, { + label: 'TYPES.Actor.character', + type: 'character' + }); + } + static defineSchema() { const fields = foundry.data.fields; @@ -60,7 +68,6 @@ export default class DhCharacter extends foundry.abstract.TypeDataModel { }) ), story: new fields.HTMLField(), - description: new fields.HTMLField(), class: new fields.SchemaField({ value: new ForeignDocumentUUIDField({ type: 'Item', nullable: true }), subclass: new ForeignDocumentUUIDField({ type: 'Item', nullable: true }) diff --git a/module/data/environment.mjs b/module/data/actor/environment.mjs similarity index 79% rename from module/data/environment.mjs rename to module/data/actor/environment.mjs index a2cd7529..5a58204c 100644 --- a/module/data/environment.mjs +++ b/module/data/actor/environment.mjs @@ -1,9 +1,17 @@ import { environmentTypes } from '../config/actorConfig.mjs'; +import BaseDataActor from './base.mjs'; import ForeignDocumentUUIDField from './fields/foreignDocumentUUIDField.mjs'; -export default class DhEnvironment extends foundry.abstract.TypeDataModel { +export default class DhEnvironment extends BaseDataActor { static LOCALIZATION_PREFIXES = ['DAGGERHEART.Sheets.Environment']; + static get metadata() { + return foundry.utils.mergeObject(super.metadata, { + label: 'TYPES.Actor.environment', + type: 'environment' + }); + } + static defineSchema() { const fields = foundry.data.fields; return { @@ -13,7 +21,6 @@ export default class DhEnvironment extends foundry.abstract.TypeDataModel { initial: SYSTEM.GENERAL.tiers.tier1.id }), type: new fields.StringField({ choices: environmentTypes }), - description: new fields.HTMLField(), impulses: new fields.HTMLField(), difficulty: new fields.NumberField({ required: true, initial: 11, integer: true }), potentialAdversaries: new fields.TypedObjectField(