Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- white = 1
- blue = 2048
- yellow = 16
- gray = 156
- red = 16384
- green = 8192
- black = 32768
- rname = "BigReactors-Reactor_2"
- mname = "monitor_1"
- cname = "appeng_me_tilecontroller_0"
- echest = "ender_chest_0"
- bchest = "container_chest_0"
- manage = "auto"
- lowerbound = 30
- upperbound = 50
- mon = peripheral.wrap(mname)
- controller = peripheral.wrap(cname)
- reactor = peripheral.wrap(rname)
- enderchest = peripheral.wrap(echest)
- bufferchest = peripheral.wrap(bchest)
- header = "Base Operations Control Panel"
- wScreen, hScreen = mon.getSize()
- quarryState = enderchest.getStackInSlot(1)
- rednet.open("right")
- qx = 0
- qy = 0
- qz = 0
- qstatus = "idle"
- function setQuarryState(state)
- if quarryState then
- enderchest.pushItem("east", 1, 1)
- quarryState = false
- else
- bufferchest.pushItem("west", 1, 1)
- quarryState = true
- end
- end
- function rednet()
- write("Listening for messages...")
- while true do
- write("hello")
- id, message, _ = rednet.receive(10)
- write("received "..message.." from "..id.."\n")
- t = str.split("=")
- for i, v in pairs(t) do
- write(i.." "..v.."\n")
- end
- end
- end
- function processTouches()
- --write("running")
- while true do
- --write("t")
- event, side, x, y = os.pullEvent("monitor_touch")
- --write(x.."x"..y)
- if (x >= 2) and (x <= 8) and (y >= 5) and (y <=6) then
- if manage == "auto" then
- manage = "online"
- reactor.setActive(true)
- elseif manage == "online" then
- manage = "offline"
- reactor.setActive(false)
- elseif manage == "offline" then
- manage = "auto"
- end
- --reactor.setActive(not reactor.getActive())
- write("Toggling reactor state\n")
- elseif (x >= 2) and (x <= 8) and (y >= 8) and (y <= 9) then
- setQuarryState(not quarryState)
- write("Toggling quarry state\n")
- end
- sleep(0.25)
- end
- end
- local function runShell()
- shell.run("/rom/programs/shell")
- end
- local function manageReactor()
- while true do
- if manage == "auto" then
- if (getPowerPercent() > upperbound and reactor.getActive()) then
- reactor.setActive(false)
- end
- if ((getPowerPercent() < lowerbound) and not reactor.getActive()) then
- reactor.setActive(true)
- end
- end
- sleep(0.5)
- end
- end
- function tcol(color)
- mon.setTextColor(color)
- end
- function bcol(color)
- mon.setBackgroundColor(color)
- end
- function newLine()
- cx,cy = mon.getCursorPos()
- if (cx ~= wScreen) then
- for i=cx,wScreen,1 do
- mon.write(" ")
- end
- end
- mon.setCursorPos(1,cy+1)
- end
- function clearScreen()
- mon.setCursorPos(1,1)
- mon.clear()
- end
- function getWastePercent()
- max = reactor.getFuelAmountMax()
- return reactor.getWasteAmount() / max * 100
- end
- function round(number, digits)
- shift = math.pow(10, digits)
- return math.floor(number * shift + 0.5)/shift
- end
- function getPowerPercent()
- return (reactor.getEnergyStored() / 10000000) * 100
- end
- function drawReactorState(state, reactor)
- if manage == "auto" and reactor then
- if (state) then
- bcol(green)
- mon.write(" ")
- else
- bcol(red)
- mon.write(" ")
- end
- bcol(black)
- mon.write(" ")
- tcol(blue)
- mon.write("Auto ")
- else
- if state then
- tcol(green)
- mon.write("Online ")
- else
- tcol(red)
- mon.write("Offline")
- end
- end
- tcol(white)
- end
- function drawBar(type, percent)
- num=math.ceil(percent / 10)
- tcol(white)
- mon.write("[")
- if type == "fuel" then
- tcol(blue)
- else
- tcol(red)
- end
- for i=0,num - 1, 1 do
- mon.write("|")
- end
- if type == "fuel" then
- tcol(yellow)
- else
- tcol(gray)
- end
- for i=num, 9, 1 do
- mon.write("|")
- end
- tcol(white)
- mon.write("]")
- end
- function drawCenterLine(text)
- start = (wScreen/2)-(text:len()/2)+1
- if (text:len() > wScreen) then
- mon.write(text)
- else
- _,cy = mon.getCursorPos()
- for i=cy,start,1 do
- mon.write(" ")
- end
- mon.write(text)
- end
- end
- function drawHeader()
- bcol(blue)
- tcol(white)
- for x=1,wScreen,1 do
- mon.write(" ")
- end
- newLine()
- drawCenterLine(header)
- newLine()
- cx,cy=mon.getCursorPos()
- for x=1,wScreen,1 do
- mon.write(" ")
- end
- newLine()
- end
- function format(number)
- ordinal = 0
- types = {"K","M","T"}
- temp = number
- while temp > 1000 do
- temp = temp/1000
- ordinal = ordinal + 1
- end
- if ordinal == 0 then
- return round(number,0)
- else
- return round(temp,2)..types[ordinal]
- end
- end
- function drawReactorStatus()
- bcol(black)
- tcol(white)
- mon.write(" Reactor ")
- drawBar("power", getPowerPercent())
- power = " "..format(reactor.getEnergyStored()).." RF "
- power2 = "@ "..format(reactor.getEnergyProducedLastTick()).." RF/t"
- fuel = " "..round(getWastePercent(),1).."% used "
- if (power:len() > fuel:len()) then
- --write("p>f")
- diff = power:len() - fuel:len()
- while diff > 0 do
- fuel = fuel.." "
- diff = diff - 1
- end
- elseif (fuel:len() > power:len()) then
- --write("f>p ")
- diff = fuel:len() - power:len()
- --write("diff="..diff.." ")
- while diff > 0 do
- power = power.." "
- diff = diff - 1
- --write("|")
- end
- --write("\n")
- end
- mon.write(power)
- mon.write(power2)
- newLine()
- mon.write(" ")
- drawReactorState(reactor.getActive(), true)
- mon.write(" ")
- drawBar("fuel", getWastePercent())
- fuel2 = "@ "..round(reactor.getFuelConsumedLastTick(),3).." mb/t"
- mon.write(fuel)
- mon.write(fuel2)
- newLine()
- end
- function drawQuarryStatus()
- mon.write(" Quarry ")
- mon.write("Uberminer is currently "..qstatus..".")
- newLine()
- mon.write(" ")
- drawReactorState(quarryState, false)
- mon.write(" ")
- if (qx==0 and qy==0 and qz==0) then
- mon.write("Locating quarry...")
- else
- mon.write("Quarry is @ x "..qx.." y "..qy.." z "..z)
- end
- --drawReactorState(quarryState, false)
- end
- function drawScreen()
- clearScreen()
- drawHeader()
- bcol(black)
- newLine()
- drawReactorStatus()
- newLine()
- drawQuarryStatus()
- end
- function render()
- while true do
- drawScreen()
- sleep(0.2)
- end
- end
- --processTouches()
- --touchscreen = coroutine.create(processTouches)
- --coroutine.resume(touchscreen)
- --for i,v in ipairs(controller.getMethods()) do
- -- print(i..". "..v.."\n")
- --end
- parallel.waitForAny(processTouches,render,manageReactor,rednet)
- write("Starting screen renderer")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement