NRF SDK 0.9

Référence

TrainObservation

Copies de trains, services, lignes et arrêts accessibles dans les callbacks.

Contexte d’utilisation

ModulePackageSource SDK
Kotlin/Nativenimbykotlin/src/nimby/TrainObservation.kt

API publique du SDK 0.9.0-alpha.2. Chaque entrée donne la signature Kotlin et son contrat : sens de la valeur, conditions d’utilisation et effets à connaître. Choisissez les imports du module indiqué ci-dessus.

Imports de cette page
import nimby.GameInstant
import nimby.TrainState
import nimby.TrainAlert
import nimby.Station
import nimby.Line
import nimby.TrainPosition
import nimby.TrainAssignment
import nimby.TrainServiceTimes
import nimby.TrainService
import nimby.Train
import nimby.TrainSnapshot
import nimby.Stop
import nimby.LinePlan

Choisir la lecture et interpréter les résultats

Dans un mod, utiliser ToolContext.trains(query). Dans une application JVM, utiliser game.trains.snapshot(query = query) ; sélectionner un train demande aussi son plan de ligne. Une requête groupe tous les trains : ne pas créer une capture par train. La lecture de l’horloge et la lecture ciblée d’un train sont séparées.

Option TrainQueryPar défautDonnées demandées
includeServicetrueÉtat, service et affectation observés.
includeLocationstruePositions et références de localisation nécessaires.
includeCharacteristicsfalseProfils du matériel configuré et actuel.
includeTimetablesfalseInformations d’horaires disponibles ; implique includeService.
includeTagsfalseTags déclarés et références pour leur héritage ; implique includeLines.
includePassengersfalseOccupants observés, distincts de la capacité.
includeLinesfalseCatalogue des lignes, y compris celles sans train affecté.
includeCompositionfalseVéhicules ordonnés des compositions configurée et actuelle et modèles référencés.
ValeurUnité et contrat
Train.speedMps / Train.speedKmhVitesse actuelle. Native : une mesure indisponible reste null. JVM : vérifier aussi speedDefaulted avant d’interpréter une valeur de secours comme une mesure.
maximumSpeedMps / maximumSpeedKmhVitesse maximale du matériel, en m/s ou km/h ; distincte de la vitesse actuelle et de la limite de voie.
lengthM / emptyMassKg / maximumAccelerationMps2Mètres, kilogrammes, mètres par seconde carrée.
powerW / tractiveForceNWatts et newtons.
passengers / passengerCapacity / carCountOccupants, capacité et nombre de véhicules : trois quantités distinctes.
configured / current / compositionProfils indépendants, sans remplacement des valeurs absentes. Composition null : inconnue ou non demandée ; liste vide : composition observée vide.
predictedArrivalDelayUs / predictedArrivalDelaySecondsEstimation signée, en microsecondes ou secondes ; négative pour une arrivée prévue en avance. Ni âge d’échéance ni priorité.
arrivalOffsetSeconds / departureOffsetSecondsOffsets validés, en secondes depuis l’origine du plan de ligne. Ne pas les convertir en date absolue d’un train.
arrivalTimeUs / departureTimeUs / dispatchRetryTimeUsMicrosecondes depuis l’origine de simulation, pas depuis 1970. Utiliser les helpers de calendrier ; une date reste null si l’origine est inconnue.
capturedAtMillis / ageMillisHeure UTC de l’ordinateur / âge monotone lors de la copie ; distincts du calendrier du jeu.

Les identifiants typés sont opaques. TimetableShiftId est unique seulement avec son TimetableId. LineType distingue uniquement Depot et Other ; aucune catégorie voyageurs/fret n’est inférée. Un nom d’horaire indisponible reste null. Les tags sont des libellés, sans priorité automatique ; un héritage incomplet ou cyclique reste inconnu. VehicleModel.nameEnglish conserve le nom anglais du catalogue.

TrainVehicle décrit un véhicule dans une composition. Le type nimby.Vehicle utilisé par le calcul de conduite est un autre contrat. Ne pas mélanger les classes homonymes des packages nimby et fr.nimby.sdk.

GameInstant

nimby · class
data class GameInstant(val utcSeconds: Long, val microsecond: Int = 0)

