NRF SDK 0.9

Lire et agir

Tester un mod avec des forçages temporaires

Ouvrir une session de recette, observer les décisions et libérer les forçages de manière explicite.

Un scénario lié au contrat du mod

Ce parcours suppose une application JVM connectée et un mod qui accepte les opérations de recette. Commencez par game.mods.status(modId). Les codes d’aspect et indices de réglages appartiennent au mod testé : prenez-les dans ses déclarations, sans attribuer une signification universelle à un entier.

Fonction JVM : acquisition, action et libération par use
package wiki.controlrecipe

import fr.nimby.sdk.ControlResponse
import fr.nimby.sdk.Game
import fr.nimby.sdk.ModControlSession

fun <T> withSignalRecipe(
    game: Game,
    modId: String,
    signalId: Long,
    aspectFromMod: Int,
    observe: (ModControlSession, ControlResponse) -> T,
): T = game.mods.control(modId, leaseMillis = 5_000).use { recipe ->
    val accepted = recipe.forceSignal(signalId, aspectFromMod)
    observe(recipe, accepted)
}

La fonction observe fournie par votre application organise les lectures de recette pendant le bail. forceSignal accepte une demande ; sa réponse seule ne prouve pas que le prochain calcul du mod a déjà affiché cet aspect. Utilisez recipe.readSignal(signalId), puis les observations du jeu, pour vérifier le résultat attendu.

LectureSens de active
readSignal0 : aucun forçage ; 1 : forçage demandé ; 2 : dernière décision observée conforme au forçage.
readTrainÉtat TrainControlState : Absent, AwaitingExit, Active, Completed ou Cancelled. Il ne constitue pas une permission de mouvement.

constrainTrain exprime une vitesse en m/s, un mode et éventuellement un signal de sortie. releaseByRear choisit une libération par l’arrière du train ; false correspond à la tête. setSetting modifie temporairement un réglage booléen ; ce n’est pas une écriture de configuration sauvegardée. Les compteurs décrivent les forçages demandés, pas le nombre de décisions déjà exécutées.

Limiter la durée et gérer une réponse incertaine

  • Le bail dure de 1 000 à 60 000 ms. Aucun renouvellement en arrière-plan : renew est un choix explicite de la recette.
  • restoreSignal, restoreTrain et restoreSetting libèrent une cible ; clear libère les forçages de la session. close libère le bail et use appelle close.
  • Si le programme disparaît ou ne peut plus libérer le bail, son expiration retire les forçages temporaires.
  • Après une erreur, inspectez status et les observations avant une nouvelle écriture. Une absence de réponse ne prouve pas que la demande a été ignorée.

Tester l’apparence séparément

game.signals.showTexture(id, catalogue, image, durationMillis) remplace temporairement l’image pour 1 à 60 secondes ; restoreTexture retire ce remplacement. Le catalogue et l’image doivent désigner des ressources valides. Cette opération concerne l’affichage uniquement : elle ne force ni aspect logique, ni permission, ni freinage.