Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --name : Reactor Graphic Interface
- --Author : Alpha_R
- --version : 0.2.0
- --Screen size = 57x24 3x2, 79x24 4x2
- -------------------------------------------------//Initialisation
- local screenSize = {}
- screenSize.x = 60
- screenSize.y = 24
- local monitorSize = {}
- monitorSize.x = 79
- monitorSize.y = 24
- local monitor = peripheral.wrap("left")
- local reactor = peripheral.wrap("BigReactors-Reactor_1")
- monitor.setTextScale(0.5)
- local buttonSize = {x = (screenSize.x/3) - 2, y = (screenSize.y/2)-1}
- local debutJauge = buttonSize.x + 5
- local on = paintutils.loadImage("on.nfp")
- local off = paintutils.loadImage("off.nfp")
- local autoOn = paintutils.loadImage("autoOn.nfp")
- local autoOff = paintutils.loadImage("autoOff.nfp")
- local info = {}
- info.nbCtrlRod = reactor.getNumberOfControlRods()
- info.fuelMax = reactor.getFuelAmountMax()
- local fuelAmountPerc, fuelTempPerc, caseTempPerc, energyPerc, wasteAmountPerc
- local autoActive = true
- local lastEnergy = nil
- -------------------------------------------------//Info Reacteur
- function reactorInput()
- info.active = reactor.getActive()
- lastEnergy = info.energy or 1
- info.energy = reactor.getEnergyStored()
- info.fuelTemp = reactor.getFuelTemperature()
- info.caseTemp = reactor.getCasingTemperature()
- info.fuelAmount = reactor.getFuelAmount()
- info.wasteAmount = reactor.getWasteAmount()
- info.energyTick = reactor.getEnergyProducedLastTick()
- info.energyTick = math.floor(info.energyTick)
- info.fuelReactivity = reactor.getFuelReactivity()
- info.fuelReactivity = math.floor(info.fuelReactivity)
- info.fuelConsumedTick = reactor.getFuelConsumedLastTick()
- info.fuelConsumedTick = math.floor(info.fuelConsumedTick*100)/100
- info.ctrlRodLvl = reactor.getControlRodLevel(1)
- fuelAmountPerc = math.floor(info.fuelAmount/info.fuelMax*19)
- wasteAmountPerc = math.floor(info.wasteAmount/info.fuelMax*19)
- fuelTempPerc = math.floor(info.fuelTemp/2000*19)
- caseTempPerc = math.floor(info.caseTemp/2000*19)
- energyPerc = math.floor(info.energy/10000000*19)
- lvlRodPerc = math.floor(info.ctrlRodLvl/100*15)
- if(fuelTempPerc >=19)then
- fuelTempPerc = 19
- end
- if(caseTempPerc >=19)then
- caseTempPerc = 19
- end
- end
- -------------------------------------------------//Affichage
- function affichage()
- term.redirect(monitor)
- term.setBackgroundColor(colors.black)
- term.clear()
- paintutils.drawFilledBox(1, buttonSize.y + 2, buttonSize.x, screenSize.y, colors.gray)
- paintutils.drawFilledBox(buttonSize.x + 2, 1, screenSize.x, screenSize.y, colors.gray)
- paintutils.drawFilledBox(screenSize.x + 2, buttonSize.y + 2, monitorSize.x, monitorSize.y, colors.gray)
- if(info.active)then
- paintutils.drawImage(off, 1,1)
- else
- paintutils.drawImage(on, 1,1)
- end
- term.setBackgroundColor(colors.gray)
- term.setCursorPos(1, 16)
- term.write("Control rod : "..info.nbCtrlRod)
- term.setCursorPos(1, 18)
- term.write("Fuel react. : "..info.fuelReactivity)
- term.setCursorPos(1, 20)
- term.write("Fuel mB/t : "..info.fuelConsumedTick)
- term.setCursorPos(1, 22)
- term.write("Energy RF/t : "..info.energyTick)
- paintutils.drawFilledBox(debutJauge, 23-fuelAmountPerc, debutJauge+5, 23, colors.yellow)
- paintutils.drawFilledBox(debutJauge+7, 23-wasteAmountPerc, debutJauge+12, 23, colors.yellow)
- paintutils.drawFilledBox(debutJauge+14, 23-fuelTempPerc, debutJauge+19, 23, colors.yellow)
- paintutils.drawFilledBox(debutJauge+21, 23-caseTempPerc, debutJauge+26, 23, colors.yellow)
- paintutils.drawFilledBox(debutJauge+28, 23-energyPerc, debutJauge+33, 23, colors.yellow)
- term.setBackgroundColor(colors.gray)
- term.setCursorPos(debutJauge, 2)
- term.write("Fuel")
- term.setCursorPos(debutJauge+7, 2)
- term.write("Waste")
- term.setCursorPos(debutJauge+14, 2)
- term.write("F. °C")
- term.setCursorPos(debutJauge+21, 2)
- term.write("C. °c")
- term.setCursorPos(debutJauge+28, 2)
- term.write("E kRF")
- term.setCursorPos(debutJauge, 3)
- term.write(math.floor(info.fuelAmount/100)/10)
- term.setCursorPos(debutJauge+7, 3)
- term.write(math.floor(info.wasteAmount/100)/10)
- term.setCursorPos(debutJauge+14, 3)
- term.write(math.floor(info.fuelTemp))
- term.setCursorPos(debutJauge+21, 3)
- term.write(math.floor(info.caseTemp))
- term.setCursorPos(debutJauge+28, 3)
- term.write(math.floor(info.energy/1000))
- if(autoActive)then
- paintutils.drawImage(autoOn, screenSize.x + 2,1)
- else
- paintutils.drawImage(autoOff, screenSize.x + 2,1)
- end
- paintutils.drawFilledBox(screenSize.x + 3, buttonSize.y + 7, screenSize.x+3+lvlRodPerc, buttonSize.y + 12, colors.yellow)
- term.setBackgroundColor(colors.gray)
- term.setCursorPos(screenSize.x + 3, buttonSize.y + 4)
- term.write("Ctrl Rod Lvl: "..info.ctrlRodLvl)
- os.sleep(0.05)
- end
- -------------------------------------------------//Bouton Ecran
- function button()
- os.startTimer(0.45)
- local event, side, x, y = os.pullEvent()
- if(event == "monitor_touch")then
- if(y >= 1 and y <=buttonSize.y)then
- if(x >= 1 and x <= buttonSize.x)then
- if(info.active)then
- reactor.setActive(false)
- else
- reactor.setActive(true)
- end
- end
- if(x >= screenSize.x + 2 and x <= monitorSize.x)then
- if(autoActive)then
- autoActive = false
- reactor.setAllControlRodLevels(0)
- else
- autoActive = true
- end
- end
- end
- end
- end
- -------------------------------------------------//AutoControl
- function autoRod()
- if(lastEnergy < info.energy)then
- reactor.setAllControlRodLevels(info.ctrlRodLvl + 1)
- end
- if(lastEnergy > info.energy)then
- reactor.setAllControlRodLevels(info.ctrlRodLvl - 1)
- end
- end
- -------------------------------------------------//Main Script
- while(true)do
- reactorInput()
- affichage()
- if(autoActive)then
- autoRod()
- end
- button()
- end
Add Comment
Please, Sign In to add comment