NRF Guide

Référence

Mod

Observations, réglages, décisions et contrats de signalisation et de conduite.

Contexte d’utilisation

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

Signatures extraites de la version 0.8.0-alpha.1. Les paramètres, leurs valeurs par défaut et les propriétés de constructeur sont conservés. Les corps des méthodes ne font pas partie de cette référence.

Unités et données inconnues

Propriété / familleUnité ou sens
speedMps, reopenedSpeedMpsmètres par seconde ; km/h ÷ 3,6.
beginM, endM, headM, lengthM, marginMmètres.
…Mps2mètres par seconde carrée.
emptyMassKg, extraMassKgkilogrammes.
tractiveEffortN / powerWnewtons / watts.
Observation.freshLa fraîcheur des observations reçues.
Occupancy.UnknownAbsence de preuve de canton libre ou occupé.
DrivingPlan.availableDisponibilité du calcul du mod, pas permission native.

Signal, Observation et DrivingSettings de nimby concernent le mod natif. Les types de même nom dans fr.nimby.sdk appartiennent au client JVM : vérifiez vos imports.

Checkbox

nimby · class
data class Checkbox(val name: String, val label: String, val description: String, val defaultValue: Boolean = false,
    /** Pour un avertissement importé : visible tant qu'il reste à acquitter. */
    val onlyWhenEnabled: Boolean = false)

API de mod Kotlin. Les unités sont mètres, secondes, m/s, kg, N et W.

SignalType

nimby · class
data class SignalType(
    val id: String,
    val title: String,
    val textureSet: String,
    val checkboxes: List<Checkbox> = emptyList(),
    /** Demande l'observation du premier train orienté vers ce signal.
     * Ne constitue pas une réservation ni une autorisation de mouvement. */
    val observeApproach: Boolean = false,
    val actions: List<SignalAction> = emptyList()
)

Un modèle constructible du mod. Les identifiants restent stables entre versions pour retrouver les textures et les réglages des parties existantes. Les noms de cases sont locaux au type : deux types peuvent avoir une case « active » avec des valeurs par défaut différentes.

Occupancy

nimby · class
enum class Occupancy {
Unknown, Clear, Occupied
}

SettingsStatus

nimby · class
enum class SettingsStatus {
Unavailable, Absent, Present
}

Observation

nimby · class
data class Observation(
    val block: Occupancy = Occupancy.Unknown, val fresh: Boolean = false,
    val routeKnown: Boolean = false, val forcedStop: Boolean = false,
    val lampFailed: Boolean = false, val redFlashCondition: Boolean = false, val next: Int = 0,
    val approachingTrain: Long? = null
)

Decision

nimby · class
data class Decision(val aspect: Int, val reason: Int)

Transport opaque, propre à la déclaration du mod. Ne pas persister ces codes ni les utiliser comme indices d'enum : SignallingMod.indication les décode. Les recettes du banc utilisent séparément les ordinaux locaux du modèle.

Signal

nimby · class
data class Signal(
    val id: Long = 0, val nextSignal: Long = 0, val settings: Map<String, Boolean> = emptyMap(),
    val observation: Observation = Observation(), val settingsStatus: SettingsStatus = SettingsStatus.Present,
    /** Identifiant de SignalType, fourni par le SDK à partir du catalogue observé. */
    val type: String = ""
)

Vehicle

nimby · class
data class Vehicle(
    val maxSpeedMps: Double = 0.0, val maxAccelerationMps2: Double = 0.0,
    val serviceBrakingMps2: Double = 0.0, val tractiveEffortN: Double = 0.0,
    val powerW: Double = 0.0, val emptyMassKg: Double = 0.0,
    val extraMassKg: Double = 0.0, val lengthM: Double = 0.0
)

DrivingSettings

nimby · class
data class DrivingSettings(val brakeUse: Double = 0.8, val responseSeconds: Double = 2.0, val marginM: Double = 10.0)

Constraint

nimby · class
data class Constraint(val source: Long, val beginM: Double, val endM: Double, val speedMps: Double, val releaseByRear: Boolean = true)

DrivingInput

nimby · class
data class DrivingInput(
    val headM: Double = 0.0, val speedMps: Double = 0.0, val lineSpeedMps: Double = 0.0,
    val fresh: Boolean = false, val routeKnown: Boolean = false,
    val onSight: Boolean = false, val visibleClearM: Double? = null
)

DrivingPlan

nimby · class
data class DrivingPlan(
    val available: Boolean = false, val speedCeilingMps: Double = 0.0,
    val serviceDecelerationMps2: Double = 0.0, val accelerationMps2: Double = 0.0,
    val brakingRequired: Boolean = false, val limitingSource: Long = 0
)

