Advertisement
Guest User

program

a guest
Aug 1st, 2014
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.72 KB | None | 0 0
  1. white = 1
  2. blue = 2048
  3. yellow = 16
  4. gray = 156
  5. red = 16384
  6. green = 8192
  7. black = 32768
  8. rname = "BigReactors-Reactor_2"
  9. mname = "monitor_1"
  10. cname = "appeng_me_tilecontroller_0"
  11. echest  = "ender_chest_0"
  12. bchest = "container_chest_0"
  13. manage = "auto"
  14. lowerbound = 30
  15. upperbound = 50
  16. mon = peripheral.wrap(mname)
  17. controller = peripheral.wrap(cname)
  18. reactor = peripheral.wrap(rname)
  19. enderchest = peripheral.wrap(echest)
  20. bufferchest = peripheral.wrap(bchest)
  21. header = "Base Operations Control Panel"
  22. wScreen, hScreen = mon.getSize()
  23. quarryState = enderchest.getStackInSlot(1)
  24. rednet.open("right")
  25. qx = 0
  26. qy = 0
  27. qz = 0
  28. qstatus = "idle"
  29. function setQuarryState(state)
  30.  
  31.   if quarryState then
  32.     enderchest.pushItem("east", 1, 1)
  33.     quarryState = false
  34.   else
  35.     bufferchest.pushItem("west", 1, 1)
  36.     quarryState = true
  37.   end
  38. end
  39. function rednet()
  40.   write("Listening for messages...")
  41.   while true do
  42.     write("hello")
  43.     id, message, _ = rednet.receive(10)
  44.     write("received "..message.." from "..id.."\n")
  45.     t = str.split("=")
  46.     for i, v in pairs(t) do
  47.    
  48.       write(i.." "..v.."\n")
  49.     end
  50.   end
  51. end
  52.  
  53. function processTouches()
  54.   --write("running")
  55.   while true do
  56.     --write("t")
  57.     event, side, x, y = os.pullEvent("monitor_touch")
  58.     --write(x.."x"..y)
  59.     if (x >= 2) and (x <= 8) and (y >= 5) and (y <=6) then
  60.       if manage == "auto" then
  61.         manage = "online"
  62.         reactor.setActive(true)
  63.       elseif manage == "online" then
  64.         manage = "offline"
  65.         reactor.setActive(false)
  66.        
  67.       elseif manage == "offline" then
  68.         manage = "auto"
  69.        
  70.       end
  71.       --reactor.setActive(not reactor.getActive())
  72.       write("Toggling reactor state\n")
  73.      
  74.     elseif (x >= 2) and (x <= 8) and (y >= 8) and (y <= 9) then
  75.       setQuarryState(not quarryState)
  76.       write("Toggling quarry state\n")
  77.     end
  78.     sleep(0.25)
  79.    
  80.    
  81.   end
  82. end
  83. local function runShell()
  84.   shell.run("/rom/programs/shell")
  85. end
  86. local function manageReactor()
  87.   while true do
  88.     if manage == "auto" then
  89.       if (getPowerPercent() > upperbound and reactor.getActive()) then
  90.         reactor.setActive(false)
  91.       end
  92.       if ((getPowerPercent() < lowerbound) and not reactor.getActive()) then
  93.         reactor.setActive(true)
  94.       end
  95.     end
  96.     sleep(0.5)
  97.   end
  98. end
  99. function tcol(color)
  100.   mon.setTextColor(color)
  101. end
  102. function bcol(color)
  103.   mon.setBackgroundColor(color)
  104. end
  105. function newLine()
  106.   cx,cy = mon.getCursorPos()
  107.   if (cx ~= wScreen) then
  108.     for i=cx,wScreen,1 do
  109.       mon.write(" ")
  110.     end
  111.   end
  112.  
  113.   mon.setCursorPos(1,cy+1)
  114. end
  115. function clearScreen()
  116.   mon.setCursorPos(1,1)
  117.   mon.clear()
  118. end
  119. function getWastePercent()
  120.   max = reactor.getFuelAmountMax()
  121.   return reactor.getWasteAmount() / max * 100
  122. end
  123. function round(number, digits)
  124.   shift = math.pow(10, digits)
  125.   return math.floor(number * shift + 0.5)/shift
  126. end
  127. function getPowerPercent()
  128.   return (reactor.getEnergyStored() / 10000000) * 100
  129. end
  130. function drawReactorState(state, reactor)
  131.   if manage == "auto" and reactor then
  132.     if (state) then
  133.       bcol(green)
  134.       mon.write(" ")
  135.     else
  136.       bcol(red)
  137.       mon.write(" ")
  138.     end
  139.     bcol(black)
  140.     mon.write(" ")
  141.     tcol(blue)
  142.     mon.write("Auto ")
  143.   else
  144.     if state then
  145.       tcol(green)
  146.       mon.write("Online ")
  147.     else
  148.       tcol(red)
  149.       mon.write("Offline")
  150.     end
  151.   end
  152.   tcol(white)
  153. end
  154. function drawBar(type, percent)
  155.   num=math.ceil(percent / 10)
  156.   tcol(white)
  157.   mon.write("[")
  158.   if type == "fuel" then
  159.     tcol(blue)
  160.   else
  161.     tcol(red)
  162.   end
  163.   for i=0,num - 1, 1 do
  164.     mon.write("|")
  165.   end
  166.   if type == "fuel" then
  167.     tcol(yellow)
  168.   else
  169.     tcol(gray)
  170.   end
  171.   for i=num, 9, 1 do
  172.     mon.write("|")
  173.   end
  174.   tcol(white)
  175.   mon.write("]")
  176. end                                                                                                                                                                                                  
  177. function drawCenterLine(text)
  178.   start = (wScreen/2)-(text:len()/2)+1
  179.   if (text:len() > wScreen) then
  180.     mon.write(text)
  181.   else
  182.     _,cy = mon.getCursorPos()
  183.     for i=cy,start,1 do
  184.       mon.write(" ")
  185.     end
  186.     mon.write(text)
  187.   end
  188. end
  189. function drawHeader()
  190.   bcol(blue)
  191.   tcol(white)
  192.   for x=1,wScreen,1 do
  193.     mon.write(" ")
  194.   end
  195.   newLine()
  196.   drawCenterLine(header)
  197.   newLine()
  198.   cx,cy=mon.getCursorPos()
  199.   for x=1,wScreen,1 do
  200.     mon.write(" ")
  201.   end
  202.   newLine()
  203. end
  204. function format(number)
  205.   ordinal = 0
  206.   types = {"K","M","T"}
  207.   temp = number
  208.   while temp > 1000 do
  209.     temp = temp/1000
  210.     ordinal = ordinal + 1
  211.   end
  212.   if ordinal == 0 then
  213.     return round(number,0)
  214.   else
  215.     return round(temp,2)..types[ordinal]
  216.   end
  217. end
  218. function drawReactorStatus()
  219.   bcol(black)
  220.   tcol(white)
  221.   mon.write(" Reactor   ")
  222.   drawBar("power", getPowerPercent())
  223.   power = "  "..format(reactor.getEnergyStored()).." RF "
  224.  
  225.   power2 = "@ "..format(reactor.getEnergyProducedLastTick()).." RF/t"
  226.   fuel = "  "..round(getWastePercent(),1).."% used "
  227.   if (power:len() > fuel:len()) then
  228.     --write("p>f")
  229.     diff = power:len() - fuel:len()
  230.     while diff > 0 do
  231.       fuel = fuel.." "
  232.       diff = diff - 1
  233.     end
  234.   elseif (fuel:len() > power:len()) then
  235.     --write("f>p ")
  236.     diff = fuel:len() - power:len()
  237.     --write("diff="..diff.." ")
  238.     while diff > 0 do
  239.       power = power.." "
  240.       diff = diff - 1
  241.       --write("|")
  242.     end
  243.     --write("\n")
  244.   end
  245.   mon.write(power)
  246.   mon.write(power2)
  247.   newLine()
  248.   mon.write(" ")
  249.   drawReactorState(reactor.getActive(), true)
  250.   mon.write("   ")
  251.   drawBar("fuel", getWastePercent())
  252.  
  253.   fuel2 = "@ "..round(reactor.getFuelConsumedLastTick(),3).." mb/t"
  254.   mon.write(fuel)
  255.   mon.write(fuel2)
  256.   newLine()
  257. end
  258. function drawQuarryStatus()
  259.   mon.write(" Quarry    ")
  260.   mon.write("Uberminer is currently "..qstatus..".")
  261.   newLine()
  262.   mon.write(" ")
  263.   drawReactorState(quarryState, false)
  264.   mon.write("   ")
  265.   if (qx==0 and qy==0 and qz==0) then
  266.     mon.write("Locating quarry...")
  267.   else
  268.     mon.write("Quarry is @ x "..qx.." y "..qy.." z "..z)
  269.   end
  270.  
  271.  
  272.   --drawReactorState(quarryState, false)
  273.              
  274.  
  275. end
  276. function drawScreen()
  277.   clearScreen()
  278.   drawHeader()
  279.   bcol(black)
  280.   newLine()
  281.   drawReactorStatus()
  282.   newLine()
  283.  
  284.   drawQuarryStatus()
  285. end
  286. function render()
  287.   while true do
  288.     drawScreen()
  289.     sleep(0.2)
  290.   end
  291. end
  292. --processTouches()
  293.  
  294. --touchscreen = coroutine.create(processTouches)
  295. --coroutine.resume(touchscreen)
  296.  
  297. --for i,v in ipairs(controller.getMethods()) do
  298. --  print(i..". "..v.."\n")
  299. --end
  300.  
  301.  
  302. parallel.waitForAny(processTouches,render,manageReactor,rednet)
  303. write("Starting screen renderer")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement