Référence
Mod
Observations, réglages, décisions et contrats de signalisation et de conduite.
Contexte d’utilisation
| Module | Package | Source SDK |
|---|---|---|
| Kotlin/Native | nimby | kotlin/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é / famille | Unité ou sens |
|---|---|
| speedMps, reopenedSpeedMps | mètres par seconde ; km/h ÷ 3,6. |
| beginM, endM, headM, lengthM, marginM | mètres. |
| …Mps2 | mètres par seconde carrée. |
| emptyMassKg, extraMassKg | kilogrammes. |
| tractiveEffortN / powerW | newtons / watts. |
| Observation.fresh | La fraîcheur des observations reçues. |
| Occupancy.Unknown | Absence de preuve de canton libre ou occupé. |
| DrivingPlan.available | Disponibilité 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
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
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
enum class Occupancy {
Unknown, Clear, Occupied
}SettingsStatus
enum class SettingsStatus {
Unavailable, Absent, Present
}Observation
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
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
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
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
data class DrivingSettings(val brakeUse: Double = 0.8, val responseSeconds: Double = 2.0, val marginM: Double = 10.0)Constraint
data class Constraint(val source: Long, val beginM: Double, val endM: Double, val speedMps: Double, val releaseByRear: Boolean = true)DrivingInput
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
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
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
data class DrivingRule(
val speedMps: Double = -1.0, val reopenedSpeedMps: Double = 0.0,
val signalsAhead: Int = 0, val flags: Set<DrivingFlag> = emptySet()
)SignallingMod
abstract class SignallingMod : GameMod()Une seule implémentation Kotlin suffit. Le SDK fournit DLL, exports et boucle de lecture.
SignallingMod.textureSet
open val textureSet: String = ""SignallingMod.checkboxes
open val checkboxes: List<Checkbox> = emptyList()SignallingMod.signalTypes
open val signalTypes: List<SignalType> get() = listOf(SignalType(id, title, textureSet, checkboxes))SignallingMod.migrateSettings
open fun migrateSettings(type: String, saved: Map<String, Boolean>): Map<String, Boolean> = savedConvertit 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
open val maximumLineSpeed = falseSignallingMod.diagnosticFile
open val diagnosticFile: String = "nimby-kotlin-faults.jsonl"SignallingMod.unknownDecision
abstract val unknownDecision: DecisionSignallingMod.invalidNetworkDecision
abstract val invalidNetworkDecision: DecisionSignallingMod.modelLocalIndications
open val modelLocalIndications: Boolean = falseLe pont natif conserve alors le propriétaire de chaque indication.
SignallingMod.unknownDecision
open fun unknownDecision(type: String): Decision = unknownDecisionSignallingMod.invalidNetworkDecision
open fun invalidNetworkDecision(type: String): Decision = invalidNetworkDecisionSignallingMod.indication
open fun indication(decision: Decision): SignalIndication? = nullLecture typée des décisions produites par signalModel ; null pour un code inconnu.
SignallingMod.evaluate
abstract fun evaluate(settings: Map<String, Boolean>, observation: Observation): DecisionSignallingMod.evaluate
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
abstract fun decide(signal: Signal, next: Decision?): Decision?SignallingMod.fromLive
open fun fromLive(signal: Signal): Signal = signalSignallingMod.texture
abstract fun texture(decision: Decision, simulationMs: Long, halfPeriodMs: Long): StringSignallingMod.forcedDecision
open fun forcedDecision(aspect: Int): Decision? = nullIndication 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
open fun forcedDecision(type: String, aspect: Int): Decision? = forcedDecision(aspect)SignallingMod.drivingRule
abstract fun drivingRule(decision: Decision): DrivingRule?SignallingMod.isFault
abstract fun isFault(decision: Decision): BooleanSignallingMod.isActive
open fun isActive(decision: Decision): Boolean = trueSignallingMod.aspectName
open fun aspectName(aspect: Int): String = aspect.toString()SignallingMod.reasonName
abstract fun reasonName(reason: Int): StringSignallingMod.plan
open fun plan(vehicle: Vehicle, settings: DrivingSettings, input: DrivingInput, constraints: List<Constraint>) = DrivingPlan()evaluateNetwork
fun SignallingMod.evaluateNetwork(input: List<Signal>): List<Decision>Résolution des liens, commune aux mods et aux tests, sans récursion profonde.