Créer un mod
Lire trois choix d’un mod de signalisation
Des extraits d’AB Signalisation lumineuse illustrent la séparation entre observation, décision, apparence et conduite.
Une approche observée, une ouverture décidée
Prérequis : connaître signalModel et rules. Ces fragments proviennent d’AB Signalisation lumineuse ; CarreAspect, CarreReason et CarreDecision appartiennent à ce mod. Ils expliquent un mécanisme sans constituer un projet autonome.
observeApproach(blocks = 2)if (!context.trainApproaching)
return closed(CarreReason.AwaitingApproach)
return CarreDecision(CarreAspect.Warning, CarreReason.ApproachConfirmed)Le SDK fournit l’observation d’approche ; le mod choisit si elle permet d’ouvrir. Les réglages, la fraîcheur, la panne, l’arrêt forcé et l’occupation aval sont traités avant ces lignes. La tolérance éventuelle à un aval inconnu appartient au modèle concerné, pas à tous les signaux.
Préparer une animation réutilisable
private val redFlash = blink(
on = "imgs/ca/sem_bal/tex09.svg",
off = "imgs/ca/sem_bal/tex10.svg",
everyMs = 500
)appearance { BalTextures.forAspect(it.aspect) }Le mod prépare les descriptions une seule fois et choisit celle de l’aspect courant. Le SDK utilise le temps simulé pour déterminer la phase. Le callback ne doit pas alterner lui-même les images selon l’horloge réelle. Un modèle fixe peut simplement déclarer images.
Relier une consigne au motif de fermeture
BalAspect.S ->
if (decision.reason == BalReason.BlockOccupied)
AutomaticDriving.restrictedUntilNextSignal(
entrySpeedMps = 0.0,
maximumSpeedMps = ON_SIGHT_SPEED,
stopFirst = true
)
else AutomaticDriving.stop()Pour une fermeture due à l’occupation, AB Signalisation lumineuse demande ici un arrêt avant une marche limitée jusqu’au prochain signal. D’autres motifs demandent un arrêt sans cette permission. ON_SIGHT_SPEED est une vitesse choisie par le mod, en m/s. Cet extrait ne crée pas une règle ferroviaire universelle.