Instant UTC du calendrier du jeu, à la microseconde. Années 1 à 9999 ; microsecond vaut de 0 à 999999. Aucune lecture du jeu lors des conversions.

GameInstant.utcSeconds

nimby · val
val utcSeconds: Long

Secondes UTC depuis 1970 dans le calendrier du jeu ; peuvent être négatives.

GameInstant.microsecond

nimby · val
val microsecond: Int = 0

Fraction de la seconde entre 0 et 999999.

GameInstant.dateTime

nimby · fun
fun dateTime(): GameDateTime

Convertit les secondes en date/heure UTC du jeu ; la fraction microsecond n’appartient pas au GameDateTime retourné.

TrainState

nimby · class
enum class TrainState {
    Unknown,
    Driving,
    StationStop,
    TimedStop,
    Depot,
    DispatchWait,
    SignalWait,
    Mothballed,
    NotPresent,
    Other
}

État de service observé. null signifie indisponible ; Unknown et Other sont des résultats observés, pas une absence de donnée.

TrainState.Unknown

nimby · enum-entry
Unknown

Le jeu rapporte un état indéterminé.

TrainState.Driving

nimby · enum-entry
Driving

État de conduite rapporté ; ne prouve pas une vitesse strictement positive.

TrainState.StationStop

nimby · enum-entry
StationStop

Arrêt en gare rapporté.

TrainState.TimedStop

nimby · enum-entry
TimedStop

Arrêt temporisé rapporté.

TrainState.Depot

nimby · enum-entry
Depot

État de dépôt rapporté.

TrainState.DispatchWait

nimby · enum-entry
DispatchWait

Attente de départ/dispatch rapportée.

TrainState.SignalWait

nimby · enum-entry
SignalWait

Attente de signal rapportée ; ce champ ne décrit pas à lui seul la règle du signal.

TrainState.Mothballed

nimby · enum-entry
Mothballed

Train remisé hors exploitation selon l’état rapporté.

TrainState.NotPresent

nimby · enum-entry
NotPresent

Train rapporté non présent ; à distinguer d’un objet absent de la capture.

TrainState.Other

nimby · enum-entry
Other

État observé non représenté par une autre valeur connue de cette enum.

TrainAlert

nimby · class
enum class TrainAlert {
    None,
    LineClosed,
    NoPath,
    InvalidOrders,
    Collision,
    SignalWait,
    ScheduleClosed,
    DispatchTracksOccupied,
    NoServices,
    ServicesAlreadyAssigned,
    Other
}

Alerte observée du train. null signifie indisponible ; None signifie qu’aucune alerte n’est rapportée. Une alerte n’est pas une priorité.

TrainAlert.None

nimby · enum-entry
None

Aucune alerte rapportée.

TrainAlert.LineClosed

nimby · enum-entry
LineClosed

Ligne fermée rapportée.

TrainAlert.NoPath

nimby · enum-entry
NoPath

Absence de chemin rapportée.

TrainAlert.InvalidOrders

nimby · enum-entry
InvalidOrders

Ordres invalides rapportés.

TrainAlert.Collision

nimby · enum-entry
Collision

Collision rapportée par le jeu.

TrainAlert.SignalWait

nimby · enum-entry
SignalWait

Alerte d’attente à un signal.

TrainAlert.ScheduleClosed

nimby · enum-entry
ScheduleClosed

Horaire fermé rapporté.

TrainAlert.DispatchTracksOccupied

nimby · enum-entry
DispatchTracksOccupied

Voies de dispatch occupées selon le jeu.

TrainAlert.NoServices

nimby · enum-entry
NoServices

Aucun service disponible selon le jeu.

TrainAlert.ServicesAlreadyAssigned

nimby · enum-entry
ServicesAlreadyAssigned

Services déjà affectés selon le jeu.

TrainAlert.Other

nimby · enum-entry
Other

Autre code d’alerte observé, non représenté par les valeurs connues.

Station

nimby · class
data class Station(val id: Long, val name: String?)

Gare jointe dans une observation de train ou de plan de ligne. Un nom absent ne prouve pas que la gare n’existe pas.

Station.id

nimby · val
val id: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

Station.name

nimby · val
val name: String?

Nom observé ; null si indisponible.

Station.stationId

nimby · val
val stationId: StationId

Même identité sous le type StationId.

Line

nimby · class
data class Line(val id: Long, val name: String?, val isDepot: Boolean?, val parentLineId: LineId? = null,
                val parentInformationAvailable: Boolean = false, val declaredTags: List<Tag>? = null)

Ligne observée dans un service ou le catalogue. Les informations de parent et de tags sont disponibles seulement lorsqu’elles ont été demandées et validées.

Line.id

nimby · val
val id: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

Line.name

nimby · val
val name: String?

Nom observé de la ligne ; null si indisponible.

Line.isDepot

nimby · val
val isDepot: Boolean?

true : dépôt ; false : autre type observé ; null : classification inconnue.

Line.parentLineId

nimby · val
val parentLineId: LineId? = null

Identité du parent ; interpréter null avec parentInformationAvailable.

Line.parentInformationAvailable

nimby · val
val parentInformationAvailable: Boolean = false

true : l’information de parent a été observée, y compris l’absence de parent. false : un parent absent reste inconnu.

Line.declaredTags

nimby · val
val declaredTags: List<Tag>? = null

Tags déclarés directement sur cet objet, sans héritage implicite. null : indisponibles ou non demandés ; liste vide : aucun tag déclaré observé.

Line.lineId

nimby · val
val lineId: LineId

Même identité sous le type LineId.

Line.type

nimby · val
val type: LineType?

Classification dérivée de isDepot : Depot, Other ou null.

TrainPosition

nimby · class
data class TrainPosition(val trackId: Long, val fraction: Double, val direction: Int?, val station: Station?)

Position copiée d’un train sur une voie. La fraction décrit la position longitudinale, pas une distance en mètres ni une réservation.

TrainPosition.trackId

nimby · val
val trackId: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

TrainPosition.fraction

nimby · val
val fraction: Double

Position entre 0 et 1 selon l’origine de la voie.

TrainPosition.direction

nimby · val
val direction: Int?

+1 de A vers B, -1 de B vers A ; null si inconnu.

TrainPosition.station

nimby · val
val station: Station?

Gare jointe à la voie de position ; null si aucune jointure exploitable.

TrainPosition.track

nimby · val
val track: TrackId

Identité de la voie sous le type TrackId.

TrainAssignment

nimby · class
data class TrainAssignment(val scheduleId: Long?, val shiftId: Long?, val orderIndex: Int?)

Affectation observée d’un train à un horaire, un service et un ordre. N’annonce pas un prochain passage calculé.

TrainAssignment.scheduleId

nimby · val
val scheduleId: Long?

Identité opaque de l’horaire affecté ; null si indisponible.

TrainAssignment.shiftId

nimby · val
val shiftId: Long?

Clé de service dans scheduleId ; ne pas la comparer seule entre horaires.

TrainAssignment.orderIndex

nimby · val
val orderIndex: Int?

Indice d’ordre observé à partir de zéro ; null si indisponible.

TrainAssignment.timetable

nimby · val
val timetable: Timetable?

Horaire construit depuis scheduleId, avec son identité seulement ; null si scheduleId manque.

TrainAssignment.shift

nimby · val
val shift: TimetableShiftId?

Identité composée disponible seulement si horaire et clé de service sont connus.

TrainServiceTimes

nimby · class
data class TrainServiceTimes(
    val gameEpochSeconds: Long?, val gameTimeUs: Long?,
    val arrivalTimeUs: Long?, val departureTimeUs: Long?, val dispatchRetryTimeUs: Long?,
    val arrivalRemainingSeconds: Double?, val departureRemainingSeconds: Double?, val dispatchRetryRemainingSeconds: Double?,
)

Échéances actives et temps restants observés. Une durée peut être disponible sans origine de calendrier. Les conversions conservent null ; aucune date future n’est extrapolée.

TrainServiceTimes.gameEpochSeconds

nimby · val
val gameEpochSeconds: Long?

Origine UTC du calendrier de simulation, en secondes depuis 1970 ; null si inconnue.

TrainServiceTimes.gameTimeUs

nimby · val
val gameTimeUs: Long?

Compteur observé en microsecondes depuis l’origine de simulation ; pas une date Unix.

