Files
fvtt-machine-gods-noxian-ex…/module/applications/sheets/character-sheet.mjs
T
uberwald 12bf771e9d
Release Creation / build (release) Successful in 44s
Fixes around character sheets and buttons
2026-05-19 13:30:05 +02:00

104 lines
4.5 KiB
JavaScript

import MGNEActorSheet from "./base-actor-sheet.mjs"
import { SYSTEM } from "../../config/system.mjs"
import { buildCharacterSelectOptions } from "./select-options.mjs"
export function stripHtml(html) {
return (html ?? "").replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim()
}
export default class MGNECharacterSheet extends MGNEActorSheet {
static DEFAULT_OPTIONS = {
classes: ["character"],
position: {
width: 1040,
height: 760,
},
}
static PARTS = {
main: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-main.hbs" },
tabs: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-tabs.hbs" },
overview: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-overview.hbs" },
daily: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-daily.hbs" },
equipment: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-equipment.hbs" },
features: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-features.hbs" },
notes: { template: "systems/fvtt-machine-gods-noxian-expanse/templates/character-notes.hbs" },
}
tabGroups = { sheet: "overview" }
getTabs() {
const tabs = {
overview: { id: "overview", group: "sheet", label: game.i18n.localize("MGNE.Tabs.overview") },
daily: { id: "daily", group: "sheet", label: game.i18n.localize("MGNE.Tabs.daily") },
equipment: { id: "equipment", group: "sheet", label: game.i18n.localize("MGNE.Tabs.equipment") },
features: { id: "features", group: "sheet", label: game.i18n.localize("MGNE.Tabs.features") },
notes: { id: "notes", group: "sheet", label: game.i18n.localize("MGNE.Tabs.notes") },
}
for (const tab of Object.values(tabs)) {
tab.active = this.tabGroups[tab.group] === tab.id
tab.cssClass = tab.active ? "active" : ""
}
return tabs
}
async _prepareContext() {
const context = await super._prepareContext()
context.tabs = this.getTabs()
context.abilityList = SYSTEM.abilityOrder.map(id => ({
id,
...SYSTEM.abilities[id],
value: context.source.system.abilities?.[id]?.value ?? 0,
}))
context.selectOptions = {
...context.selectOptions,
...buildCharacterSelectOptions(context.system),
}
return context
}
async _preparePartContext(partId, context) {
const doc = this.document
switch (partId) {
case "overview":
context.tab = context.tabs.overview
context.valueConditions = Object.entries(doc.system.conditions ?? {})
.filter(([id]) => SYSTEM.conditions[id]?.hasValue)
.map(([id, cond]) => ({
id,
label: SYSTEM.conditions[id].label,
value: cond.value,
options: context.selectOptions.conditionValues,
}))
context.flagConditions = Object.entries(doc.system.conditions ?? {})
.filter(([id]) => !SYSTEM.conditions[id]?.hasValue)
.map(([id, cond]) => ({
id,
label: SYSTEM.conditions[id].label,
active: cond.active,
}))
break
case "daily":
context.tab = context.tabs.daily
break
case "equipment":
context.tab = context.tabs.equipment
context.weapons = doc.itemTypes.weapon.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
context.armors = doc.itemTypes.armor.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
context.shields = doc.itemTypes.shield.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
context.equipmentItems = doc.itemTypes.equipment.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
context.cores = doc.itemTypes["resonance-core"].map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
context.artifacts = doc.itemTypes.artifact.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
break
case "features":
context.tab = context.tabs.features
context.features = doc.itemTypes.feature.map(i => ({ id: i.id, name: i.name, img: i.img, system: i.system, tooltip: stripHtml(i.system.description) }))
break
case "notes":
context.tab = context.tabs.notes
break
}
return context
}
}