import AwEActorSheet from "./base-actor-sheet.mjs" import { SYSTEM } from "../../config/system.mjs" export default class AwECreatureSheet extends AwEActorSheet { /** @override */ static DEFAULT_OPTIONS = { classes: ["creature"], position: { width: 700, height: 700 }, window: { contentClasses: ["creature-content"] }, actions: { createAbility: AwECreatureSheet.#onCreateAbility, createSkill: AwECreatureSheet.#onCreateSkill, createEffect: AwECreatureSheet.#onCreateEffect, createWeapon: AwECreatureSheet.#onCreateWeapon, createKit: AwECreatureSheet.#onCreateKit, createEquipment: AwECreatureSheet.#onCreateEquipment, rollWeapon: AwECreatureSheet.#onRollWeapon, rollDamage: AwECreatureSheet.#onRollDamage } } /** @override */ static PARTS = { header: { template: "systems/fvtt-adventures-with-emmy/templates/creature-header.hbs" }, tabs: { template: "templates/generic/tab-navigation.hbs" }, main: { template: "systems/fvtt-adventures-with-emmy/templates/creature-main.hbs" }, inventory: { template: "systems/fvtt-adventures-with-emmy/templates/creature-inventory.hbs" }, description: { template: "systems/fvtt-adventures-with-emmy/templates/creature-description.hbs" }, eureka: { template: "systems/fvtt-adventures-with-emmy/templates/creature-eureka.hbs" } } /** @override */ tabGroups = { sheet: "main" } #getTabs() { const tabs = { main: { id: "main", group: "sheet", icon: "fa-solid fa-dragon", label: "AWEMMY.Sheet.Tab.Main" }, inventory: { id: "inventory", group: "sheet", icon: "fa-solid fa-backpack", label: "AWEMMY.Sheet.Tab.Inventory" }, description: { id: "description", group: "sheet", icon: "fa-solid fa-scroll", label: "AWEMMY.Sheet.Tab.Description" }, eureka: { id: "eureka", group: "sheet", icon: "fa-solid fa-lightbulb", label: "AWEMMY.Sheet.Tab.Eureka" } } for (const v of Object.values(tabs)) { v.active = this.tabGroups[v.group] === v.id v.cssClass = v.active ? "active" : "" } return tabs } /** @override */ async _prepareContext() { const context = await super._prepareContext() context.tabs = this.#getTabs() context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML( this.document.system.description ?? "", { async: true } ) return context } /** @override */ async _preparePartContext(partId, context) { switch (partId) { case "main": context.tab = context.tabs.main context.abilities = this.document.itemTypes.ability.map(item => ({ id: item.id, uuid: item.uuid, name: item.name, img: item.img, system: item.system, costLabel: game.i18n.localize(SYSTEM.ABILITY_COST[item.system.cost]?.label ?? item.system.cost) })) context.skills = this.document.itemTypes.skill.map(item => ({ id: item.id, uuid: item.uuid, name: item.name, img: item.img, system: item.system })) context.effects = this.document.itemTypes.effect.map(item => ({ id: item.id, uuid: item.uuid, name: item.name, img: item.img, system: item.system })) break case "inventory": context.tab = context.tabs.inventory context.kits = this.document.itemTypes.kit context.weapons = this.document.itemTypes.weapon context.equipments = this.document.itemTypes.equipment break case "description": context.tab = context.tabs.description break case "eureka": context.tab = context.tabs.eureka break } return context } /** @override */ async _onDrop(event) { if (!this.isEditable) return const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event) if (data.type === "Item") { const item = await fromUuid(data.uuid) return this._onDropItem(item) } } /** @override */ async _onDropItem(item) { if (!item) return return super._onDropItem(item) } static #onCreateAbility(event, target) { const type = "ability" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static #onCreateSkill(event, target) { const type = "skill" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static #onCreateEffect(event, target) { const type = "effect" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static #onCreateWeapon(event, target) { const type = "weapon" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static #onCreateKit(event, target) { const type = "kit" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static #onCreateEquipment(event, target) { const type = "equipment" this.document.createEmbeddedDocuments("Item", [{ name: CONFIG.Item.documentClass.defaultName({ type }), type }]) } static async #onRollWeapon(event, target) { const itemId = target.closest("[data-item-id]")?.dataset.itemId const item = this.document.items.get(itemId) if (!item) return await this.document.rollWeapon(item) } static async #onRollDamage(event, target) { const itemId = target.closest("[data-item-id]")?.dataset.itemId const item = this.document.items.get(itemId) if (!item) return await this.document.rollDamage(item) } }