68 lines
2.9 KiB
JavaScript
68 lines
2.9 KiB
JavaScript
/**
|
|
* 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: "" })
|
|
}
|
|
}
|
|
}
|