Advertisement
glitchdetector

Reactor

Nov 22nd, 2016
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.96 KB | None | 0 0
  1. --#requires
  2.  
  3. local fs = require("filesystem")
  4. local term = require("term")
  5. local serialization = require("serialization")
  6. local component = require("component")
  7. local event = require("event")
  8. local component = require("component")
  9. local colors = require("colors")
  10.  
  11. --#variables
  12. local gpu = component.gpu
  13. local config = {}
  14. local reactor = nil
  15. local running = true
  16. local screen = "main"
  17. local gpuScreen = "";
  18. --#install
  19.  
  20. function install()
  21.   screen = "install"
  22.   term.clear()
  23.   print("Requirements:")
  24.   print("Tier 2 screen")
  25.   print("Tier 2 graphics card")
  26.   print("A BigReactor connected by cable from computer port to computer")
  27.   print("A keyboard for install only, optional for practical use")
  28.   print()
  29.   print("Are all requirements met? (y/n)")
  30.   --21,49
  31.   local result = false
  32.   while not result do
  33.     local name, adress, char, code, player = event.pull("key_down")
  34.     if code == 21 then
  35.       result = true
  36.     elseif code == 49 then
  37.       os.exit()
  38.     else
  39.       print("Invalid response")
  40.     end
  41.   end
  42.   --set resolution and continue
  43.   gpu.setResolution(80,25)
  44.   gpu.setForeground(0x000000)
  45.   term.clear()
  46.   gpu.setBackground(0x0000BB)
  47.   term.clear()
  48.   gpu.setBackground(0x808080)
  49.   gpu.fill(20,9,40,6," ")
  50.   term.setCursor(20,9)
  51.   print("Thank you for downloading")
  52.   term.setCursor(20,10)
  53.   print("OpenReactor")
  54.   term.setCursor(20,11)
  55.   print("press ok to continue")
  56.   term.setCursor(20,12)
  57.   print("press cancel to cancel the installation")
  58.   gpu.setBackground(0x008000)
  59.   gpu.fill(20,14,20,1," ")
  60.   term.setCursor(29,14)
  61.   print("ok")
  62.   gpu.setBackground(0x800000)
  63.   gpu.fill(40,14,20,1," ")
  64.   term.setCursor(48,14)
  65.   print("cancel")
  66.   local event_running = true
  67.   while event_running do
  68.     local name, address, x, y, button, player = event.pull("touch")
  69.     if x >= 20 and x <= 39 and y == 14 then
  70.       print("ok")
  71.       event_running = false
  72.     elseif x>=40 and x <= 59 and y == 14 then
  73.       os.exit()
  74.     end
  75.   end
  76.   install_pick_reactor()
  77.   install_pick_screen()
  78.   set_color_scheme()
  79.   save_config()
  80.   main()
  81. end
  82.  
  83. --#main
  84.  
  85. function main()
  86.   screen = "main"
  87.   read_config()
  88.   gpu.bind(config.screen)
  89.   gpu.setResolution(80,25)
  90.   reactor = component.proxy(config.reactor)
  91.   event.listen("touch",listen)
  92.   while running do
  93.     if config.auto_power.enabled == true then
  94.       if reactor.getEnergyStored()/10^5<config.auto_power.start_percent then
  95.         reactor.setActive(true)
  96.       elseif reactor.getEnergyStored()/10^5>config.auto_power.stop_percent then
  97.         reactor.setActive(false)
  98.       end
  99.     end
  100.     gpu.setBackground(config.color_scheme.background)
  101.     term.clear()
  102.     draw_menubar()
  103.     if screen == "main" then
  104.       draw_main()
  105.     elseif screen == "config" then
  106.       draw_config()
  107.     end
  108.     os.sleep(.05)
  109.   end
  110. end
  111.  
  112. --#draw_menubar
  113.  
  114. function draw_menubar()
  115.   term.setCursor(1,1)
  116.   gpu.setBackground(config.color_scheme.menubar.background)
  117.   gpu.setForeground(config.color_scheme.menubar.foreground)
  118.   term.clearLine()
  119.   term.setCursor(1,1)
  120.   term.write("Status: ")
  121.   if reactor.getActive() then
  122.     gpu.setForeground(config.color_scheme.success)
  123.     term.write("Online ")
  124.   else
  125.     gpu.setForeground(config.color_scheme.error)
  126.     term.write("Offline ")
  127.   end
  128.   if config.auto_power.enabled then
  129.     gpu.setForeground(config.color_scheme.menubar.foreground)
  130.     term.write("(")
  131.     gpu.setForeground(config.color_scheme.info)
  132.     term.write("Auto")
  133.     gpu.setForeground(config.color_scheme.menubar.foreground)
  134.     term.write(") ")
  135.   end
  136.   gpu.setForeground(config.color_scheme.menubar.foreground)
  137.   term.write(" Fuel Temperature: ")
  138.   gpu.setForeground(config.color_scheme.info)
  139.   term.write(round(reactor.getFuelTemperature()).."C ")
  140.   gpu.setForeground(config.color_scheme.menubar.foreground)
  141.   term.write(" Casing Temperature: ")
  142.   gpu.setForeground(config.color_scheme.info)
  143.   term.write(round(reactor.getCasingTemperature()).."C ")
  144.   term.setCursor(74,1)
  145.   gpu.setForeground(config.color_scheme.menubar.foreground)
  146.   term.write("[")
  147.   gpu.setForeground(config.color_scheme.error)
  148.   term.write("Exit")
  149.   gpu.setForeground(config.color_scheme.menubar.foreground)
  150.   term.write("]")
  151. end
  152.  
  153. --#save_config
  154.  
  155. function save_config()
  156.   local file = io.open("/etc/latias-reactor.cfg","w")
  157.   file:write(serialization.serialize(config,false))
  158.   file:close()
  159. end
  160.  
  161. --#read_config
  162.  
  163. function read_config()
  164.   local file = io.open("/etc/latias-reactor.cfg","r")
  165.   local c = serialization.unserialize(file:read(fs.size("/etc/latias-reactor.cfg")))
  166.   file:close()
  167.   for k,v in pairs(c) do
  168.     config[k] = v
  169.   end
  170. end
  171.  
  172. --#set_color_scheme
  173.  
  174. function set_color_scheme()
  175.   config.color_scheme = {}
  176.   config.color_scheme.background = 0x0000BB
  177.   config.color_scheme.button = 0x606060
  178.   config.color_scheme.button_disabled = 0xC0C0C0
  179.   config.color_scheme.foreground = 0x000000
  180.   config.color_scheme.progressBar = {}
  181.   config.color_scheme.progressBar.background = 0x000000
  182.   config.color_scheme.progressBar.foreground = 0xFFFFFF
  183.   config.color_scheme.menubar={}
  184.   config.color_scheme.menubar.background = 0x000000
  185.   config.color_scheme.menubar.foreground = 0xFFFFFF
  186.   config.color_scheme.success = 0x008000
  187.   config.color_scheme.error = 0x800000
  188.   config.color_scheme.info = 0x808000
  189.   config.auto_power = {}
  190.   config.auto_power.enabled = false
  191.   config.auto_power.start_percent = 15
  192.   config.auto_power.stop_percent = 80
  193. end
  194.  
  195. --#install_pick_reactor
  196.  
  197. function install_pick_reactor()
  198.   gpu.setBackground(0x0000BB)
  199.   term.clear()
  200.   gpu.setBackground(0x808080)
  201.   local reactors = component.list("br_reactor")
  202.   local len = 3
  203.   for k,v in pairs(reactors) do
  204.     if len<#k then
  205.       len = #k
  206.     end
  207.   end
  208.   local s_x = 40-len/2
  209.   local s_y = 13-round(countTable(reactors)/2)
  210.   gpu.fill(s_x-1,s_y-2,len+2,countTable(reactors)+3," ")
  211.   term.setCursor(s_x+9,s_y-2)
  212.   print("select a reactor")
  213.   local i = s_y
  214.   for k,v in pairs(reactors) do
  215.     term.setCursor(s_x,i)
  216.     print(k)
  217.     i=i+1
  218.   end
  219.   local event_running = true
  220.   while event_running do
  221.     local name, address, x, y, button, player = event.pull("touch")
  222.     print(y-s_y)
  223.     if x>=s_x and x <= s_x+len and y>=s_y and y<= s_y+countTable(reactors) then
  224.       event_running = false
  225.       local i = y-s_y
  226.       for k,v in pairs(reactors) do
  227.         if i == 0 then
  228.           config.reactor = k
  229.         end
  230.         i=i-1
  231.       end
  232.     end
  233.   end
  234. end
  235.  
  236. --#install_pick_screen
  237.  
  238. function install_pick_screen()
  239.   gpu.setBackground(0x0000BB)
  240.   term.clear()
  241.   gpu.setBackground(0x808080)
  242.   local reactors = component.list("screen")
  243.   local len = 3
  244.   for k,v in pairs(reactors) do
  245.     if len<#k then
  246.       len = #k
  247.     end
  248.   end
  249.   local s_x = 40-len/2
  250.   local s_y = 13-round(countTable(reactors)/2)
  251.   gpu.fill(s_x-1,s_y-2,len+2,countTable(reactors)+3," ")
  252.   term.setCursor(s_x+9,s_y-2)
  253.   print("select a screen")
  254.   local i = s_y
  255.   for k,v in pairs(reactors) do
  256.     term.setCursor(s_x,i)
  257.     print(k)
  258.     i=i+1
  259.   end
  260.   local event_running = true
  261.   while event_running do
  262.     local name, address, x, y, button, player = event.pull("touch")
  263.     print(y-s_y)
  264.     if x>=s_x and x <= s_x+len and y>=s_y and y<= s_y+countTable(reactors) then
  265.       event_running = false
  266.       local i = y-s_y
  267.       for k,v in pairs(reactors) do
  268.         if i == 0 then
  269.           config.screen = k
  270.         end
  271.         i=i-1
  272.       end
  273.     end
  274.   end
  275. end
  276.  
  277. --#draw_main
  278.  
  279. function draw_main()
  280.   if config.auto_power.enabled then
  281.     gpu.setBackground(config.color_scheme.button)
  282.     gpu.setForeground(0xFFFFFF)
  283.     gpu.fill(1,2,69,3," ")
  284.     term.setCursor(25,3)
  285.     term.write("Disable Auto-Power")
  286.     gpu.setBackground(0x153F3F)
  287.     gpu.fill(70,2,11,3," ")
  288.     term.setCursor(71,3)
  289.     term.write("Configure")
  290.   else
  291.     gpu.setBackground(config.color_scheme.button)
  292.     gpu.setForeground(0xFFFFFF)
  293.     gpu.fill(1,2,69,3," ")
  294.     term.setCursor(25,3)
  295.     term.write("Enable Auto-Power")
  296.     gpu.setBackground(0x153F3F)
  297.     gpu.fill(70,2,11,3," ")
  298.     term.setCursor(73,3)
  299.     term.write("Power")
  300.   end
  301.   gpu.setForeground(0xFFFFFF)
  302.   gpu.setBackground(config.color_scheme.button)
  303.   gpu.fill(1,8,13,3," ")
  304.   gpu.fill(1,14,13,3," ")
  305.   gpu.fill(1,20,13,3," ")
  306.   term.setCursor(1,9)
  307.   term.write("Energy Buffer")
  308.   term.setCursor(2,15)
  309.   term.write("Fuel Level")
  310.   term.setCursor(2,21)
  311.   term.write("Reactivity")
  312.   drawProgressBar(14,8,65,3,reactor.getEnergyStored()/10^7,0,16711680) -- Red
  313.   drawProgressBar(14,14,65,3,reactor.getFuelAmount()/reactor.getFuelAmountMax(),0,16776960) -- Yellow
  314.   drawProgressBar(14,20,65,3,reactor.getFuelReactivity()/10^2,0,65280) -- Green
  315.   if config.auto_power.enabled then
  316.     gpu.setBackground(config.color_scheme.success)
  317.     gpu.fill(14+65*config.auto_power.start_percent/10^2,8,1,3," ")
  318.     gpu.setBackground(config.color_scheme.error)
  319.     gpu.fill(14+65*config.auto_power.stop_percent/10^2,8,1,3," ")
  320.   end
  321. end
  322.  
  323. --#draw_config
  324.  
  325. function draw_config()
  326.   gpu.setBackground(config.color_scheme.button)
  327.   gpu.fill(5,9,71,9," ")
  328.   gpu.setForeground(0xFFFFFF)
  329.   term.setCursor(36,9)
  330.   term.write("Configure")
  331.   term.setCursor(35,10)
  332.   term.write("Start: "..config.auto_power.start_percent.."%")
  333.   term.setCursor(36,11)
  334.   term.write("Stop: "..config.auto_power.stop_percent.."%")
  335.   drawProgressBar(8,12,65,3,reactor.getEnergyStored()/10^7,0,16777215)
  336.   gpu.setBackground(config.color_scheme.success)
  337.   gpu.fill(8+65*config.auto_power.start_percent/100,12,1,3," ")
  338.   gpu.setBackground(config.color_scheme.error)
  339.   gpu.fill(8+65*config.auto_power.stop_percent/100,12,1,3," ")
  340.   gpu.setBackground(config.color_scheme.button)
  341.   gpu.setForeground(0xFFFFFF)
  342.   term.setCursor(37+#("Start: "..config.auto_power.start_percent.."%"),10)
  343.   term.write("[")
  344.   gpu.setForeground(config.color_scheme.error)
  345.   term.write("-")
  346.   gpu.setForeground(0xFFFFFF)
  347.   term.write("]  [")
  348.   gpu.setForeground(config.color_scheme.success)
  349.   term.write("+")
  350.   gpu.setForeground(0xFFFFFF)
  351.   term.write("]")
  352.   term.setCursor(38+#("Stop: "..config.auto_power.stop_percent.."#"),11)
  353.   term.write("[")
  354.   gpu.setForeground(config.color_scheme.error)
  355.   term.write("-")
  356.   gpu.setForeground(0xFFFFFF)
  357.   term.write("]  [")
  358.   gpu.setForeground(config.color_scheme.success)
  359.   term.write("+")
  360.   gpu.setForeground(0xFFFFFF)
  361.   term.write("]")
  362.   term.setCursor(5,9)
  363.   term.write("[")
  364.   gpu.setForeground(config.color_scheme.info)
  365.   term.write("back")
  366.   gpu.setForeground(0xFFFFFF)
  367.   term.write("]")
  368. end
  369.  
  370. --#drawProgressBar
  371.  
  372. function drawProgressBar(x,y,w,h,percent,bg,fg)
  373.   gpu.setBackground(bg)
  374.   gpu.fill(x,y,w,h," ")
  375.   gpu.setBackground(fg)
  376.   gpu.fill(x,y,w*percent,h," ")
  377. end
  378.  
  379. --#listen
  380.  
  381. function listen(name,address,x,y,button,player)
  382.   if x >= 74 and x <= 80 and y == 1 then
  383.     running = false
  384.   end
  385.   if screen == "main" then
  386.     if x >= 70 and y >=2 and x <= 80 and y <= 4 and config.auto_power.enabled ~= true then
  387.       reactor.setActive(not reactor.getActive())
  388.     elseif x >= 1 and y >=2 and x <= 69 and y <= 4 then
  389.       config.auto_power.enabled = not config.auto_power.enabled
  390.       save_config()
  391.     elseif x >= 70 and y >= 2 and x <= 80 and y <= 4 and config.auto_power.enabled then
  392.       screen = "config"
  393.     end
  394.   elseif screen=="config" then
  395.     if x>= 5 and x <= 10 and y == 9 then
  396.       screen="main"
  397.     elseif x >= 37 + #("Start: "..config.auto_power.start_percent.."%") and x <= 40+#("Start: "..config.auto_power.start_percent.."%") and y == 10 and config.auto_power.start_percent ~= 0 then
  398.       config.auto_power.start_percent = config.auto_power.start_percent-1
  399.       save_config()
  400.     elseif x >= 43 + #("Start: "..config.auto_power.start_percent.."%") and x <= 46+#("Start: "..config.auto_power.start_percent.."%") and y == 10 and config.auto_power.start_percent+1 ~= config.auto_power.stop_percent then
  401.       config.auto_power.start_percent = config.auto_power.start_percent+1
  402.       save_config()
  403.     elseif x >= 38 + #("Stop: "..config.auto_power.stop_percent.."%") and x <= 41 + #("Stop: "..config.auto_power.stop_percent.."%") and y == 11 and config.auto_power.stop_percent - 1 ~= config.auto_power.start_percent then
  404.       config.auto_power.stop_percent = config.auto_power.stop_percent - 1
  405.       save_config()
  406.     elseif x >= 44 + #("Stop: "..config.auto_power.stop_percent.."%") and x <= 47 + #("Stop: "..config.auto_power.stop_percent.."%") and y == 11 and config.auto_power.stop_percent ~= 100 then
  407.       config.auto_power.stop_percent = config.auto_power.stop_percent + 1
  408.       save_config()
  409.     end
  410.   end
  411. end
  412.  
  413. --#countTable
  414.  
  415. function countTable(table)
  416. local result = 0
  417.   for k,v in pairs(table) do
  418.     result = result+1
  419.   end
  420. return result
  421. end
  422.  
  423. --#round
  424.  
  425. function round(num,idp)
  426.   local mult = 10^(idp or 0)
  427.   return math.floor(num*mult+0.5)/mult
  428. end
  429.  
  430. --#init
  431. if not fs.exists("/etc/latias-reactor.cfg") then
  432.   install()
  433. else
  434.   main()
  435. end
  436. event.ignore("touch",listen)
  437. gpu.setBackground(0x000000)
  438. gpu.setForeground(0xFFFFFF)
  439. term.clear()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement