Blocs cinétiques de Create
Vitesse, stress et capacité de n'importe quel bloc de Create qui tourne, et un Contrôleur de vitesse de rotation piloté par programme.
Tout bloc de Create qui tourne est un périphérique de type kinetic : arbres et roues dentées, moteurs, roues à eau, presses, mixeurs, ventilateurs, meules, roues de concassage, compteurs... Un programme lit sa vitesse, le stress de tout son réseau et ce que ce réseau peut fournir, et sait quand il est surchargé, le tout sans Stressomètre ni Lunettes d'ingénieur. Sur un Contrôleur de vitesse de rotation, le programme règle aussi la vitesse.
local presse = peripheral.wrap("left")
print(presse.speed() .. " tr/min")
print(presse.stress() .. " / " .. presse.capacity() .. " us")machine.speed() | À quelle vitesse tourne le bloc, en tours par minute. |
machine.stress() | Le stress total du réseau dont fait partie ce bloc : ce qu'un Stressomètre affiche comme utilisé. |
machine.capacity() | La capacité totale du réseau : ce que ses moteurs, roues à eau, moulins à vent et moteurs à vapeur fournissent à leur vitesse actuelle. |
machine.overstressed() | Indique si le réseau est surchargé, au sens de Create. |
machine.set_speed(rpm) | Règle la vitesse visée d'un Contrôleur de vitesse de rotation : la vitesse de la grande roue dentée posée dessus. |
Installation
Contre l'ordinateur. Tout bloc cinétique posé contre une face de l'ordinateur est un périphérique, simples arbres compris. L'arbre qui entraîne l'ordinateur compte aussi : il entre par l'arrière (par le dessous sur un Microcontrôleur), donc peripheral.wrap("back") lit le réseau même qui alimente votre ordinateur.
Sur un Câble de données (Mini-ordinateur et plus récents), les machines s'appellent par exemple kinetic@120,64,-35. Les simples pièces de transmission sont laissées de côté exprès, pour qu'un câble qui longe un train d'engrenages ne remplisse pas peripheral.list() : arbres, roues dentées, arbres et roues dentées dans un boitier, boîtes à roues dentées, embrayages et inverseurs de rotation. Posez-en un contre l'ordinateur si vous le voulez, ou lisez plutôt n'importe quelle machine du même réseau : toutes donnent le même stress et la même capacité.
Les blocs à plusieurs métiers. Une meule tourne et contient des objets : elle est à la fois kinetic et inventaire, avec les méthodes des deux. Son type, et son nom sur un câble, est kinetic, et peripheral.find("inventory") la trouve aussi. Voir Périphériques.
Les unités de stress. Create compte en unités de stress (« us » dans le jeu). Chaque machine consomme son impact de stress multiplié par sa vitesse ; moteurs, roues à eau et moteurs à vapeur fournissent une capacité, qui grandit elle aussi avec la vitesse. Quand les machines demandent plus que ce que les sources fournissent, le réseau est surchargé : tout s'y arrête jusqu'à ce que vous retiriez de la charge ou ajoutiez de la puissance.
Mesures
À quelle vitesse tourne le bloc, en tours par minute.
- number
- la vitesse du bloc en tr/min, négative quand il tourne dans l'autre sens, 0 à l'arrêt
Le signe donne le sens, tel que Create le voit : une roue dentée engrenée sur une autre tourne en sens inverse, l'une lit donc 64 et l'autre -64. Prenez math.abs quand seule la vitesse compte. Les vitesses montent jusqu'à 256 tr/min, sauf si le serveur a changé la limite de Create.
local moteur = peripheral.wrap("back") -- l'arbre qui fait tourner l'ordinateur
local tours = math.abs(moteur.speed())
print("processeur à " .. math.floor(math.min(tours, 256) / 256 * 100) .. " %")Un ordinateur tourne à pleine vitesse à 256 tr/min : ce petit programme montre donc à quelle allure va son propre processeur.
speed() lit 0 tant que le réseau est surchargé, puisque Create l'arrête. Sur un Contrôleur de vitesse de rotation, c'est la vitesse de l'arbre qui traverse le contrôleur (son entrée), pas celle de la roue dentée du dessus.
Quand le bloc n'est plus un bloc cinétique (cassé, remplacé), toutes les méthodes de cette page arrêtent le programme avec not a kinetic block anymore.
Voir aussi kinetic.set_speed()
Le stress total du réseau dont fait partie ce bloc : ce qu'un Stressomètre affiche comme utilisé.
- number
- le stress que consomment les machines du réseau, en us, 0 quand le bloc n'est sur aucun réseau
N'importe quel bloc du réseau donne la même réponse : prenez celui qui vous arrange. L'appel parcourt tous les blocs du réseau, ce qui coûte une instruction par bloc : sur une usine de 2000 blocs cinétiques, un Calculateur à tubes attend un bon moment sa réponse. Lisez-le toutes les secondes environ, pas dans une boucle serrée.
local machine = peripheral.wrap("left")
local utilise = machine.stress()
local capacite = machine.capacity()
print(utilise .. " us utilisées, " .. (capacite - utilise) .. " us libres")Voir aussi kinetic.capacity() kinetic.overstressed()
La capacité totale du réseau : ce que ses moteurs, roues à eau, moulins à vent et moteurs à vapeur fournissent à leur vitesse actuelle.
- number
- le stress que les sources du réseau peuvent fournir, en us, 0 quand le bloc n'est sur aucun réseau
Le rapport stress() / capacity() est la charge du réseau, 1 voulant dire plein. Vérifiez que la capacité dépasse 0 avant de diviser : un bloc qu'aucune source n'entraîne a une capacité de 0.
local machine = peripheral.wrap("left")
local capacite = machine.capacity()
if capacite > 0 then
print("charge : " .. math.floor(machine.stress() / capacite * 100) .. " %")
else
print("rien n'entraîne ce réseau")
endVoir aussi kinetic.stress() kinetic.overstressed()
Indique si le réseau est surchargé, au sens de Create.
- boolean
truequand le réseau demande plus de stress qu'il ne peut en fournir, et s'est arrêté
C'est le même état qui arrête les machines de Create et fait afficher un avertissement aux Lunettes d'ingénieur. Le demander ne coûte rien, contrairement à stress() et capacity() :
local machine = peripheral.wrap("left")
if machine.overstressed() then
rs.set("top", true) -- la lampe d'alerte
endContrôleur de vitesse de rotation
machine.set_speed(rpm)
Règle la vitesse visée d'un Contrôleur de vitesse de rotation : la vitesse de la grande roue dentée posée dessus.
rpmnumber- la vitesse visée, un nombre entier de tr/min, négatif pour tourner dans l'autre sens
Il fait ce que fait le réglage à la main de la valeur du contrôleur : la nouvelle valeur reste dans le contrôleur après la fin du programme. 0 arrête la sortie, une vitesse négative l'inverse. Les valeurs au-delà de la limite de Create (256 tr/min) y sont ramenées. Le contrôleur a toujours besoin de rotation sur son arbre d'entrée pour entraîner quoi que ce soit.
local controleur = peripheral.wrap("right")
controleur.set_speed(64)
controleur.set_speed(-64) -- dans l'autre sensUne nouvelle vitesse reconstruit le réseau cinétique : elle est donc appliquée à la fin du tick du programme, une seule fois, avec la dernière valeur demandée. Une boucle qui change la vitesse plusieurs fois par tick ne coûte au monde qu'une mise à jour. Pour la même raison, lire la vitesse de la sortie dans le même tick montre encore l'ancienne.
En cas d'échec :
- sur tout autre bloc cinétique :
set_speed needs a Rotation Speed Controller; - avec un nombre à virgule :
bad argument #1 to 'set_speed' (number has no integer representation). Arrondissez-le d'abord avecmath.round.
Voir aussi kinetic.speed()
Exemples
Une alerte avant la surcharge
Create ne prévient que quand il est trop tard. Ce programme allume une lampe orange quand le réseau dépasse 80 % de sa capacité, et une lampe rouge avec une cloche quand il est surchargé. Le bloc pris peut être n'importe quelle machine du réseau.
local machine = peripheral.wrap("left")
while true do
local capacite = machine.capacity()
local charge = 0
if capacite > 0 then
charge = machine.stress() / capacite
end
rs.set("top", charge > 0.8) -- lampe orange
rs.set("right", machine.overstressed()) -- lampe rouge et cloche
display.set({"Charge " .. math.floor(charge * 100) .. " %", math.floor(capacite) .. " us disponibles"})
sleep(1)
endLa recette Protection contre la surcharge construit une protection complète sur cette idée.
Une ligne de presses qui suit son stock
Un Contrôleur de vitesse de rotation entraîne une ligne de presses mécaniques qui fabrique des plaques de fer pour un Coffre à objet renforcé. Plus le coffre renforcé est vide, plus les presses vont vite ; au stock visé, elles s'arrêtent et ne consomment plus aucun stress.
local coffre = peripheral.wrap("left")
local controleur = peripheral.wrap("right")
local OBJECTIF = 2000 -- plaques de fer à garder en stock
local MAX = 128 -- vitesse maximale de la ligne, en tr/min
while true do
local plaques = coffre.count("create:iron_sheet")
local manque = math.max(0, OBJECTIF - plaques)
local tours = math.round(MAX * manque / OBJECTIF)
controleur.set_speed(tours)
print(plaques .. " plaques, presses à " .. tours .. " tr/min")
sleep(5)
endLe programme intégré speed en fait la version la plus simple : vite tant qu'une entrée de redstone est allumée, lentement sinon.