Add the Weapon item details (closes #132)

This commit is contained in:
Oliver-Akins 2024-03-24 21:47:59 -06:00
parent 60797ab1e2
commit 337370bbfe
6 changed files with 153 additions and 3 deletions

View file

@ -1,6 +1,7 @@
// Data Models // Data Models
import { DescribedItemData } from "./models/Item/DescribedItemData.mjs"; import { DescribedItemData } from "./models/Item/DescribedItemData.mjs";
import { CommonItemData } from "./models/Item/CommonItemData.mjs"; import { CommonItemData } from "./models/Item/CommonItemData.mjs";
import { WeaponItemData } from "./models/Item/Weapon.mjs";
import { AspectItemData } from "./models/Item/Aspect.mjs"; import { AspectItemData } from "./models/Item/Aspect.mjs";
import { SpellItemData } from "./models/Item/Spell.mjs"; import { SpellItemData } from "./models/Item/Spell.mjs";
import { PlayerData } from "./models/Actor/Player.mjs"; import { PlayerData } from "./models/Actor/Player.mjs";
@ -46,6 +47,7 @@ Hooks.once(`init`, async () => {
CONFIG.Item.dataModels.untyped = DescribedItemData; CONFIG.Item.dataModels.untyped = DescribedItemData;
CONFIG.Item.dataModels.material = CommonItemData; CONFIG.Item.dataModels.material = CommonItemData;
CONFIG.Item.dataModels.foil = DescribedItemData; CONFIG.Item.dataModels.foil = DescribedItemData;
CONFIG.Item.dataModels.weapon = WeaponItemData;
CONFIG.Item.dataModels.aspect = AspectItemData; CONFIG.Item.dataModels.aspect = AspectItemData;
CONFIG.Item.dataModels.spell = SpellItemData; CONFIG.Item.dataModels.spell = SpellItemData;
CONFIG.Item.dataModels.pet = PetItemData; CONFIG.Item.dataModels.pet = PetItemData;

View file

@ -29,6 +29,7 @@ export const partials = [
`actors/char-sheet/v2/partials/inventory/items/material.v2.pc.hbs`, `actors/char-sheet/v2/partials/inventory/items/material.v2.pc.hbs`,
`actors/char-sheet/v2/partials/inventory/items/untyped.v2.pc.hbs`, `actors/char-sheet/v2/partials/inventory/items/untyped.v2.pc.hbs`,
`actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs`, `actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs`,
`actors/char-sheet/v2/partials/inventory/items/weapon.v2.pc.hbs`,
]; ];
export const preAliasedPartials = { export const preAliasedPartials = {

View file

@ -0,0 +1,24 @@
import { DescribedItemData } from "./DescribedItemData.mjs";
import DOTDUNGEON from "../../config.mjs";
export class WeaponItemData extends DescribedItemData {
static defineSchema() {
const fields = foundry.data.fields;
return mergeObject(super.defineSchema(), {
damage: new fields.StringField({
initial: null,
nullable: true,
blank: true,
options: DOTDUNGEON.damageTypes,
}),
ranged: new fields.BooleanField({ initial: false, }),
scoped: new fields.BooleanField({ initial: false, }),
ammo: new fields.StringField({
initial: null,
nullable: true,
blank: true,
options: DOTDUNGEON.ammoTypes,
}),
});
};
};

View file

@ -118,7 +118,7 @@ export class PlayerSheetv2 extends GenericActorSheet {
return stats; return stats;
}; };
_itemTypesHidden = new Set([`weapon`, `armour`, `equipment`, `foil`, `structure`, `service`]); _itemTypesHidden = new Set([`pet`, `armour`, `equipment`, `foil`, `structure`, `service`]);
toggleItemFilter(filterName) { toggleItemFilter(filterName) {
if (this._itemTypesHidden.has(filterName)) { if (this._itemTypesHidden.has(filterName)) {
this._itemTypesHidden.delete(filterName); this._itemTypesHidden.delete(filterName);

View file

@ -186,7 +186,7 @@
} }
} }
.untyped, .aspect { .untyped, .aspect, .weapon {
@include material.elevate(1); @include material.elevate(1);
padding: 8px; padding: 8px;
border-radius: 4px; border-radius: 4px;
@ -291,4 +291,10 @@
border-radius: 4px; border-radius: 4px;
} }
} }
.weapon {
&__description {
grid-row: span 2;
}
}
} }