TrainServiceTimes.arrivalTimeUs

nimby · val
val arrivalTimeUs: Long?

Échéance active d’arrivée en microsecondes depuis l’origine de simulation ; optionnelle.

TrainServiceTimes.departureTimeUs

nimby · val
val departureTimeUs: Long?

Échéance active de départ en microsecondes depuis l’origine de simulation ; optionnelle.

TrainServiceTimes.dispatchRetryTimeUs

nimby · val
val dispatchRetryTimeUs: Long?

Échéance de nouvelle tentative de dispatch, en microsecondes depuis l’origine de simulation.

TrainServiceTimes.arrivalRemainingSeconds

nimby · val
val arrivalRemainingSeconds: Double?

Secondes restantes jusqu’à l’échéance d’arrivée ; peuvent être négatives. Ne représentent pas le retard commercial prévu.

TrainServiceTimes.departureRemainingSeconds

nimby · val
val departureRemainingSeconds: Double?

Secondes restantes jusqu’à l’échéance de départ, bornées à zéro ; null si inconnues.

TrainServiceTimes.dispatchRetryRemainingSeconds

nimby · val
val dispatchRetryRemainingSeconds: Double?

Secondes restantes avant une nouvelle tentative de dispatch, bornées à zéro ; null si inconnues.

TrainServiceTimes.observedAt

nimby · val
val observedAt: GameInstant?

Compteur observé converti en calendrier UTC du jeu ; null si l’origine ou le compteur manque, ou si la conversion dépasse la plage.

TrainServiceTimes.arrival

nimby · val
val arrival: GameInstant?

Date UTC de l’échéance active d’arrivée. null si la conversion est impossible ; ce n’est pas nécessairement l’horaire commercial.

TrainServiceTimes.departure

nimby · val
val departure: GameInstant?

Date UTC de l’échéance active de départ. null si la conversion est impossible ; ce n’est pas nécessairement l’horaire commercial.

TrainServiceTimes.dispatchRetry

nimby · val
val dispatchRetry: GameInstant?

Date UTC de nouvelle tentative de dispatch ; pas une heure commerciale de départ. null si non convertible.

TrainService

nimby · class
data class TrainService(
    val state: TrainState?, val alert: TrainAlert?, val hidden: Boolean?, val onNetwork: Boolean?,
    val locationTrackId: Long?, val locationStation: TrainStation?, val line: TrainLine?,
    val stopTrackId: Long?, val stopStation: TrainStation?, val stopIndex: Int?, val times: TrainServiceTimes,
)

Service observé d’un train, avec état, lieux et échéances indépendamment optionnels. La gare de position, le lieu de service et l’arrêt ciblé ne sont pas interchangeables.

TrainService.state

nimby · val
val state: TrainState?

État de service ; null signifie indisponible, différent de TrainState.Unknown.

TrainService.alert

nimby · val
val alert: TrainAlert?

Alerte observée, optionnelle ; None est une observation sans alerte.

TrainService.hidden

nimby · val
val hidden: Boolean?

Visibilité masquée rapportée par le jeu ; null si inconnue.

TrainService.onNetwork

nimby · val
val onNetwork: Boolean?

Présence sur le réseau rapportée ; null si inconnue. Ne prouve aucune autorisation de mouvement.

TrainService.locationTrackId

nimby · val
val locationTrackId: Long?

Voie du lieu de service observé ; peut différer de la voie de position.

TrainService.locationStation

nimby · val
val locationStation: TrainStation?

Gare du lieu de service observé ; absence de jointure ne prouve pas l’absence de gare.

TrainService.line

nimby · val
val line: TrainLine?

Ligne du service ; null si indisponible.

TrainService.stopTrackId

nimby · val
val stopTrackId: Long?

Voie de l’arrêt actuellement ciblé ; null si inconnue.

TrainService.stopStation

nimby · val
val stopStation: TrainStation?

Gare de l’arrêt ciblé, si résolue.

TrainService.stopIndex

nimby · val
val stopIndex: Int?

Indice de l’arrêt courant dans la ligne, à partir de zéro ; null si inconnu.

TrainService.times

nimby · val
val times: TrainServiceTimes

Échéances du service ; chaque valeur garde sa disponibilité propre.

Train

nimby · class
data class Train(
    val id: Long, val name: String, val position: TrainPosition?, val speedMps: Double?,
    val speedDefaulted: Boolean, val passengers: Int?, val assignment: TrainAssignment?, val service: TrainService?,
    val declaredTags: List<Tag>? = null, val predictedArrivalDelayUs: Long? = null,
    val configured: TrainCharacteristics? = null, val current: TrainCharacteristics? = null,
)

Fiche copiée d’un train. Les groupes de TrainQuery déterminent les données optionnelles ; les données inconnues restent null, sans lecture implicite.

Train.id

nimby · val
val id: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

Train.name

nimby · val
val name: String

Nom du train dans cette observation ; ne remplace pas son identité.

Train.position

nimby · val
val position: TrainPosition?

Position copiée si observable ; null si absente ou indisponible.

Train.speedMps

nimby · val
val speedMps: Double?

Vitesse mesurée en mètres par seconde ; null si inconnue ou remplacée par une valeur de secours.

Train.speedDefaulted

nimby · val
val speedDefaulted: Boolean

Indique une vitesse de secours du jeu. Ce cas laisse la vitesse mesurée inconnue ; il ne prouve pas un arrêt.

Train.passengers

nimby · val
val passengers: Int?

Occupants observés, seulement si demandés ; null ne vaut pas zéro.

Train.assignment

nimby · val
val assignment: TrainAssignment?

Affectation observée ; null si indisponible ou non demandée.

Train.service

nimby · val
val service: TrainService?

Service observé, éventuellement partiel : une lecture de localisation peut fournir présence et lieux sans état de service. Les options du callback peuvent aussi avoir été cumulées. null indique qu’aucune partie utilisable n’a été fournie.

Train.declaredTags

nimby · val
val declaredTags: List<Tag>? = null

Tags déclarés directement sur cet objet, sans héritage implicite. null : indisponibles ou non demandés ; liste vide : aucun tag déclaré observé.

Train.predictedArrivalDelayUs

nimby · val
val predictedArrivalDelayUs: Long? = null

Retard d’arrivée estimé par le jeu, en microsecondes signées ; négatif pour une arrivée prévue en avance. null si inconnu. Ce n’est ni l’âge d’une échéance ni une priorité.

Train.configured

nimby · val
val configured: TrainCharacteristics? = null

Profil configuré/acheté du train, demandé explicitement. Indépendant du matériel actuel : ses valeurs ne remplacent pas celles qui manquent dans current.

Train.current

nimby · val
val current: TrainCharacteristics? = null

Caractéristiques de la composition actuelle, si observables et demandées. Ne pas les remplacer par le profil configuré.

Train.trainId

nimby · val
val trainId: TrainId

Même identité sous le type TrainId.

Train.speedKmh

nimby · val
val speedKmh: Double?

Vitesse mesurée convertie en km/h ; null reste null.

Train.predictedArrivalDelaySeconds

nimby · val
val predictedArrivalDelaySeconds: Double?

Même estimation d’arrivée, convertie de microsecondes en secondes ; conserve le signe et null.

TrainSnapshot

nimby · class
class TrainSnapshot

Copie de trains obtenue par ToolContext.trains. Conservable après le callback ; les recherches lisent uniquement cette copie. Valide les données séparément, sans figer un tick de simulation.

TrainSnapshot.worldId

nimby · val
val worldId: String

Identité du monde observé, à conserver avec sa génération pour identifier la portée des données.

TrainSnapshot.generation

nimby · val
val generation: Long

Génération observée de la partie. Invalider les données dérivées lorsqu’elle change, même si la même sauvegarde est rechargée.

TrainSnapshot.capturedAtMillis

nimby · val
val capturedAtMillis: Long

Horodatage UTC de l’ordinateur, en millisecondes depuis 1970. Il ne mesure pas le temps simulé.

TrainSnapshot.ageMillis

nimby · val
val ageMillis: Long

Âge monotone de la capture au moment de la copie, en millisecondes ; ne se met pas à jour ensuite.

TrainSnapshot.clock

nimby · val
val clock: ToolClock?

Horloge simulée observée ; null si indisponible.

TrainSnapshot.trains

nimby · val
val trains: List<TrainObservation>

