DIvers rework de CSS/LESS et améliorations de messages/layout
This commit is contained in:
@@ -1,9 +1,17 @@
|
||||
import LesOubliesActorSheet from "./base-actor-sheet.mjs"
|
||||
import { LesOubliesUtility } from "../../les-oublies-utility.js"
|
||||
|
||||
export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
|
||||
static CREATION_DROP_TYPES = new Set(["race", "tribu", "metier"])
|
||||
|
||||
static DEFAULT_OPTIONS = {
|
||||
...super.DEFAULT_OPTIONS,
|
||||
classes: [...super.DEFAULT_OPTIONS.classes, "personnage"],
|
||||
actions: {
|
||||
...super.DEFAULT_OPTIONS.actions,
|
||||
switchTab: LesOubliesPersonnageSheet.#onSwitchTab,
|
||||
removeCreationItem: LesOubliesPersonnageSheet.#onRemoveCreationItem,
|
||||
},
|
||||
window: {
|
||||
...super.DEFAULT_OPTIONS.window,
|
||||
title: "TYPES.Actor.personnage",
|
||||
@@ -12,26 +20,121 @@ export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
|
||||
|
||||
static PARTS = {
|
||||
sheet: {
|
||||
template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet.hbs",
|
||||
template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet-v14.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
_activeTab = "overview"
|
||||
|
||||
#getTabs() {
|
||||
const tabs = {
|
||||
overview: { id: "overview", label: "Portrait", icon: "fa-solid fa-id-card" },
|
||||
skills: { id: "skills", label: "Compétences", icon: "fa-solid fa-book-open" },
|
||||
actions: { id: "actions", label: "Combat & magie", icon: "fa-solid fa-wand-sparkles" },
|
||||
equipment: { id: "equipment", label: "Équipement", icon: "fa-solid fa-suitcase" },
|
||||
notes: { id: "notes", label: "Notes", icon: "fa-solid fa-feather-pointed" },
|
||||
}
|
||||
|
||||
for (const tab of Object.values(tabs)) {
|
||||
tab.active = this._activeTab === tab.id
|
||||
tab.cssClass = tab.active ? "active" : ""
|
||||
}
|
||||
|
||||
return tabs
|
||||
}
|
||||
|
||||
async _prepareContext() {
|
||||
const context = await super._prepareContext()
|
||||
context.tabs = this.#getTabs()
|
||||
context.derived = this.document.getDerivedOverview()
|
||||
context.creation = {
|
||||
race: this.document.getCreationItem("race"),
|
||||
tribu: this.document.getCreationItem("tribu"),
|
||||
metier: this.document.getCreationItem("metier"),
|
||||
}
|
||||
context.profileEntries = this.document.system.profils
|
||||
context.creationSlots = [
|
||||
this.#buildCreationSlot("race", context.creation.race, "Glissez une race ici depuis un compendium ou le répertoire des objets."),
|
||||
this.#buildCreationSlot("tribu", context.creation.tribu, "Glissez une tribu ici depuis un compendium ou le répertoire des objets."),
|
||||
this.#buildCreationSlot("metier", context.creation.metier, "Glissez un métier ici depuis un compendium ou le répertoire des objets."),
|
||||
]
|
||||
context.skillGroups = this.document.getGroupedCompetences()
|
||||
const splitIndex = Math.ceil(context.skillGroups.length / 2)
|
||||
context.skillColumns = [
|
||||
context.skillGroups.slice(0, splitIndex),
|
||||
context.skillGroups.slice(splitIndex),
|
||||
]
|
||||
context.spells = this.document.getEmbeddedItems("sortilege")
|
||||
context.weapons = this.document.getEmbeddedItems("arme")
|
||||
context.equippedWeapons = context.weapons.filter((item) => item.system.equipped)
|
||||
context.armors = this.document.getEmbeddedItems("armure")
|
||||
context.equipment = this.document.getEmbeddedItems("equipement")
|
||||
context.companyPowers = this.document.getEmbeddedItems("pouvoircompagnie")
|
||||
context.activeCompanyPower = context.derived.compagnie?.getEmbeddedItems?.("pouvoircompagnie")?.[0] ?? null
|
||||
context.choiceSets.companyOptions = LesOubliesUtility.ensureChoice(
|
||||
LesOubliesUtility.sortByName(game.actors.filter((actor) => actor.type === "compagnie")).map((actor) => ({
|
||||
value: actor.id,
|
||||
label: actor.name,
|
||||
})),
|
||||
this.document.system.references?.compagnieId,
|
||||
context.derived.compagnie?.name,
|
||||
)
|
||||
return context
|
||||
}
|
||||
|
||||
#buildCreationSlot(type, item, emptyHint) {
|
||||
return {
|
||||
type,
|
||||
label: game.i18n.localize(`TYPES.Item.${type}`),
|
||||
item,
|
||||
emptyHint,
|
||||
filledHint: "Déposez un autre élément du même type pour le remplacer.",
|
||||
}
|
||||
}
|
||||
|
||||
async _onDrop(event) {
|
||||
const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event)
|
||||
if (data.type !== "Item" || !data.uuid) return super._onDrop(event)
|
||||
|
||||
const item = await fromUuid(data.uuid)
|
||||
if (!item) return
|
||||
|
||||
const slot = event.target?.closest?.("[data-drop-creation-type]")
|
||||
const slotType = slot?.dataset?.dropCreationType ?? ""
|
||||
const inCreationZone = Boolean(event.target?.closest?.("[data-creation-drop-zone]"))
|
||||
|
||||
if (!LesOubliesPersonnageSheet.CREATION_DROP_TYPES.has(item.type)) {
|
||||
if (slot || inCreationZone) {
|
||||
ui.notifications.warn("Seules les races, tribus et métiers peuvent être déposés dans cette zone.")
|
||||
return
|
||||
}
|
||||
return super._onDrop(event)
|
||||
}
|
||||
|
||||
if (slotType && slotType !== item.type) {
|
||||
ui.notifications.warn(`Déposez ici un élément de type ${game.i18n.localize(`TYPES.Item.${slotType}`)}.`)
|
||||
return
|
||||
}
|
||||
|
||||
if (slot || inCreationZone) {
|
||||
await this.document.assignCreationItem(item)
|
||||
this.render()
|
||||
return
|
||||
}
|
||||
|
||||
return super._onDrop(event)
|
||||
}
|
||||
|
||||
static #onSwitchTab(event, target) {
|
||||
const tab = target.dataset.tab
|
||||
if (!tab || this._activeTab === tab) return
|
||||
this._activeTab = tab
|
||||
this.render()
|
||||
}
|
||||
|
||||
static async #onRemoveCreationItem(event, target) {
|
||||
const type = target.dataset.type
|
||||
if (!LesOubliesPersonnageSheet.CREATION_DROP_TYPES.has(type)) return
|
||||
await this.document.clearCreationItem(type)
|
||||
this.render()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user