Advertisement
IronicPickle

setupUtils.lua

Feb 27th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.04 KB | None | 0 0
  1. -- Libraries
  2. local monUtils = require("/lua/lib/monitorUtils")
  3. local write = monUtils.write
  4. -- Exported table
  5. local M = {}
  6.  
  7. function M.getPers(requiredPers)
  8.     term.current().clear()
  9.     term.current().setCursorPos(1, 2)
  10.     print("# Peripheral Setup\n")
  11.    
  12.     print("- Required Peripherals:\n")
  13.     print(unpack(requiredPers))
  14.    
  15.     local activePers = peripheral.getNames()
  16.     local wrappedPers = {}
  17.     local pers = {}
  18.    
  19.     for i, side in pairs(activePers) do
  20.         local per = peripheral.wrap(side)
  21.         local perName = peripheral.getType(side)
  22.        
  23.         if(wrappedPers[perName] == nil) then
  24.             wrappedPers[perName] = {}
  25.         end
  26.        
  27.         local indexTable = {}
  28.         for ii, v in pairs(requiredPers) do
  29.             indexTable[v] = ii
  30.         end
  31.        
  32.         local perIndex = indexTable[perName]
  33.         if(perIndex) then
  34.             table.remove(requiredPers, perIndex)
  35.             table.insert(pers, {
  36.                 tostring(i),
  37.                 perName,
  38.                 side
  39.             })
  40.         end
  41.        
  42.         table.insert(wrappedPers[perName], per)
  43.     end
  44.    
  45.     print("\n- Wrapped Peripherals:\n")
  46.     textutils.tabulate(unpack( pers ))
  47.     print("\n")
  48.    
  49.     if(#requiredPers > 0) then
  50.         error(
  51.             "\nMissing peripherals - " ..
  52.             table.concat(requiredPers, ", ")
  53.         )
  54.     end
  55.    
  56.     return wrappedPers
  57. end
  58.  
  59. function M.setupMonitor(monitor, scale)
  60.     monitor.setBackgroundColor(colors.black)
  61.     monitor.clear()
  62.     if(scale) then
  63.         monitor.setTextScale(scale)
  64.     end
  65.     monitor.setCursorPos(2, 2)
  66.     local resX, resY = monitor.getSize()
  67.     monitor.x = resX
  68.     monitor.y = resY
  69.    
  70.     return monitor
  71.    
  72. end
  73.  
  74. function M.setupWindow(monitor, x, y, width, height)
  75.     local win = window.create(
  76.         monitor, x or 1, y or 1,
  77.         width or monitor.x,
  78.         height or monitor.y
  79.     )
  80.     win.setCursorPos(2, 2)
  81.     local resX, resY = win.getSize()
  82.     win.x = resX
  83.     win.y = resY
  84.     win.posX = x
  85.     win.posY = y
  86.    
  87.     return win
  88.    
  89. end
  90.  
  91. function M.utilsWrapper(callback, modem, channel)
  92.     parallel.waitForAny(callback, function()
  93.         while(true) do
  94.             local event, p1, p2, p3, p4, p5 = os.pullEvent()
  95.            
  96.             local isDelKey = (event == "key" and p1 == 211)
  97.            
  98.             local isModemMessage = (event == "modem_message")
  99.            
  100.             if(isDelKey) then
  101.                 if(modem and channel) then
  102.                     modem.transmit(channel, channel,
  103.                         {
  104.                             type = "globalRestart"
  105.                         }
  106.                     )
  107.                 end
  108.                 break
  109.             elseif(isModemMessage) then
  110.                 local body = p4
  111.                 if(body.type == "globalRestart") then
  112.                     break
  113.                 end
  114.             end
  115.            
  116.         end
  117.     end)
  118.     return
  119. end
  120.  
  121. function M.setupNetwork(modem, channel, deviceData, output)
  122.     output = output or M.setupMonitor(term.native())
  123.     write(output,
  124.         "# Network Setup #",
  125.         0, 2, "centre"
  126.     )
  127.     write(output,
  128.         "Channel: " .. channel,
  129.         0, 4, "centre"
  130.     )
  131.     write(output,
  132.         "No network found",
  133.         0, 6, "centre"
  134.     )
  135.     write(output,
  136.         "Press Enter or Right Click",
  137.         0, 8, "centre"
  138.     )
  139.     write(output,
  140.         "to create a network",
  141.         0, 9, "centre"
  142.     )
  143.    
  144.     modem.open(channel)
  145.     modem.transmit(channel, channel,
  146.         {
  147.             type = "networkPoll",
  148.             deviceData = deviceData
  149.         }
  150.     )
  151.    
  152.     while(true) do
  153.         local event, p1, p2, p3, p4, p5 = os.pullEvent()
  154.        
  155.         local isEnterKey = (event == "key" and p1 == 28)
  156.         local isRightClick = (event == "mouse_click" and p1 == 2)
  157.         local isTouch = (event == "monitor_touch")
  158.        
  159.         local isModemMessage = (event == "modem_message")
  160.        
  161.         if(isEnterKey or isRightClick or isTouch) then
  162.             return createNetwork(modem, channel, deviceData, output)
  163.         elseif(isModemMessage) then
  164.             local body = p4
  165.             if(body.type == "networkPollRes") then
  166.                 return joinNetwork(modem, channel, deviceData, output)
  167.             elseif(body.type == "networkCreate") then
  168.                 modem.transmit(channel, channel,
  169.                     {
  170.                         type = "networkPoll",
  171.                         deviceData = deviceData
  172.                     }
  173.                 )
  174.             end
  175.         end
  176.     end
  177. end
  178.  
  179. function createNetwork(modem, channel, deviceData, output)
  180.     local devices = { deviceData }
  181.  
  182.     printNetwork(devices, output)
  183.    
  184.     modem.transmit(channel, channel,
  185.         {
  186.             type = "networkCreate"
  187.         }
  188.     )
  189.    
  190.     while(true) do
  191.         local event, p1, p2, p3, p4, p5 = os.pullEvent()
  192.        
  193.         local isEnterKey = (event == "key" and p1 == 28)
  194.         local isRightClick = (event == "mouse_click" and p1 == 2)
  195.         local isTouch = (event == "monitor_touch")
  196.        
  197.         local isModemMessage = (event == "modem_message")
  198.        
  199.         if(isEnterKey or isRightClick or isTouch) then
  200.             modem.transmit(channel, channel,
  201.                 {
  202.                     type = "networkContinue",
  203.                     devices = devices
  204.                 }
  205.             )
  206.             return devices
  207.          elseif(isModemMessage) then
  208.             local body = p4
  209.             if(body.type == "networkPoll") then
  210.                 table.insert(devices, body.deviceData)
  211.                 printNetwork(devices, output)
  212.                 modem.transmit(channel, channel,
  213.                     {
  214.                         type = "networkPollRes"
  215.                     }
  216.                 )
  217.             end
  218.         end
  219.     end
  220. end
  221.  
  222. function printNetwork(devices, output)
  223.     output.clear()
  224.     write(output,
  225.         "# Network Setup #",
  226.         0, 2, "centre"
  227.     )
  228.     write(output,
  229.         "Network created",
  230.         0, 4, "centre"
  231.     )
  232.     write(output,
  233.         "Devices on Network: " .. #devices,
  234.         0, 6, "centre"
  235.     )
  236.     write(output,
  237.         "Press Enter or Right Click",
  238.         0, 8, "centre"
  239.     )
  240.     write(output,
  241.         "to continue",
  242.         0, 9, "centre"
  243.     )
  244. end
  245.  
  246. function joinNetwork(modem, channel, deviceData, output)
  247.     output.clear()
  248.     write(output,
  249.         "# Network Setup #",
  250.         0, 2, "centre"
  251.     )
  252.     write(output,
  253.         "Network joined",
  254.         0, 4, "centre"
  255.     )
  256.     write(output,
  257.         "Awaiting further response...",
  258.         0, 6, "centre"
  259.     )
  260.    
  261.     while(true) do
  262.         local event, p1, p2, p3, p4, p5 = os.pullEvent()
  263.        
  264.         local isModemMessage = (event == "modem_message")
  265.        
  266.         if(isModemMessage) then
  267.             local body = p4
  268.             if(body.type == "networkContinue") then
  269.                 return body.devices
  270.             end
  271.         end
  272.     end
  273. end
  274.  
  275. return M
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement