Advertisement
infiniteblock

Untitled

Mar 26th, 2020
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if warpdriveCommons then os.unloadAPI("warpdriveCommons") end
  2. if not os.loadAPI("warpdrive/warpdriveCommons") then error("missing warpdriveCommons") end
  3. local w = warpdriveCommons.w
  4.  
  5. local data
  6.  
  7. ----------- Force field support
  8.  
  9. local ffield_projectorAddresses = {}
  10. local ffield_projectors = {}
  11. local ffield_projector_indexSelected = 1
  12. local ffield_projector_indexFirstLine = 1
  13. local ffield_projector_lines = 10
  14.  
  15. function ffield_boot(isDetailed)
  16.   if #ffield_projectorAddresses == 0 and #ffield_relayAddresses == 0 then
  17.     return
  18.   end
  19.  
  20.   if isDetailed == nil then
  21.     isDetailed = true
  22.   end
  23.  
  24.   if isDetailed then
  25.     w.write("Booting Cores")
  26.    
  27.     w.writeLn("...")
  28.     w.sleep(0.1)
  29.   end
  30.  
  31.   -- getting projectors parameters
  32.   ffield_projectors = {}
  33.   for key, address in pairs(ffield_projectorAddresses) do
  34.     local device = w.device_get(address)
  35.     local name = device.name()
  36.     fn = ""
  37.     file = name:gsub(" ","")
  38.     stt = "disk/"..file
  39.     f = fs.open(stt,"r");
  40.     fn = f.readAll();
  41.    x, y, z = fn
  42.     f.close();  
  43.    -- local pos = device.getLocalPosition()
  44.     local name1 = device.name()
  45.     local projector = {
  46.       address = address,
  47.       device = device,
  48.       position = { x = x, y = y, z = z },
  49.       name = name1,
  50.       shape = shape,
  51.       isEnabled = isEnabled }
  52.     if isDetailed then
  53.       w.writeLn(ffield_projector_getDescription(projector))
  54.     end
  55.    
  56.     table.insert(ffield_projectors, projector)
  57.   end
  58.  
  59. end
  60.  
  61.  
  62. function ffield_save()
  63.   -- nothing
  64. end
  65.  
  66. function ffield_read(parData)
  67.   data = parData
  68. end
  69.  
  70. function ffield_projector_getDescription(projector)
  71.   if projector == nil or projector.device == nil then
  72.     return "~invalid~"
  73.   end
  74.     fn = ""
  75.     file = name:gsub(" ","")
  76.     stt = "disk/"..file
  77.     f = fs.open(stt,"r");
  78.     fn = f.readAll();
  79.    x, y, z = fn
  80.     f.close();  
  81.   local description = "#" .. w.format_string(projector.name, 20)
  82.           .. " @ " .. print("fn")
  83.           --.. " Y " .. w.format_integer(y1, 3) .. " Z " .. w.format_integer(z1, 7) .. ") "
  84.   return description
  85. end
  86.  
  87. function ffield_projector_getIndexes()
  88.   if ffield_projectors ~= nil then
  89.     if ffield_projector_indexSelected > #ffield_projectors then
  90.       ffield_projector_indexSelected = 1
  91.     elseif ffield_projector_indexSelected < 1 then
  92.       ffield_projector_indexSelected = #ffield_projectors
  93.     end
  94.     if ffield_projector_indexFirstLine > ffield_projector_indexSelected then
  95.       ffield_projector_indexFirstLine = ffield_projector_indexSelected
  96.     elseif ffield_projector_indexFirstLine + ffield_projector_lines < ffield_projector_indexSelected then
  97.       ffield_projector_indexFirstLine = ffield_projector_indexSelected - ffield_projector_lines
  98.     end
  99.     return ffield_projector_indexFirstLine, ffield_projector_indexSelected
  100.   else
  101.     return 1, 1
  102.   end
  103. end
  104.  
  105. function ffield_projector_get(index)
  106.   local indexToUse = index
  107.   local projector
  108.  
  109.   if ffield_projectors ~= nil then
  110.     if indexToUse > #ffield_projectors then
  111.       indexToUse = 1
  112.     elseif indexToUse < 1 then
  113.       indexToUse = #ffield_projectors
  114.     end
  115.     projector = ffield_projectors[indexToUse]
  116.   end
  117.  
  118.   if projector == nil then
  119.     ffield_boot(false)
  120.     w.status_showWarning("Invalid projector index " .. index)
  121.     projector = {
  122.       address = "-",
  123.       device = nil,
  124.       position = { x = 0, y = 0, z = 0 },
  125.       name = "-",
  126.       beamFrequency = -1,
  127.       shape = "NONE",
  128.       isEnabled = false }
  129.   end
  130.  
  131.   return projector
  132. end
  133.  
  134. function ffield_projector_getSelected()
  135.   return ffield_projector_get(ffield_projector_indexSelected)
  136. end
  137.  
  138. function ffield_enable(projectorOrRelay, enable)
  139.   if projectorOrRelay == nil or projectorOrRelay.device == nil then
  140.     return
  141.   end
  142.   local enableToApply = enable
  143.   if enableToApply == nil then
  144.     enableToApply = not projectorOrRelay.device.enable()
  145.   end
  146.   projectorOrRelay.isEnabled = projectorOrRelay.device.enable(enableToApply)
  147.   return projectorOrRelay.isEnabled
  148. end
  149.  
  150. function ffield_projector_key(character, keycode)
  151.   if character == 's' or character == 'S' then
  152.     for key, projector in pairs(ffield_projectors) do
  153.       ffield_enable(projector, true)
  154.     end
  155.     return true
  156.   elseif character == 'p' or character == 'P' then
  157.     for key, projector in pairs(ffield_projectors) do
  158.       ffield_enable(projector, false)
  159.     end
  160.     return true
  161.   elseif character == 'e' or character == 'E' then
  162.     local projector = ffield_projector_getSelected()
  163.     if projector ~= nil and projector.device ~= nil then
  164.       ffield_enable(projector)
  165.     end
  166.     return true
  167.   elseif character == 'c' or character == 'C' then -- C or keycode == 46
  168.     ffield_projector_config()
  169.     w.data_save()
  170.     return true
  171.   elseif keycode == 200 or keycode == 203 or character == '-' then -- Up or Left or -
  172.     ffield_projector_indexSelected = ffield_projector_indexSelected - 1
  173.     return true
  174.   elseif keycode == 208 or keycode == 205 or character == '+' then -- Down or Right or +
  175.     ffield_projector_indexSelected = ffield_projector_indexSelected + 1
  176.     return true
  177.   end
  178.   return false
  179. end
  180.  
  181. function ffield_projector_page()
  182.   w.page_begin(w.data_getName() .. " - Monitored Cores")
  183.  
  184.   -- w.setCursorPos(1, 2)
  185.   if #ffield_projectors == 0 then
  186.     w.setColorDisabled()
  187.     w.writeCentered(2, "No force field projector defined, connect one and reboot!")
  188.   else
  189.     w.setColorNormal()
  190.     local indexFirstLine, indexSelected = ffield_projector_getIndexes()
  191.     w.writeCentered(2, "Monitored Core " .. indexSelected .. " of " .. #ffield_projectors .. " is selected")
  192.     local indexLastLine = math.min(indexFirstLine + ffield_projector_lines, #ffield_projectors)
  193.     for indexCurrent = indexFirstLine, indexLastLine do
  194.       if indexCurrent == indexSelected then
  195.         w.setColorSelected()
  196.         w.clearLine()
  197.         w.write(">")
  198.       else
  199.         w.setColorNormal()
  200.         w.write(" ")
  201.       end
  202.       local projector = ffield_projector_get(indexCurrent)
  203.       local description = ffield_projector_getDescription(projector)
  204.       w.write(description)
  205.       w.writeLn("")
  206.     end
  207.   end
  208.  
  209.   w.setCursorPos(1, 16)
  210.   w.setColorNormal()
  211.   w.write("  -----------------------------------------------")
  212.  
  213.   w.setCursorPos(1, 17)
  214.   w.setColorControl()
  215. end
  216.  
  217. function ffield_register()
  218.   w.device_register("warpdriveShipController",
  219.       function(deviceType, address, wrap) table.insert(ffield_projectorAddresses, address) end,
  220.       function() end)
  221. end
  222.  
  223. ----------- connections status
  224.  
  225. function connections_page(isBooting)
  226.   w.page_begin(w.data_getName() .. " - Connections")
  227.  
  228.   w.writeLn("")
  229.  
  230.   local monitors = w.device_getMonitors()
  231.   if #monitors == 0 then
  232.     w.setColorDisabled()
  233.     w.writeLn("No Monitor detected")
  234.   elseif #monitors == 1 then
  235.     w.setColorSuccess()
  236.     w.writeLn("1 monitor detected")
  237.   else
  238.     w.setColorSuccess()
  239.     w.writeLn(#monitors .. " Monitors detected")
  240.   end
  241.  
  242.   if #ffield_projectorAddresses == 0 then
  243.     w.setColorDisabled()
  244.     w.writeLn("No Ship Controllers Detected.")
  245.   elseif #ffield_projectorAddresses == 1 then
  246.     w.setColorSuccess()
  247.     w.writeLn("1 Ship Controller Detected.")
  248.   else
  249.     w.setColorSuccess()
  250.     w.writeLn(#ffield_projectorAddresses .. " Ship Controllers Detected.")
  251.   end
  252.  
  253.   if isBooting then
  254.     ffield_boot()
  255.   end
  256.  
  257.   w.writeLn("")
  258.   w.setColorNormal()
  259.   w.writeLn("This is a keyboard controlled user interface.")
  260.   w.write("Key controls are written like so: ")
  261.   w.setColorControl()
  262.   w.write("Action (key)")
  263.   w.setColorNormal()
  264.   w.writeLn(".")
  265.   w.write("For example, typing ")
  266.   w.setColorControl()
  267.   w.write(" 1 ")
  268.   w.setColorNormal()
  269.   w.writeLn(" will open Cores.")
  270. end
  271.  
  272. ----------- Boot sequence
  273.  
  274. w.page_setEndText(" Home (0), Cores (1), Notifications (2)")
  275. w.page_register('0', connections_page, nil)
  276. w.page_register('1', ffield_projector_page, ffield_projector_key)
  277. w.page_register('2', ffield_relay_page, ffield_relay_key)
  278. ffield_register()
  279.  
  280. w.boot()
  281. w.run()
  282. w.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement