feat: fiche PNJ (profil + niveaux) et passage du véhicule en acteur
Release Creation / build (release) Failing after 1m17s

This commit is contained in:
2026-08-04 20:34:20 +02:00
parent ea3322e843
commit cf905cdcfb
36 changed files with 1288 additions and 707 deletions
@@ -0,0 +1,76 @@
import VermineBaseActorSheet from "./base-actor-sheet.mjs"
export default class VermineVehicleSheetV2 extends VermineBaseActorSheet {
static DEFAULT_OPTIONS = {
classes: ["vehicle"],
position: { width: 640, height: 580 },
window: { contentClasses: ["vehicle-content"] }
}
static PARTS = {
main: { template: "systems/vermine2047/templates/actor/appv2/vehicle-main.hbs", scrollable: [""] },
tabs: { template: "templates/generic/tab-navigation.hbs" },
specs: { template: "systems/vermine2047/templates/actor/appv2/vehicle-specs.hbs", scrollable: [""] }
}
tabGroups = { sheet: "specs" }
#getTabs() {
const tabs = {
specs: { id: "specs", group: "sheet", icon: "fas fa-car-side", label: "VERMINE.vehicle_specs" }
}
for (const v of Object.values(tabs)) {
v.active = this.tabGroups[v.group] === v.id
v.cssClass = v.active ? "active" : ""
}
return tabs
}
async _prepareContext() {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
// Compétences d'Entretien possibles (mécanique, technologie, artisanat, animalisme…)
const maintenanceKeys = ["mecanical", "technology", "crafting", "animalism", "environment", "wildlife", "flora", "repulsion", "toxics"]
const current = this.document.system.maintenance || []
context.maintenanceSkills = maintenanceKeys.map(key => ({
key,
label: game.i18n.localize("SKILLS." + key + ".name"),
checked: current.includes(key)
}))
// Propriétaire (groupe ou personnage) résolu
context.resolvedOwner = null
if (this.document.system.ownerId) {
const owner = game.actors.get(this.document.system.ownerId)
if (owner) context.resolvedOwner = { id: owner.id, name: owner.name }
}
return context
}
async _preparePartContext(partId, context) {
switch (partId) {
case "main": break
case "specs":
context.tab = context.tabs.specs
break
}
return context
}
changeTab(tab, group, options = {}) {
super.changeTab(tab, group, options)
if (group === "sheet") {
const main = this.element?.querySelector('[data-group="sheet"][data-tab="main"]')
if (main) main.classList.add("active")
}
}
/** @override - nettoie le tableau d'Entretien (retire les cases non cochées). */
_prepareSubmitData(event, form, formData, updateData) {
const result = super._prepareSubmitData(event, form, formData, updateData)
if (Array.isArray(result?.system?.maintenance)) {
result.system.maintenance = result.system.maintenance.filter(v => typeof v === "string" && v.trim() !== "")
}
return result
}
}