Create: Computing AgesDoc Brass
Périphériques

Moniteurs

Des écrans cathodiques et LCD qui affichent le terminal de l'ordinateur qu'ils touchent, jusqu'à 8 blocs sur 6, et se laissent presser.

Un moniteur affiche, dans le monde, l'écran de l'ordinateur qu'il touche : le même texte, les mêmes couleurs, les mêmes dessins gfx. Ce n'est pas un second écran avec son propre contenu : tout ce que votre programme écrit dans son terminal apparaît sur le moniteur, et chacun peut lire un état des stocks, un tableau des départs ou un altimètre sans ouvrir l'ordinateur. Plusieurs moniteurs côte à côte forment un seul grand écran, et les joueurs peuvent appuyer dessus comme sur un écran tactile.

Brass
local ecran = peripheral.wrap("top")
local s = ecran.size()
print("l'écran fait " .. s.w .. " blocs sur " .. s.h)
Méthodes
monitor.size()La taille de l'écran, en blocs : pour un mur, le mur entier, quel que soit le bloc que vous avez pris.

Installation

Deux modèles. Ils fonctionnent de la même façon, seule leur allure change :

blocécran
Moniteur cathodique (âge du transistor)cadre épais ; il luit comme le tube de l'ordinateur : vert pour le Calculateur à tubes et l'Ordinateur à transistors, ambre pour le Mini-ordinateur, en couleurs à partir du Micro-ordinateur
Moniteur LCD (âge numérique)cadre fin ; toujours en couleurs, même pour un ordinateur plus ancien dont l'écran est monochrome

Afficher un ordinateur. Placez le moniteur de façon qu'il touche l'ordinateur, par son dos, un côté, le dessus ou le dessous, tout sauf sa face écran. L'écran est tourné vers vous quand vous le posez. Seul un moniteur qui touche l'ordinateur l'affiche : un Câble de données ne transporte pas l'image. Ne faites toucher un écran que par un seul ordinateur ; avec deux, il n'en affiche qu'un.

Les grands écrans. Des moniteurs du même modèle (cathodique avec cathodique, LCD avec LCD), tournés du même côté, posés côte à côte en un rectangle plat, forment un seul écran, jusqu'à 8 blocs de large et 6 de haut. Un seul ordinateur qui touche n'importe quel bloc du rectangle suffit. Si la forme n'est pas un rectangle plein (un trou, une forme en L) ou dépasse 8 sur 6, chaque bloc reste un petit écran à part.

Un mur plus grand, des lettres plus grandes. Un mur montre le même terminal (51 caractères sur 19 sur un Micro-ordinateur, voir Les ordinateurs) avec des caractères plus gros : vous n'obtenez pas plus de lignes. L'image garde ses proportions, centrée, avec des marges sombres là où la forme du mur diffère. Les formes qui remplissent le mieux :

ordinateurmeilleurs murs
Ordinateur à transistors, Mini-ordinateur, Micro-ordinateur, Ordinateur moderne7 × 4, puis 5 × 3
Microcontrôleur (un écran plus large)2 × 1, 4 × 2, 8 × 4
Calculateur à tubes7 × 4, 8 × 4

L'écran s'éteint quand l'ordinateur cesse de tourner. Les joueurs le voient jusqu'à 64 blocs.

Appuyer sur l'écran. Un clic droit sur un moniteur ouvre le terminal de son ordinateur, même depuis l'autre bout d'un mur. Tant que le programme en cours attend des clics (il a appelé os.pull_event("click") ou os.pull_event()), un clic droit sur la face écran appuie sur l'écran à la place (un crayon optique sur le cathodique, un écran tactile sur le LCD), et accroupi + clic droit ouvre toujours le terminal. Le programme reçoit un évènement click avec le caractère (e.x, e.y) et le pixel gfx (e.px, e.py) sous votre main, e.button à 1 et e.source à "monitor". Un appui sur le cadre ou dans les marges sombres est ignoré. Les appuis sur un moniteur marchent sur tous les ordinateurs, Calculateur à tubes compris, alors que les clics dans la fenêtre du terminal ne marchent pas sur le papier de son téléscripteur. Voir Écrans et moniteurs et Évènements.