Trains copiés selon la requête ; leurs champs facultatifs reflètent les groupes demandés.

TrainSnapshot.vehicleModels

nimby · val
val vehicleModels: List<VehicleModel>? = null

Modèles référencés par les compositions demandées ; null si non demandés ou indisponibles.

TrainSnapshot.get

nimby · fun
operator fun get(id: Long): TrainObservation?

Recherche indexée dans les trains copiés ; null si cet identifiant n’y figure pas. Aucune nouvelle observation.

TrainSnapshot.get

nimby · fun
operator fun get(id: TrainId): Train?

Même recherche locale avec un identifiant typé ; null si absent de cette capture.

TrainSnapshot.lines

nimby · val
val lines: List<Line>?

Catalogue des lignes demandé, même sans train affecté ; null si inconnu ou non demandé.

TrainSnapshot.tags

nimby · val
val tags: List<Tag>?

Catalogue de tags demandé ; null si inconnu ou non demandé.

TrainSnapshot.line

nimby · fun
fun line(id: LineId): Line?

Ligne du catalogue copié ; null si absente, indisponible ou non demandée.

TrainSnapshot.tag

nimby · fun
fun tag(id: TagId): Tag?

Tag du catalogue copié ; null si absent, indisponible ou non demandé.

TrainSnapshot.tagsForLine

nimby · fun
fun tagsForLine(id: LineId): List<Tag>?

Réunit les tags déclarés de la ligne et de ses parents, sans doublons. null si un maillon est inconnu, cyclique ou hors limites ; liste vide seulement pour un héritage connu sans tag.

Stop

nimby · class
data class Stop(val index: Int, val trackId: Long, val station: Station?,
                         val arrivalOffsetSeconds: Int?, val departureOffsetSeconds: Int?)

Arrêt ou waypoint du plan de ligne. Peut être hors gare ; les offsets restent relatifs au plan.

Stop.index

nimby · val
val index: Int

Indice d’arrêt à partir de zéro dans le plan de ligne.

Stop.trackId

nimby · val
val trackId: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

Stop.station

nimby · val
val station: Station?

Gare jointe, si disponible ; un waypoint peut être hors gare.

Stop.arrivalOffsetSeconds

nimby · val
val arrivalOffsetSeconds: Int?

Offset d’arrivée en secondes depuis l’origine du plan ; null si inconnu. Pas une date absolue du train.

Stop.departureOffsetSeconds

nimby · val
val departureOffsetSeconds: Int?

Offset de départ en secondes depuis l’origine du plan ; null si inconnu.

Stop.track

nimby · val
val track: TrackId

Identité typée de la voie de l’arrêt.

Stop.plannedDwellSeconds

nimby · val
val plannedDwellSeconds: Long?

departureOffsetSeconds moins arrivalOffsetSeconds, en secondes ; null si un offset manque.

LinePlan

nimby · class
data class LinePlan(val trainId: Long, val line: Line, val stops: List<Stop>,
                    val worldId: String, val generation: Long, val capturedAtMillis: Long)

Plan complet de la ligne associée au train dans cette capture, obtenu par ToolContext.linePlan. Peut contenir des arrêts hors de la course partielle du train.

LinePlan.trainId

nimby · val
val trainId: Long

Valeur opaque à comparer et transmettre telle quelle ; ne pas la découper ni la réutiliser dans une autre partie.

LinePlan.line

nimby · val
val line: Line

Ligne observée associée au train.

LinePlan.stops

nimby · val
val stops: List<Stop>

Arrêts du plan complet, dans leur ordre ; ne pas les convertir directement en prochains passages du train.

LinePlan.worldId

nimby · val
val worldId: String

Identité du monde observé, à conserver avec sa génération pour identifier la portée des données.

LinePlan.generation

nimby · val
val generation: Long

Génération observée de la partie. Invalider les données dérivées lorsqu’elle change, même si la même sauvegarde est rechargée.

LinePlan.capturedAtMillis

nimby · val
val capturedAtMillis: Long

Horodatage UTC de l’ordinateur, en millisecondes depuis 1970. Il ne mesure pas le temps simulé.

LinePlan.train

nimby · val
val train: TrainId

Identité typée du train qui a servi à demander ce plan.