From 83039c6144426733eaf5ee37584098283d9ca0ac Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Sun, 4 Feb 2024 22:05:44 -0700 Subject: [PATCH] Add the ability to create custom items --- langs/en-ca.json | 3 +- module/dotdungeon.mjs | 13 +++++-- module/models/Item/CommonItemData.mjs | 8 ++++ module/sheets/Items/CustomItemSheet.mjs | 21 +++++++++++ styles/global/design-v2.scss | 9 +++++ styles/root.scss | 1 + styles/sheets/items/custom.scss | 16 ++++++++ template.json | 1 + templates/items/custom.hbs | 50 +++++++++++++++++++++++++ 9 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 module/sheets/Items/CustomItemSheet.mjs create mode 100644 styles/sheets/items/custom.scss create mode 100644 templates/items/custom.hbs diff --git a/langs/en-ca.json b/langs/en-ca.json index e346d41..11c28ba 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -84,7 +84,8 @@ }, "AspectSheet": "Aspect Sheet", "SpellSheet": "Spell Sheet", - "PetSheet": "Pet Sheet" + "PetSheet": "Pet Sheet", + "CustomItemSheet": "Custom Item" }, "actor": { "pc": { diff --git a/module/dotdungeon.mjs b/module/dotdungeon.mjs index b184528..f3ffe13 100644 --- a/module/dotdungeon.mjs +++ b/module/dotdungeon.mjs @@ -1,4 +1,5 @@ // Data Models +import { DescribedItemData } from "./models/Item/DescribedItemData.mjs"; import { AspectItemData } from "./models/Item/Aspect.mjs"; import { SpellItemData } from "./models/Item/Spell.mjs"; import { PlayerData } from "./models/Actor/Player.mjs"; @@ -11,13 +12,14 @@ import { ActorHandler } from "./documents/Actor/Handler.mjs"; import { ItemHandler } from "./documents/Item/Handler.mjs"; // Item Sheets -import { SpellSheet } from "./sheets/Items/SpellSheet.mjs"; +import { CustomItemSheet } from "./sheets/Items/CustomItemSheet.mjs"; import { AspectSheet } from "./sheets/Items/AspectSheet.mjs"; +import { SpellSheet } from "./sheets/Items/SpellSheet.mjs"; import { PetSheet } from "./sheets/Items/PetSheet.mjs"; // Actor Sheets -import { PlayerSheet } from "./sheets/PlayerSheet.mjs"; import { BasicSyncSheet } from "./sheets/SyncVariations/BasicSyncSheet.mjs"; +import { PlayerSheet } from "./sheets/PlayerSheet.mjs"; import { MobSheet } from "./sheets/MobSheet.mjs"; // Utility imports @@ -39,6 +41,7 @@ Hooks.once(`init`, async () => { CONFIG.Actor.dataModels.player = PlayerData; CONFIG.Actor.dataModels.sync = SyncData; CONFIG.Actor.dataModels.mob = MobData; + CONFIG.Item.dataModels.custom = DescribedItemData; CONFIG.Item.dataModels.aspect = AspectItemData; CONFIG.Item.dataModels.spell = SpellItemData; CONFIG.Item.dataModels.pet = PetItemData; @@ -77,8 +80,12 @@ Hooks.once(`init`, async () => { Items.registerSheet("dotdungeon", PetSheet, { makeDefault: true, types: ["pet"], - lable: "dotdungeon.sheet-names.PetSheet" + label: "dotdungeon.sheet-names.PetSheet" }); + Items.registerSheet("dotdungeon", CustomItemSheet, { + makeDefault: true, + label: "dotdungeon.sheet-names.CustomItemSheet" + }) hbs.registerHandlebarsHelpers(); diff --git a/module/models/Item/CommonItemData.mjs b/module/models/Item/CommonItemData.mjs index a8ad598..fb32dc7 100644 --- a/module/models/Item/CommonItemData.mjs +++ b/module/models/Item/CommonItemData.mjs @@ -4,13 +4,21 @@ export class CommonItemData extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields; return { + quantity: new fields.NumberField({ + initial: 1, + min: 0, + nullable: false, + integer: true, + }), buy: new fields.NumberField({ initial: null, nullable: true, + integer: true, }), usage_cost: new fields.NumberField({ initial: null, nullable: true, + integer: true, }), tier: new fields.StringField({ initial: `simple`, diff --git a/module/sheets/Items/CustomItemSheet.mjs b/module/sheets/Items/CustomItemSheet.mjs new file mode 100644 index 0000000..8b40820 --- /dev/null +++ b/module/sheets/Items/CustomItemSheet.mjs @@ -0,0 +1,21 @@ +import { GenericItemSheet } from "./GenericItemSheet.mjs"; + +export class CustomItemSheet extends GenericItemSheet { + static get defaultOptions() { + let opts = mergeObject( + super.defaultOptions, + { + template: `systems/dotdungeon/templates/items/custom.hbs`, + width: 280, + height: 340, + } + ); + opts.classes.push(`dotdungeon`); + return opts; + }; + + async getData() { + const ctx = await super.getData(); + return ctx; + }; +}; \ No newline at end of file diff --git a/styles/global/design-v2.scss b/styles/global/design-v2.scss index 2fbceae..e9985a1 100644 --- a/styles/global/design-v2.scss +++ b/styles/global/design-v2.scss @@ -4,6 +4,7 @@ border: 2px solid black; background: none; box-shadow: none; + height: unset; &.left { text-align: left; } &.center { text-align: center; } @@ -19,6 +20,10 @@ flex-direction: row; align-items: center; transition: all ease-in-out 50ms; + border: 2px solid black; + border-radius: 4px; + gap: 4px; + padding: 4px; &:focus-within { transform: scale(102%); @@ -39,6 +44,10 @@ display: flex; flex-direction: column; transition: all ease-in-out 50ms; + border: 2px solid black; + border-radius: 4px; + gap: 4px; + padding: 4px; &:focus-within { transform: scale(102%); diff --git a/styles/root.scss b/styles/root.scss index 11398a3..385f0a1 100644 --- a/styles/root.scss +++ b/styles/root.scss @@ -17,6 +17,7 @@ @use "./sheets/actor/mvp.scss"; @use "./sheets/actor/mob/mob.scss"; @use "./sheets/actor/sync/basic.scss"; +@use "./sheets/items/custom.scss"; @use "./sheets/items/aspect.scss"; @use "./sheets/items/spell.scss"; @use "./sheets/items/pet.scss"; \ No newline at end of file diff --git a/styles/sheets/items/custom.scss b/styles/sheets/items/custom.scss new file mode 100644 index 0000000..a390b09 --- /dev/null +++ b/styles/sheets/items/custom.scss @@ -0,0 +1,16 @@ +.item--custom { + padding: 8px; + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: repeat(3, min-content) 1fr; + grid-template-areas: + "name name" + ". ." + "usage usage" + "description description"; + gap: 8px; + + .name { grid-area: name; } + .usage { grid-area: usage; } + .description { grid-area: description; } +} \ No newline at end of file diff --git a/template.json b/template.json index d385103..46311b1 100644 --- a/template.json +++ b/template.json @@ -8,6 +8,7 @@ }, "Item": { "types": [ + "custom", "aspect", "weapon", "armour", diff --git a/templates/items/custom.hbs b/templates/items/custom.hbs new file mode 100644 index 0000000..a170dbc --- /dev/null +++ b/templates/items/custom.hbs @@ -0,0 +1,50 @@ +
+ + + + + {{!-- --}} + +
\ No newline at end of file