Create: Computing AgesDoc Brass
Périphériques

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.

Brass
local boucle = peripheral.wrap("right")
if boucle.detected() then
  print(boucle.count() .. " en attente au feu")
end
Méthodes
loop.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.

Attendre sans interroger

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.

#

loop.detected()

→ boolean

Indique si quelque chose se trouve au-dessus de la boucle maintenant.

Renvoie
boolean
true quand au moins une chose est au-dessus de la boucle

C'est la question que pose un feu : une voiture attend-elle ?

Brass
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()

#

loop.count()

→ number

Combien de choses sont au-dessus de la boucle maintenant, comptées comme décrit dans l'installation plus haut.

Renvoie
number
combien de choses sont au-dessus de la boucle, 0 quand il n'y a rien
Brass
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.

Brass
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)
end

Dix 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.

Brass
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)
end

Un 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 :

Brass
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