Le joindre depuis un ordinateur. Le moniteur est aussi un périphérique, pour lire sa taille : contre une face (peripheral.wrap("top")), ou sur un Câble de données à partir du Mini-ordinateur (monitor@120,65,-35, chaque bloc d'un mur sous son propre nom). peripheral.find("monitor") regarde d'abord les faces : il trouve donc l'écran qu'affiche l'ordinateur.

Taille de l'écran

#

monitor.size()

→ table

La taille de l'écran, en blocs : pour un mur, le mur entier, quel que soit le bloc que vous avez pris.

Renvoie
table
{w = largeur, h = hauteur}, la taille en blocs de tout l'écran dont fait partie ce moniteur

Le terminal a la même taille quel que soit le mur : ce n'est donc pas le nombre de caractères (c'est term.get_size). Servez-vous-en pour adapter l'allure d'un programme à l'écran qui l'affiche, par exemple pour dessiner des lettres plus grandes sur un petit écran qu'on lit de loin :

Brass
local ecran = peripheral.find("monitor")
if ecran == nil then
  error("aucun moniteur ne touche l'ordinateur")
end
local s = ecran.size()
local echelle = 2
if s.w * s.h <= 4 then
  echelle = 4  -- un ou deux blocs : le texte doit se lire depuis le quai
end
gfx.clear("black")
gfx.text(4, 4, "QUAI 2", "yellow", echelle)

Un moniteur seul donne {w = 1, h = 1}. Quand le bloc n'est plus un moniteur, l'appel arrête le programme avec monitor removed.

Exemples

Un tableau des départs

Le programme dessine sur son propre écran ; un mur de 7 × 4 Moniteurs LCD contre l'ordinateur le montre à tout le quai. Ici, les départs sont écrits dans le programme ; un vrai tableau les construirait à partir des messages net envoyés par les ordinateurs des trains.

Brass
local departs = {
  {"06:10", "MINE DE FER", "1"},
  {"06:25", "PORT", "2"},
  {"06:40", "LAITONNERIE", "1"},
  {"07:05", "FERME NORD", "3"},
}
gfx.clear("blue")
gfx.text(10, 8, "DEPARTS", "yellow", 3)
gfx.text(250, 10, "06:02", "white", 2)
gfx.line(10, 30, 296, 30, "light_blue")
for i, d in ipairs(departs) do
  local y = 14 + i * 30
  gfx.text(10, y, d[1], "white", 2)
  gfx.text(70, y, d[2], "white", 2)
  gfx.text(280, y, d[3], "yellow", 2)
end
Écran
Écran

Des boutons sur le mur

Les mêmes boutons marchent dans le terminal (un clic gauche) et sur le moniteur (un clic droit sur l'écran). La sortie du dessus commande le portail : une porte, un Piston mécanique de Create ou un Embrayage.

Brass
local function bouton(y, texte, couleur)
  term.set_bg(couleur)
  for ligne = y, y + 2 do
    term.set_cursor(3, ligne)
    write("                ")
  end
  term.set_cursor(3 + math.floor((16 - #texte) / 2), y + 1)
  write(texte)
  term.set_bg(term.colors.black)
end

term.set_bg(term.colors.black)
term.clear()
term.set_cursor(3, 1)
write("COMMANDE DU PORTAIL")
bouton(3, "OUVRIR", term.colors.green)
bouton(7, "FERMER", term.colors.red)
while true do
  local e = os.pull_event("click")
  if e.x >= 3 and e.x <= 18 then
    if e.y >= 3 and e.y <= 5 then
      rs.set("top", true)
    elseif e.y >= 7 and e.y <= 9 then
      rs.set("top", false)
    end
  end
  term.set_cursor(3, 11)
  term.clear_line()
  write("dernier appui : " .. e.source)
end
Écran
Écran

Comme le programme attend avec os.pull_event("click"), le moniteur devient un écran tactile dès son lancement. Le programme intégré buttons est un panneau de commande complet construit de la même façon.