diff --git a/langs/en-ca.json b/langs/en-ca.json index 544291a..d04708a 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -17,6 +17,7 @@ "HeroSkillsCardV1": "Hero Skill Card" }, "common": { + "quantity": "Quantity", "equipped": "Equipped", "edit": "Edit", "delete": "Delete", diff --git a/module/Apps/ActorSheets/HeroSkillsCardV1.mjs b/module/Apps/ActorSheets/HeroSkillsCardV1.mjs index 566753a..c174b5d 100644 --- a/module/Apps/ActorSheets/HeroSkillsCardV1.mjs +++ b/module/Apps/ActorSheets/HeroSkillsCardV1.mjs @@ -96,7 +96,7 @@ export class HeroSkillsCardV1 extends GenericAppMixin(HandlebarsApplicationMixin ctx.gear.push({ index: ctx.gear.length, uuid: item.uuid, - name: item.name, + name: item.quantifiedName, empty: false, }); diff --git a/module/data/Item/Common.mjs b/module/data/Item/Common.mjs new file mode 100644 index 0000000..d020cc4 --- /dev/null +++ b/module/data/Item/Common.mjs @@ -0,0 +1,20 @@ +import { requiredInteger } from "../helpers.mjs"; + +export class CommonItemData extends foundry.abstract.TypeDataModel { + // MARK: Schema + static defineSchema() { + return { + quantity: requiredInteger({ min: 0, initial: 1 }), + }; + }; + + // MARK: Base Data + prepareBaseData() { + super.prepareBaseData(); + }; + + // MARK: Derived Data + prepareDerivedData() { + super.prepareDerivedData(); + }; +}; diff --git a/module/data/Item/Protector.mjs b/module/data/Item/Protector.mjs index 2226791..f6c202f 100644 --- a/module/data/Item/Protector.mjs +++ b/module/data/Item/Protector.mjs @@ -1,13 +1,15 @@ +import { CommonItemData } from "./Common.mjs"; import { gameTerms } from "../../gameTerms.mjs"; import { requiredInteger } from "../helpers.mjs"; const { fields } = foundry.data; /** Used for Armour and Shields */ -export class ProtectorData extends foundry.abstract.TypeDataModel { +export class ProtectorData extends CommonItemData { // MARK: Schema static defineSchema() { return { + ...super.defineSchema(), protection: requiredInteger({ min: 0, initial: 1 }), location: new fields.SetField( new fields.StringField({ @@ -48,6 +50,14 @@ export class ProtectorData extends foundry.abstract.TypeDataModel { // #region Sheet Data getFormFields(_ctx) { const fields = [ + { + id: `quantity`, + type: `integer`, + label: `RipCrypt.Apps.quantity`, + path: `system.quantity`, + value: this.quantity, + min: 0, + }, { id: `location`, type: `string-set`, diff --git a/module/data/Item/Weapon.mjs b/module/data/Item/Weapon.mjs index ebbce9e..2ef659b 100644 --- a/module/data/Item/Weapon.mjs +++ b/module/data/Item/Weapon.mjs @@ -1,12 +1,14 @@ import { barAttribute, optionalInteger, requiredInteger } from "../helpers.mjs"; +import { CommonItemData } from "./Common.mjs"; import { gameTerms } from "../../gameTerms.mjs"; const { fields } = foundry.data; -export class WeaponData extends foundry.abstract.TypeDataModel { +export class WeaponData extends CommonItemData { // MARK: Schema static defineSchema() { return { + ...super.defineSchema(), traits: new fields.SetField( new fields.StringField({ blank: false, @@ -59,6 +61,14 @@ export class WeaponData extends foundry.abstract.TypeDataModel { // #region Sheet Data getFormFields(_ctx) { const fields = [ + { + id: `quantity`, + type: `integer`, + label: `RipCrypt.common.quantity`, + path: `system.quantity`, + value: this.quantity, + min: 0, + }, { id: `traits`, type: `string-set`, diff --git a/module/documents/item.mjs b/module/documents/item.mjs new file mode 100644 index 0000000..db7c968 --- /dev/null +++ b/module/documents/item.mjs @@ -0,0 +1,8 @@ +export class RipCryptItem extends Item { + get quantifiedName() { + if (this.system.quantity != null && this.system.quantity !== 1) { + return `${this.name} (${this.system.quantity})`; + } + return this.name; + }; +}; diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index 7bfafe9..672f90a 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -12,6 +12,9 @@ import { WeaponData } from "../data/Item/Weapon.mjs"; // Class Overrides import { CryptDie } from "../dice/CryptDie.mjs"; +// Documents +import { RipCryptItem } from "../documents/item.mjs"; + // Misc import helpers from "../handlebarHelpers/_index.mjs"; import { Logger } from "../utils/Logger.mjs"; @@ -37,6 +40,7 @@ Hooks.once(`init`, () => { // #endregion // #region Class Changes + CONFIG.Item.documentClass = RipCryptItem; CONFIG.Dice.terms.d = CryptDie; // #endregion diff --git a/templates/Apps/HeroSummaryCardV1/content.hbs b/templates/Apps/HeroSummaryCardV1/content.hbs index be83299..5649c57 100644 --- a/templates/Apps/HeroSummaryCardV1/content.hbs +++ b/templates/Apps/HeroSummaryCardV1/content.hbs @@ -230,7 +230,7 @@ data-action="editItem" > --}} - {{ slot.data.name }} + {{ slot.data.quantifiedName }}