Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Function to ensure the presence of required peripherals (monitor and teleporter).
- local function checkPeripheral(name, errorMessage)
- local peripheral = peripheral.find(name)
- if not peripheral then
- error(errorMessage)
- end
- return peripheral
- end
- -- Retrieve peripherals
- local boiler = checkPeripheral("boilerValve", "Boiler peripheral not found.")
- local function getThresholds(maxCap)
- return maxCap * 0.9, maxCap * 0.7
- end
- local function drawBar(amount, maxCap)
- local width, height = term.getSize()
- local barLength = math.floor(width * 0.8)
- local fillPercentage = amount / maxCap
- local fillLength = math.floor(fillPercentage * barLength)
- local upperThreshold, lowerThreshold = getThresholds(maxCap)
- local upperMark = math.floor(upperThreshold / maxCap * barLength)
- local lowerMark = math.floor(lowerThreshold / maxCap * barLength)
- local startX = math.floor((width - barLength) / 2)
- local bar = string.char(143)
- term.clear()
- term.setCursorPos(startX, 1)
- term.write("0%")
- term.setCursorPos(startX + lowerMark - 1, 1)
- term.write("70%")
- term.setCursorPos(startX + upperMark - 1, 1)
- term.write("90%")
- term.setCursorPos(startX + barLength, 1)
- term.write("100%")
- term.setCursorPos(startX, 2)
- term.write("[")
- for i = 1, barLength do
- if i == upperMark then
- term.setTextColor(colors.red)
- term.write("|")
- elseif i == lowerMark then
- term.setTextColor(colors.green)
- term.write("|")
- elseif i <= fillLength then
- if fillPercentage >= 0.9 then
- term.setTextColor(colors.red) -- Füllstand über 90% -> Rot
- elseif fillPercentage <= 0.7 then
- term.setTextColor(colors.white) -- Füllstand unter 70% -> Grün
- elseif fillPercentage >= 0.7 and fillPercentage <= 0.9 then
- term.setTextColor(colors.green) -- Füllstand zwischen 70% und 90% -> Grün
- else
- term.setTextColor(colors.white) -- Normaler Bereich -> Weiß
- end
- term.write(bar)
- else
- term.write(" ")
- end
- end
- term.setTextColor(colors.white)
- term.write("]")
- term.setCursorPos(math.floor((width - 40) / 2), 4)
- print(string.format("Füllstand: %.2f%%", fillPercentage * 100))
- term.setCursorPos(math.floor((width - 40) / 2), 5)
- print(string.format("Sodium: %d / %d", amount, maxCap))
- end
- local function updateRedstone(exceedsUpper, fallsBelowLower)
- local newState = exceedsUpper and 15 or (fallsBelowLower and 0 or nil)
- if newState then
- rs.setAnalogOutput("right", newState)
- end
- end
- while true do
- local maxCap = boiler.getHeatedCoolantCapacity()
- local amount = boiler.getHeatedCoolant().amount
- if type(maxCap) ~= "number" or type(amount) ~= "number" then
- print("Error: maxCap oder amount sind keine Zahlen")
- else
- local upperThreshold, lowerThreshold = getThresholds(maxCap)
- local exceedsUpper = amount >= upperThreshold
- local fallsBelowLower = amount <= lowerThreshold
- updateRedstone(exceedsUpper, fallsBelowLower)
- drawBar(amount, maxCap)
- end
- sleep(1)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement