Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require("component")
- local term = require("term")
- local computer = require("computer")
- local running = true
- local text = require("text")
- local unicode = require("unicode")
- local gpu = component.gpu
- term.clear()
- term.setCursor(1,1)
- print("Nysile Verazi Reactor Control Module")
- if not component.isAvailable("br_reactor") then
- serror("Unable to find reactor! Quitting out!")
- end
- print("Please select a reactor to control")
- local c = 1
- local addrtable={}
- for addr in component.list("br_reactor") do
- print(c .. ": " .. addr)
- addrtable[c] = addr
- c = c + 1
- end
- local result = term.read()
- if (result == "\n") then
- print("No selection")
- os.exit()
- end
- --os.exit()
- --print("Result:"..string.sub(result,1,-2)..":done")
- c = string.sub(result,1,-2)
- local seladdr = addrtable[tonumber(c)]
- print(c)
- print(addrtable[c])
- print("Address: " .. seladdr .. " selected")
- term.clear()
- term.setCursor(1,1)
- print("Nysile Verazi Reactor Control Module")
- term.setCursor(1,10)
- local reactors = {}
- for addr in component.list("br_reactor") do
- table.insert(reactors, component.proxy(addr))
- if component.proxy(addr).isActivelyCooled() then
- if component.isAvailable("br_turbine") then
- -- print(string.format("Active Cooled: %s",addr))
- else
- -- print(string.format("Active Cooled reactor, NO TURBINE: %s",addr))
- end
- else
- -- print(string.format("Inactive Cooled: %s",addr))
- end
- -- print(string.format("Added reactor %s",addr))
- end
- function makebox(x,y,w,h)
- gpu.setForeground(0xFFFFFF)
- gpu.set(x,y,unicode.char(9556))
- gpu.set(x+w,y,unicode.char(9559))
- gpu.set(x,y+h,unicode.char(9562))
- gpu.set(x+w,y+h,unicode.char(9565))
- for i=x+1,x+w-1 do
- gpu.set(i,y,unicode.char(9552))
- gpu.set(i,y+h,unicode.char(9552))
- end
- for i=y+1,y+h-1 do
- gpu.set(x,i,unicode.char(9553))
- gpu.set(x+w,i,unicode.char(9553))
- end
- end
- function progressBar(x,y,w,h,value,label,color_on,color_off,color_on_fg,color_off_fg)
- label = text.padRight(label or "",w)
- local fg = gpu.getForeground()
- local bg = gpu.getBackground()
- if not color_on then
- color_on = fg
- end
- if not color_off then
- color_off = bg
- end
- if not color_on_fg then
- color_on_fg = color_off
- end
- if not color_off_fg then
- color_off_fg = color_on
- end
- local v,r = math.modf(w * value)
- if v < 0 then
- v = 0
- elseif v > w then
- v = w
- end
- gpu.setForeground(color_on_fg)
- gpu.setBackground(color_on)
- gpu.set(x,y+h/2,label:sub(1,v))
- if label:sub(v+1,v+1) == " " then
- gpu.setForeground(color_on)
- gpu.setBackground(color_off)
- gpu.set(x+v,y+h/2,unicode.char(0x258f-math.floor(r*8)))
- v=v+1
- end
- gpu.setForeground(color_off_fg)
- gpu.setBackground(color_off)
- gpu.set(x+v,y+h/2,label:sub(v+1))
- gpu.setForeground(fg)
- gpu.setBackground(bg)
- end
- function makegraph(x,y,w,h,toptext,bottomtext,value)
- makebox(x,y,w,h)
- --gpu.set((x+1) + (w/2) - (string.len(toptext)/2),y+1,toptext)
- gpu.set((x+1)+(w/2)-(string.len(toptext)/2),y,toptext)
- for i=1,h-1 do
- progressBar(x+1,y+i,w-1,1,value,"",0x00FF00,0xFF0000,0x000000,0x000000)
- end
- gpu.set((x+1)+(w/2) - (string.len(bottomtext)/2),y+h,bottomtext)
- end
- --makebox(49,16,27,2)
- --progressBar(50,17,25,1,0.35,"Energy",0x00FF00,0xFF0000,0x000000,0x000000)
- --makebox(49,16,27,2)
- --makebox(1,15,20,10)
- --[[term.setCursor(44,15)
- --print("A:15")
- --term.setCursor(44,16)
- --print("B:16")
- --term.setCursor(44,17)
- --print("C:17")
- --term.setCursor(44,18)
- --print("D:18")]]--
- function passiveloop()
- local maxenergy = {}
- local maxeff = {}
- local maxrod = {}
- local currentrod = {}
- local cyclecount = {}
- local maxeffrod = {}
- local energychange = {}
- for _,reactor in pairs(reactors) do
- maxenergy[reactor.address] = 0
- maxeff[reactor.address] = 0
- currentrod[reactor.address] = 0
- cyclecount[reactor.address] = 0
- maxeffrod[reactor.address] = 0
- energychange[reactor.address] = 0
- reactor.setAllControlRodLevels(0)
- end
- --Re-enable this later
- --gpu.setResolution(80,25)
- --makebox(1,1,80,25)
- while running do
- local count = 0
- for _,reactor in pairs(reactors) do
- local change = energychange[reactor.address] - reactor.getEnergyStored()
- energychange[reactor.address] = reactor.getEnergyStored()
- if (change < 0) then
- currentrod[reactor.address] = currentrod[reactor.address] + 1
- if (currentrod[reactor.address] > 100) then
- currentrod[reactor.address] = 100
- end
- else
- currentrod[reactor.address] = currentrod[reactor.address] - 1
- if (currentrod[reactor.address] < 0) then
- currentrod[reactor.address] = 0
- end
- end
- reactor.setAllControlRodLevels(100 * (reactor.getEnergyStored() / 10000000))
- currentrod[reactor.address] = 100 * (reactor.getEnergyStored() / 10000000)
- --currentrod[reactor.address])
- if ((reactor.getEnergyStored() / 10000000) < 0.5) then
- -- reactor.setAllControlRodLevels
- end
- cyclecount[reactor.address] = cyclecount[reactor.address] + 1
- if (reactor.getEnergyProducedLastTick() > maxenergy[reactor.address]) then
- maxenergy[reactor.address] = reactor.getEnergyProducedLastTick()
- end
- local eff = reactor.getEnergyProducedLastTick() / reactor.getFuelConsumedLastTick()
- if (eff > maxeff[reactor.address]) then
- if (eff < math.huge) then
- maxeff[reactor.address] = eff;
- maxeffrod[reactor.address] = currentrod[reactor.address]
- end
- end
- -- makebox(1,1+(count*5),27,2)
- -- progressBar(2,2+(count*5),25,1,reactor.getEnergyProducedLastTick() / maxenergy[reactor.address],"Reactor",0x00FF00,0xFF0000,0x000000,0x000000)
- -- makebox(30,1+(count*5),27,2)
- -- progressBar(31,2+(count*5),25,1,(reactor.getEnergyProducedLastTick() / reactor.getFuelConsumedLastTick()) / maxeff[reactor.address],tostring(maxeff[reactor.address]),0x00FF00,0xFF0000,0x000000,0x000000)
- -- makebox(1,4+(count*5),27,5)
- -- gpu.set(3,5+(count*5),"Reactor Control Rods")
- -- progressBar(2,6+(count*5),25,1,currentrod[reactor.address] / 100,"",0x00FF00,0xFF0000,0x000000,0x000000)
- -- progressBar(2,7+(count*5),25,1,currentrod[reactor.address] / 100,"",0x00FF00,0xFF0000,0x000000,0x000000)
- -- gpu.set(10,8+(count*5),tostring(currentrod[reactor.address]))
- if (reactor.address == addr) then
- makegraph(1,2+(count*5),60,7,"Reactor Control Rods",tostring(currentrod[reactor.address]),currentrod[reactor.address]/100)
- makegraph(1,10+(count*5),60,7,"Fuel Level",tostring(reactor.getFuelAmount() / reactor.getFuelAmountMax()),reactor.getFuelAmount() / reactor.getFuelAmountMax())
- --makegraph(1,12+(count*5),60,6,"Energy Level",tostring(reactor.getEnergyStored()),(reactor.getEnergyStored() / 10000000))
- makegraph(1,18+(count*5),60,7,"Energy Produced",tostring(reactor.getEnergyProducedLastTick()),reactor.getEnergyProducedLastTick() / maxenergy[reactor.address])
- end
- count = count+1
- end
- os.sleep(0.7)
- end
- end
- function activeloop(selected_address)
- local tank_controller = nil
- for name in pairs(component) do
- if (name == "tank_controller") then
- -- print ("Found tank controlller")
- tank_controller = component.tank_controller
- break
- end
- end
- if (tank_controller == nil) then
- print("Unable to find tank_controller. You cannot control an active reactor without a steam storage tank!")
- os.exit()
- end
- local turbine = nil
- for name in pairs(component) do
- if (name == "br_turbine") then
- -- print("Found Turbine")
- turbine = component.br_turbine
- end
- end
- if (turbine == nil) then
- print("Unable to find br_turbine. You cannot control an active reactor without a turbine")
- os.exit()
- end
- local maxoutput = 1
- -- print("Fluid in tank:" .. tank_controller.getFluidInTank(1)[1].amount)
- -- print("Fluid Capacity:" .. tank_controller.getFluidInTank(1)[1].capacity)
- while true do
- local fill = tank_controller.getFluidInTank(1)[1].amount / tank_controller.getFluidInTank(1)[1].capacity
- reactors[1].setAllControlRodLevels(fill * 100)
- makegraph(1,2,60,5,"Steam Level",tostring(fill),fill)
- makegraph(1,9,60,5,"Turbine Energy Storage",tostring(turbine.getEnergyStored()),turbine.getEnergyStored() / 1000000)
- if (turbine.getEnergyProducedLastTick() > maxoutput) then
- maxoutput = turbine.getEnergyProducedLastTick()
- end
- makegraph(1,17,60,5,"Turbine Production",tostring(turbine.getEnergyProducedLastTick()),turbine.getEnergyProducedLastTick() / maxoutput)
- makegraph(65,2,15,3,"RPM",tostring(math.floor(turbine.getRotorSpeed())),turbine.getRotorSpeed() / 2000)
- os.sleep(0.7)
- end
- end
- gpu.setResolution(80,25)
- activeloop(seladdr)
- --passiveloop(seladdr)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement