Advertisement
ben_mkiv

wirelessRedstoneGUI.lua

Apr 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.52 KB | None | 0 0
  1. require("wirelessRedstone")
  2. require("hazeUI")
  3.  
  4. gui = clone(hazeUI)
  5. gui.gpu = component.gpu
  6. gui.super = gui
  7. gui.self = gui
  8.  
  9. function touchEventHandler(id, device, x, y, button, user)
  10.     --if user ~= "ben_mkiv" then return false; end
  11.     return gui:touchEvent(x, y, user)
  12. end
  13.  
  14. function closeTool()
  15.     gui.gpu.setBackground(0x0)
  16.     gui.gpu.setForeground(0xFFFFFF)
  17.     gui.gpu.setResolution(60,30)
  18.     event.ignore("touch", touchEventHandler)
  19.     saveConfig(configFile, config)
  20.     require("term").clear()
  21.     os.exit()
  22. end
  23.  
  24. function status(message, timeout)
  25.     local backgroundColor = 0xFFB000
  26.  
  27.     if message == "" then
  28.         backgroundColor = 0x4E4E4E
  29.     end
  30.  
  31.     gui:setElement({index = statusBar, text = message, bg = backgroundColor })
  32.  
  33.     gui:drawElement(gui.els[statusBar])
  34.  
  35.     if timeout ~= nil and timeout > 0 then
  36.         event.timer(timeout, function() status("") end)
  37.     end
  38. end
  39.  
  40. function toggleOutput(output)
  41.     local statusMessage = "toggle output " .. output.device .. ", " .. output.side .. "... "
  42.     status(statusMessage)
  43.     local rs = 15
  44.     if output.status ~= nil and output.status > 0 then rs = 0; end
  45.  
  46.     output.status = setOutput(output.device, output.side, rs)
  47.  
  48.     for i=1,#config.outputs do
  49.         if config.outputs[i].device == output.device and config.outputs[i].side == output.side then
  50.             config.outputs[i].status = output.status
  51.         end
  52.     end
  53.  
  54.     status(statusMessage .. "done. (" .. output.status .. ")", 2)
  55. end
  56.  
  57. function addRedstoneOutput(address, side, name, outputStatus)
  58.     if name == "" or name == '\n' or not name then return; end
  59.     local output = {}
  60.     output.device = address
  61.     output.side = side
  62.     output.name = name
  63.  
  64.     if outputStatus == nil then
  65.         output.status = getOutput(output.device, output.side)
  66.     else
  67.         output.status = outputStatus
  68.     end
  69.  
  70.     table.insert(config.outputs, output)
  71.     sortOutputs()
  72.     status("added new output '" .. output.name .. "'", 5)
  73. end
  74.  
  75. function addOutputFinal(data)
  76.     if data.value ~= "" then
  77.         addRedstoneOutput(data.e.device, data.e.side, data.value)
  78.     end
  79.     gui:drawMain()
  80. end
  81.  
  82. function addOutputName(data)
  83.     local output = {}
  84.  
  85.     for i=1,#sides do if sides[i-1] == data.label then output.side = (i-1) end end
  86.  
  87.     output.device = data.e.device
  88.     output.status = 0
  89.  
  90.     gui:addButton(42, 4, 20, 2, "toggle", "hazeUI_textInput", 0x282828, 0xFFB000, "left", toggleOutput, output)
  91.  
  92.     gui:textInput("enter name:", { f = addOutputFinal, p = { side = output.side, device = output.device } })
  93. end
  94.  
  95. function addOutputSide(data)
  96.     os.sleep(0.2)
  97.  
  98.     local values = {}
  99.     for s=1,#sides do
  100.         local add = true
  101.         for i=1,#config.outputs do
  102.             if config.outputs[i].device == data.label then
  103.                 if config.outputs[i].side == (s-1) then
  104.                     add = false
  105.                 end end end
  106.  
  107.         if add then table.insert(values, sides[s-1]) end
  108.     end
  109.  
  110.     gui:list("select output side", data.label, values, { f = addOutputName, p = { device = data.label } })
  111. end
  112.  
  113. function addOutput()
  114.     os.sleep(0.2)
  115.     gui:list("select device", "-", devices, { f = addOutputSide, p = {} })
  116. end
  117.  
  118. function getStatusText(i)
  119.     if config.outputs[i].status ~= nil and config.outputs[i].status > 0 then
  120.         return "[X]"
  121.     elseif config.outputs[i].status ~= nil and config.outputs[i].status == 0 then
  122.         return "[ ]"
  123.     else
  124.         return "[?]"
  125.     end
  126. end
  127.  
  128. function toggleOutputGUI(data)
  129.     toggleOutput(config.outputs[data.output])
  130.  
  131.     gui:setElement({ index = data.button, text = getStatusText(data.output) })
  132.     gui:drawElement(gui.els[data.button])
  133. end
  134.  
  135. function turnOffAll()
  136.     status("disabling all spawners...")
  137.     --for i=1,#sides do
  138.     --    sendCB("r.setOutput("..(i-1)..", 0)", false)
  139.     --end
  140.  
  141.     for i=1,#config.outputs do
  142.         status("disabling all spawners... " .. i .. "/" .. #config.outputs)
  143.         config.outputs[i].status = setOutput(config.outputs[i].device, config.outputs[i].side, 0)
  144.     end
  145.  
  146.     status("disabling all spawners... done.", 5)
  147.     gui:drawMain()
  148. end
  149.  
  150. function getDevices()
  151.     io.write("fetch client data... ")
  152.     devices = sendCBM("return m.address", 2)
  153.     print("done. found " .. #devices .. " devices.")
  154. end
  155.  
  156. function getStatus()
  157.     io.write("fetch client redstone status... ")
  158.     for i=1,#config.outputs do
  159.         config.outputs[i].status = getOutput(config.outputs[i].device, config.outputs[i].side)
  160.     end
  161.     print("done.")
  162. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement