Boucle de détection
Une boucle de fil scellée dans la route qui sent les joueurs, créatures, wagonnets, bateaux et dirigeables au-dessus d'elle.
La Boucle de détection, c'est la boucle de fil que les vraies routes cachent sous le bitume, devant un feu, pour savoir qu'une voiture attend. Posez-la dans la route, sous les rails ou dans une aire d'atterrissage : elle sent ce qui stationne ou passe dans les deux blocs au-dessus d'elle, émet un signal de redstone, et dit à un ordinateur combien de choses s'y trouvent.
local boucle = peripheral.wrap("right")
if boucle.detected() then
print(boucle.count() .. " en attente au feu")
endloop.detected() | Indique si quelque chose se trouve au-dessus de la boucle maintenant. |
loop.count() | Combien de choses sont au-dessus de la boucle maintenant, comptées comme décrit dans l'installation plus haut. |
Installation
La poser. C'est un bloc plein : mettez-la dans le revêtement de la route, sous un rail, ou dans le sol d'un hangar. Elle surveille l'espace de deux blocs juste au-dessus d'elle.
Ce qu'elle sent. Chacun de ceux-ci compte pour un :
- les joueurs et toutes les créatures ou animaux (villageois, vaches, zombies...), porte-armures compris ;
- les wagonnets de toutes sortes, et les bateaux ;
- toute autre entité qui porte un passager, comme une machine mobile de Create avec quelqu'un sur son siège ;
- avec Create Aeronautics, chaque dirigeable ou véhicule dont l'encombrement croise l'espace au-dessus de la boucle, quelle que soit sa taille. Une boucle construite dans un véhicule ne compte pas le véhicule qui la porte.
Les objets au sol, les flèches et les orbes d'expérience sont ignorés, tout comme une machine mobile de Create vide, train compris. Un joueur dans un wagonnet compte deux fois : le joueur et le wagonnet.
Sa propre redstone. Quatre fois par seconde, la boucle regarde au-dessus d'elle. Tant que quelque chose s'y trouve, elle donne un signal de 15 aux blocs à côté d'elle et en dessous, jamais au bloc au-dessus (la route). Une lampe ou de la poudre de redstone à côté s'allume sans aucun ordinateur.
La joindre depuis un ordinateur. Posez-la contre une face de l'ordinateur (peripheral.wrap("left")), ou contre un Câble de données du réseau de l'ordinateur, à partir du Mini-ordinateur : un câble passé sous la route joint toutes les boucles d'un carrefour, chacune nommée d'après ses coordonnées (inductive_loop@120,63,-35). peripheral.find("inductive_loop") prend la première trouvée. Voir Périphériques.
Quand la boucle touche l'ordinateur par le côté ou par le dessus, son signal arrive sur cette face : os.pull_event("redstone") réveille alors votre programme exactement quand quelque chose arrive ou quand la dernière chose s'en va, et le programme ne coûte rien entre-temps.
Détection
Les deux méthodes regardent au-dessus de la boucle au moment où vous les appelez : elles n'attendent pas la vérification de la boucle elle-même, quatre fois par seconde.
Indique si quelque chose se trouve au-dessus de la boucle maintenant.
- boolean
truequand au moins une chose est au-dessus de la boucle
C'est la question que pose un feu : une voiture attend-elle ?
local boucle = peripheral.wrap("right")
local feu = peripheral.wrap("left")
feu.set("red")
repeat
sleep(0.5)
until boucle.detected()
feu.set("red_amber")
sleep(2)
feu.set("green")Voir aussi inductive_loop.count()
Combien de choses sont au-dessus de la boucle maintenant, comptées comme décrit dans l'installation plus haut.
- number
- combien de choses sont au-dessus de la boucle, 0 quand il n'y a rien
local boucle = peripheral.find("inductive_loop")
print(boucle.count(), "en attente")count() en dit plus que detected() : une file de trois wagonnets, un joueur seul (1) ou un joueur dans un wagonnet (2), deux dirigeables sur la même aire.
Voir aussi inductive_loop.detected()
Exemples
Compter les wagonnets qui passent
Une boucle sous les rails d'une gare. Chaque fois que le compte monte, de nouveaux wagonnets sont arrivés au-dessus de la boucle : additionner ces hausses compte les wagonnets passés. Une Liaison d'affichage tournée vers l'ordinateur affiche le total.
local boucle = peripheral.find("inductive_loop")
local passes = 0
local avant = 0
while true do
local maintenant = boucle.count()
if maintenant > avant then
passes = passes + maintenant - avant
print("wagonnets passés : " .. passes)
display.set({"Wagonnets du jour", tostring(passes)})
end
avant = maintenant
sleep(0.1)
endDix vérifications par seconde suffisent : un wagonnet à pleine vitesse reste environ un quart de seconde au-dessus de la boucle.
Une aire d'atterrissage pour dirigeables
Des boucles dans le sol d'une aire d'atterrissage, sur le câble de l'ordinateur. Quand un dirigeable se pose, la porte du hangar s'ouvre (un Piston mécanique de Create, une porte ou un portique sur la sortie du dessus) ; quand il décolle, elle se referme.
local aire = peripheral.find("inductive_loop")
local amarre = false
while true do
local present = aire.detected()
if present ~= amarre then
amarre = present
rs.set("top", present)
if present then
print("dirigeable amarré")
else
print("aire libre")
end
end
sleep(0.5)
endUn joueur qui traverse l'aire ouvre aussi la porte. Pour distinguer un dirigeable d'un piéton, posez une seconde boucle à l'autre bout de l'aire, là où seul un long vaisseau arrive, et attendez que les deux voient quelque chose.
Attendre une voiture avec un évènement
La boucle est contre la face gauche de l'ordinateur. Le programme dort jusqu'à ce que la redstone de la boucle change :
while true do
os.pull_event("redstone")
if rs.get("left") > 0 then
print("une voiture est arrivée")
else
print("la voie est libre")
end
end