Référence
SignalMod
Indication et ancienne déclaration à vocabulaire commun ; préférer signalModel pour les nouveaux projets.
Contexte d’utilisation
| Module | Package | Source SDK |
|---|---|---|
| Kotlin/Native | nimby | kotlin/src/nimby/SignalMod.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.
Indication
data class Indication<A : Enum<A>, R : Enum<R>>(val aspect: A, val reason: R)Indication typée d'un modèle : deux enums Kotlin, sans code natif à manipuler. Les recettes utilisent leurs ordinaux locaux au modèle. Ajouter les nouvelles valeurs à la fin si des recettes utilisent déjà ces codes.
SignalModDsl
annotation class SignalModDslSignalContext
class SignalContext<A : Enum<A>, R : Enum<R>>Contexte d'une règle. [next] est null lors du premier calcul ; retourner null demande au SDK de résoudre le signal suivant puis de rappeler la règle. Si le suivant est absent ou si le réseau boucle, le SDK utilise le repli `invalidNetwork` choisi par le mod. Aucune règle nationale n'est implicite. Construction réservée au SDK : utilisez la fonction de création ou le contexte fourni.
SignalContext.signal
val signal: SignalSignalContext.next
val next: Indication<A, R>?SignalContext.observation
val observation: Observation get() = signal.observationSignalContext.block
val block: Occupancy get() = observation.blockSignalContext.fresh
val fresh: Boolean get() = observation.freshSignalContext.routeKnown
val routeKnown: Boolean get() = observation.routeKnownSignalContext.approachingTrain
val approachingTrain: Long? get() = observation.approachingTrainSignalContext.settingsStatus
val settingsStatus: SettingsStatus get() = signal.settingsStatusSignalContext.enabled
fun enabled(option: Checkbox): BooleanUne valeur absente prend le défaut déclaré. Un profil indisponible reste identifiable par [settingsStatus] : ce défaut ne prouve pas sa validité.
SignalDefinition
class SignalDefinition<A : Enum<A>, R : Enum<R>>Configuration d'un modèle constructible. Les callbacks n'effectuent aucun appel natif : ils se testent avec de simples valeurs Kotlin. Construction réservée au SDK : utilisez la fonction de création ou le contexte fourni.
SignalDefinition.observeApproach
var observeApproach: Boolean = base.observeApproachSignalDefinition.checkbox
fun checkbox(name: String, label: String, description: String = "", defaultValue: Boolean = false,
onlyWhenEnabled: Boolean = false): Checkbox =SignalDefinition.rules
fun rules(block: SignalContext<A, R>.() -> Indication<A, R>?)SignalDefinition.action
fun action(id: String, label: String, whenMod: String, service: String)Affiché seulement si le fournisseur et son service sont disponibles. Aucune dépendance obligatoire et aucun appel de mod depuis le thread UI.
SignalDefinition.evaluate
fun evaluate(block: (Map<String, Boolean>, Observation) -> Indication<A, R>)Facultatif : calcul isolé sans résolution du réseau, pour les diagnostics.
SignalDefinition.migrateSettings
fun migrateSettings(block: (Map<String, Boolean>) -> Map<String, Boolean>)SignalDefinition.prepareObservation
fun prepareObservation(block: (Signal) -> Signal)SignalDefinition.allowForcedAspect
fun allowForcedAspect(block: (A) -> Indication<A, R>?)Sans ce callback, toute demande de forçage d'indication est refusée.
SignalModBuilder
class SignalModBuilder<A : Enum<A>, R : Enum<R>>Déclaration du mod. Les replis, images, vitesses et permissions viennent exclusivement du mod. Le SDK prend en charge les exports et le réseau. Construction réservée au SDK : utilisez la fonction de création ou le contexte fourni.
SignalModBuilder.maximumLineSpeed
var maximumLineSpeed: Boolean = falseSignalModBuilder.diagnosticFile
var diagnosticFile: String = "nimby-kotlin-faults.jsonl"SignalModBuilder.signal
fun signal(id: String, title: String, textures: String, block: SignalDefinition<A, R>.() -> Unit) =SignalModBuilder.signal
fun signal(type: SignalType, block: SignalDefinition<A, R>.() -> Unit)Permet de conserver une déclaration partagée avec des tests ou un éditeur.
SignalModBuilder.images
fun images(block: (Indication<A, R>) -> String)SignalModBuilder.animatedImages
fun animatedImages(block: (Indication<A, R>, Long, Long) -> String)Temps simulé et demi-période en millisecondes, jamais l'heure du PC.
SignalModBuilder.driving
fun driving(block: (Indication<A, R>) -> DrivingRule?)SignalModBuilder.faults
fun faults(block: (Indication<A, R>) -> Boolean)SignalModBuilder.activeWhen
fun activeWhen(block: (Indication<A, R>) -> Boolean)SignalModBuilder.aspectNames
fun aspectNames(block: (A) -> String)SignalModBuilder.reasonNames
fun reasonNames(block: (R) -> String)SignalModBuilder.drivingPlan
fun drivingPlan(block: (Vehicle, DrivingSettings, DrivingInput, List<Constraint>) -> DrivingPlan)signalMod
inline fun <reified A : Enum<A>, reified R : Enum<R>> signalMod(
id: String, title: String, fallback: Indication<A, R>,
invalidNetwork: Indication<A, R> = fallback,
noinline block: SignalModBuilder<A, R>.() -> Unit
): SignallingMod = buildSignalMod(id, title, fallback, invalidNetwork, enumValues<A>().toList(), enumValues<R>().toList(), block)Ancienne déclaration à vocabulaire commun. Pour des modèles indépendants, préférer [signalModel] et la surcharge signalMod(id, title) { signal(model) }. [fallback] couvre les observations inconnues ; [invalidNetwork] couvre les liens absents et les cycles sans décision locale.