InfOS/Programs/biovat.lua
2020-10-30 21:33:29 +02:00

57 lines
2.0 KiB
Lua

local comp=require("component"); local event=require("event"); local screen=require("term"); local computer = require("computer")
local transposers = {}
function configureTransposers()
for address, type in pairs(comp.list()) do
if type == "transposer" then
local transposer = comp.proxy(comp.get(address))
local foundTanks = {}
for side = 0, 5, 1 do
if transposer.getTankCapacity(side) > 0 then
foundTanks[#foundTanks + 1] = {side = side, capacity = transposer.getTankCapacity(side)}
end
end
if #foundTanks == 2 then
if foundTanks[1].capacity > foundTanks[2].capacity then
transposers[address] = {source = foundTanks[2].side, sink = foundTanks[1].side}
else
transposers[address] = {source = foundTanks[1].side, sink = foundTanks[2].side}
end
else
screen.write("Some transposers have more than two tanks! FIX IT!\n")
end
end
end
screen.write("Found "..countTransposers().." output hatches to keep at 50%\n")
end
function countTransposers()
local count = 0
for address, type in pairs(comp.list()) do
if type == "transposer" then
count = count + 1
end
end
return count
end
function tick()
for address, sides in pairs(transposers) do
local transposer = comp.proxy(comp.get(address))
local sourceCurrent, sourceMax = transposer.getTankLevel(sides.source), transposer.getTankCapacity(sides.source)
if sourceCurrent / sourceMax > 0.5 then
local fluidToRemove = sourceCurrent - sourceMax / 2
transposer.transferFluid(sides.source, sides.sink, fluidToRemove)
end
end
end
configureTransposers()
local count = countTransposers()
local tempCount = 0
while true do
tempCount = countTransposers()
if count ~= tempCount then
configureTransposers()
end
count = tempCount
tick()
os.sleep()
end