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.
local ecran = peripheral.wrap("top")
local s = ecran.size()
print("l'écran fait " .. s.w .. " blocs sur " .. s.h)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 :
| ordinateur | meilleurs murs |
|---|---|
| Ordinateur à transistors, Mini-ordinateur, Micro-ordinateur, Ordinateur moderne | 7 × 4, puis 5 × 3 |
| Microcontrôleur (un écran plus large) | 2 × 1, 4 × 2, 8 × 4 |
| Calculateur à tubes | 7 × 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
La taille de l'écran, en blocs : pour un mur, le mur entier, quel que soit le bloc que vous avez pris.
- 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 :
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.
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
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.
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
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.