/** * DataModel pour les acteurs de type "vehicle" (véhicules et montures). * Un véhicule est désormais un acteur (et non un objet) : il possède sa propre * fiche, peut être posé sur la scène comme un jeton et appartient à un groupe * ou un personnage via `ownerId`. * * Caractéristiques (regles_vehicules.txt) : Rareté, Fiabilité (véhicules), * Réserve d'Effort (montures), Distance, Vitesse (croisière/pointe) et Entretien. * Pas de statistiques de combat (les règles ne définissent pas de points de vie). */ import { raritySchema } from "./_shared.mjs" export default class VermineVehicleData extends foundry.abstract.TypeDataModel { /** @override */ static LOCALIZATION_PREFIXES = ["VERMINE.vehicle"] /** @override */ static defineSchema() { const fields = foundry.data.fields const reqInt = { required: true, nullable: false, integer: true } return { // Identité identity: new fields.SchemaField({ profile: new fields.StringField({ required: true, nullable: false, initial: "" }), origin: new fields.StringField({ required: true, nullable: false, initial: "" }), theme: new fields.StringField({ required: true, nullable: false, initial: "" }), notes: new fields.HTMLField({ required: true, initial: "", textSearch: true }) }), // Rareté (valeur 1-10 + handicap) rarity: raritySchema(), // Fiabilité étendue (1-10) pour les véhicules reliability: new fields.NumberField({ ...reqInt, initial: 5, min: 1, max: 10 }), // Type : "vehicle" (véhicule) ou "mount" (monture) kind: new fields.StringField({ required: true, nullable: false, initial: "vehicle" }), // Distance : km parcourus avec un "plein" distance: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }), // Vitesse : croisière / pointe (durée de la pointe) speed: new fields.SchemaField({ cruise: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }), top: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }), topDuration: new fields.StringField({ required: true, nullable: false, initial: "10 min" }) }), // Entretien : compétences nécessaires (clés de CONFIG.VERMINE.skills) maintenance: new fields.ArrayField(new fields.StringField({ required: true, nullable: false, initial: "" })), // Réserve d'Effort (montures) effortReserve: new fields.SchemaField({ value: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }), min: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }), max: new fields.NumberField({ ...reqInt, initial: 0, min: 0 }) }), // Mobilité mobility: new fields.NumberField({ ...reqInt, initial: 3, min: 0 }), // Propriétaire (id d'acteur : groupe ou personnage) ownerId: new fields.StringField({ required: true, nullable: false, initial: "" }) } } }