DrivingFlag

nimby · class
enum class DrivingFlag(val bit: Int) {
Clear(1), HoldToClear(2), Stop(4), FollowTarget(8), OnSight(16), StopThenProceed(32), CancelAtNextClear(64),
    /** Passage permis selon la vitesse memorisee
}

DrivingRule

nimby · class
data class DrivingRule(
    val speedMps: Double = -1.0, val reopenedSpeedMps: Double = 0.0,
    val signalsAhead: Int = 0, val flags: Set<DrivingFlag> = emptySet()
)

SignallingMod

nimby · class
abstract class SignallingMod : GameMod()

Une seule implémentation Kotlin suffit. Le SDK fournit DLL, exports et boucle de lecture.

SignallingMod.textureSet

nimby · val
open val textureSet: String = ""

SignallingMod.checkboxes

nimby · val
open val checkboxes: List<Checkbox> = emptyList()

SignallingMod.signalTypes

nimby · val
open val signalTypes: List<SignalType> get() = listOf(SignalType(id, title, textureSet, checkboxes))

SignallingMod.migrateSettings

nimby · fun
open fun migrateSettings(type: String, saved: Map<String, Boolean>): Map<String, Boolean> = saved

Convertit les anciennes cases lors du chargement d'un profil sauvegardé. Ne reçoit que les valeurs enregistrées, sans inventer de valeurs absentes. Retourner les nouvelles clés ; le SDK complète leurs valeurs par défaut.

SignallingMod.maximumLineSpeed

nimby · val
open val maximumLineSpeed = false

SignallingMod.diagnosticFile

nimby · val
open val diagnosticFile: String = "nimby-kotlin-faults.jsonl"

SignallingMod.unknownDecision

nimby · val
abstract val unknownDecision: Decision

SignallingMod.invalidNetworkDecision

nimby · val
abstract val invalidNetworkDecision: Decision

SignallingMod.modelLocalIndications

nimby · val
open val modelLocalIndications: Boolean = false

Le pont natif conserve alors le propriétaire de chaque indication.

SignallingMod.unknownDecision

nimby · fun
open fun unknownDecision(type: String): Decision = unknownDecision

SignallingMod.invalidNetworkDecision

nimby · fun
open fun invalidNetworkDecision(type: String): Decision = invalidNetworkDecision

SignallingMod.indication

nimby · fun
open fun indication(decision: Decision): SignalIndication? = null

Lecture typée des décisions produites par signalModel ; null pour un code inconnu.

SignallingMod.evaluate

nimby · fun
abstract fun evaluate(settings: Map<String, Boolean>, observation: Observation): Decision

SignallingMod.evaluate

nimby · fun
open fun evaluate(type: String, settings: Map<String, Boolean>, observation: Observation): Decision =

Calcul isolé d'un type. Le réseau utilise decide et Signal.type. Les décisions brutes sont opaques ; indication permet leur lecture typée.

SignallingMod.decide

nimby · fun
abstract fun decide(signal: Signal, next: Decision?): Decision?

SignallingMod.fromLive

nimby · fun
open fun fromLive(signal: Signal): Signal = signal

SignallingMod.texture

nimby · fun
abstract fun texture(decision: Decision, simulationMs: Long, halfPeriodMs: Long): String

SignallingMod.forcedDecision

nimby · fun
open fun forcedDecision(aspect: Int): Decision? = null

Indication de recette autorisee par le mod. Null refuse le code. Le motif determine aussi la conduite : arret absolu ou permissif. Aucun aspect, motif ni vitesse ne sont interpretes par le SDK.

SignallingMod.forcedDecision

nimby · fun
open fun forcedDecision(type: String, aspect: Int): Decision? = forcedDecision(aspect)

SignallingMod.drivingRule

nimby · fun
abstract fun drivingRule(decision: Decision): DrivingRule?

SignallingMod.isFault

nimby · fun
abstract fun isFault(decision: Decision): Boolean

SignallingMod.isActive

nimby · fun
open fun isActive(decision: Decision): Boolean = true

SignallingMod.aspectName

nimby · fun
open fun aspectName(aspect: Int): String = aspect.toString()

SignallingMod.reasonName

nimby · fun
abstract fun reasonName(reason: Int): String

SignallingMod.plan

nimby · fun
open fun plan(vehicle: Vehicle, settings: DrivingSettings, input: DrivingInput, constraints: List<Constraint>) = DrivingPlan()

evaluateNetwork

nimby · fun
fun SignallingMod.evaluateNetwork(input: List<Signal>): List<Decision>

Résolution des liens, commune aux mods et aux tests, sans récursion profonde.