View file

@ -0,0 +1,117 @@
<section class="weapon">
<div
class="weapon__header"
data-collapse-id="{{item.uuid}}"
>
<button
type="button"
class="equal-padding reduced-padding"
data-collapse-id="{{item.uuid}}"
tabindex="0"
aria-label="{{dd-i18n 'dotdungeon.sheet.actor.v2.toggle-item-information' item}}"
>
<div aria-hidden="true" class="icon icon--12">
{{#if (dd-set-has meta.expanded item.uuid)}}
{{{ icons.caret-down }}}
{{else}}
{{{ icons.caret-right }}}
{{/if}}
</div>
</button>
<h3 class="weapon__name">
{{item.name}}
</h3>
<div class="weapon__quantity--display">
(x {{item.system.quantity}})
</div>
</div>
{{#if (dd-set-has meta.expanded item.uuid)}}
<hr>
<div class="weapon__content">
<div class="weapon__field editable">
<label for="{{meta.idp}}-{{item.uuid}}-quantity">
Quantity
</label>
<input
type="number"
min="0"
id="{{meta.idp}}-{{item.uuid}}-quantity"
value="{{item.system.quantity}}"
data-embedded-id="{{item.uuid}}"
data-embedded-update="system.quantity"
data-embedded-update-on="blur"
>
</div>
<div class="weapon__field">
<span>Type:</span>
<span>
{{ifThen item.system.ranged "Ranged" "Melee"}}
</span>
</div>
<div class="weapon__field">
<span>Damage:</span>
<span>
{{dd-empty-state item.system.damage}}
</span>
</div>
<button
type="button"
aria-label="{{dd-i18n 'dotdungeon.common.send-to-chat'}}"
data-tooltip="{{dd-i18n 'dotdungeon.common.send-to-chat'}}"
data-tooltip-direction="RIGHT"
class="weapon__button--send-to-chat"
>
<div aria-hidden="true" class="icon icon--20">
{{{ icons.chat-bubble }}}
</div>
</button>
<div class="weapon__field">
<span>Tier:</span>
<span>{{dd-i18n (concat "dotdungeon.rarity." item.system.tier)}}</span>
</div>
<div class="weapon__field">
{{ifThen item.system.scoped "Scoped" "No Scope"}}
</div>
<div class="weapon__field">
<span>Ammo:</span>
<span>
{{dd-empty-state item.system.ammo}}
</span>
</div>
<button
type="button"
aria-label="{{dd-i18n 'dotdungeon.common.edit'}}"
data-tooltip="{{dd-i18n 'dotdungeon.common.edit'}}"
data-tooltip-direction="RIGHT"
class="weapon__button--edit"
data-embedded-edit="{{item.uuid}}"
>
<div aria-hidden="true" class="icon icon--20">
{{{ icons.edit }}}
</div>
</button>
<p class="weapon__description">
{{#if item.system.description}}
{{item.system.description}}
{{else}}
<span class="placeholder">
This item hasn't been described yet...
</span>
{{/if}}
</p>
<button
type="button"
aria-label="{{dd-i18n 'dotdungeon.common.delete'}}"
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
data-tooltip-direction="RIGHT"
class="weapon__button--delete"
data-embedded-delete
data-embedded-id="{{item.uuid}}"
>
<div aria-hidden="true" class="icon icon--20">
{{{ icons.garbage-bin }}}
</div>
</button>
</div>
{{/if}}
</section>