Advertisement
Guest User

startup

a guest
Mar 26th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.87 KB | None | 0 0
  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.   local description = "#" .. w.format_string(projector.name, 20)
  75.           .. " @ " .. print("hi")
  76.           --.. " Y " .. w.format_integer(y1, 3) .. " Z " .. w.format_integer(z1, 7) .. ") "
  77.   return description
  78. end
  79.  
  80. function ffield_projector_getIndexes()
  81.   if ffield_projectors ~= nil then
  82.     if ffield_projector_indexSelected > #ffield_projectors then
  83.       ffield_projector_indexSelected = 1
  84.     elseif ffield_projector_indexSelected < 1 then
  85.       ffield_projector_indexSelected = #ffield_projectors
  86.     end
  87.     if ffield_projector_indexFirstLine > ffield_projector_indexSelected then
  88.       ffield_projector_indexFirstLine = ffield_projector_indexSelected
  89.     elseif ffield_projector_indexFirstLine + ffield_projector_lines < ffield_projector_indexSelected then
  90.       ffield_projector_indexFirstLine = ffield_projector_indexSelected - ffield_projector_lines
  91.     end
  92.     return ffield_projector_indexFirstLine, ffield_projector_indexSelected
  93.   else
  94.     return 1, 1
  95.   end
  96. end
  97.  
  98. function ffield_projector_get(index)
  99.   local indexToUse = index
  100.   local projector
  101.  
  102.   if ffield_projectors ~= nil then
  103.     if indexToUse > #ffield_projectors then
  104.       indexToUse = 1
  105.     elseif indexToUse < 1 then
  106.       indexToUse = #ffield_projectors
  107.     end
  108.     projector = ffield_projectors[indexToUse]
  109.   end
  110.  
  111.   if projector == nil then
  112.     ffield_boot(false)
  113.     w.status_showWarning("Invalid projector index " .. index)
  114.     projector = {
  115.       address = "-",
  116.       device = nil,
  117.       position = { x = 0, y = 0, z = 0 },
  118.       name = "-",
  119.       beamFrequency = -1,
  120.       shape = "NONE",
  121.       isEnabled = false }
  122.   end
  123.  
  124.   return projector
  125. end
  126.  
  127. function ffield_projector_getSelected()
  128.   return ffield_projector_get(ffield_projector_indexSelected)
  129. end
  130.  
  131. function ffield_enable(projectorOrRelay, enable)
  132.   if projectorOrRelay == nil or projectorOrRelay.device == nil then
  133.     return
  134.   end
  135.   local enableToApply = enable
  136.   if enableToApply == nil then
  137.     enableToApply = not projectorOrRelay.device.enable()
  138.   end
  139.   projectorOrRelay.isEnabled = projectorOrRelay.device.enable(enableToApply)
  140.   return projectorOrRelay.isEnabled
  141. end
  142.  
  143. function ffield_projector_key(character, keycode)
  144.   if character == 's' or character == 'S' then
  145.     for key, projector in pairs(ffield_projectors) do
  146.       ffield_enable(projector, true)
  147.     end
  148.     return true
  149.   elseif character == 'p' or character == 'P' then
  150.     for key, projector in pairs(ffield_projectors) do
  151.       ffield_enable(projector, false)
  152.     end
  153.     return true
  154.   elseif character == 'e' or character == 'E' then
  155.     local projector = ffield_projector_getSelected()
  156.     if projector ~= nil and projector.device ~= nil then
  157.       ffield_enable(projector)
  158.     end
  159.     return true
  160.   elseif character == 'c' or character == 'C' then -- C or keycode == 46
  161.     ffield_projector_config()
  162.     w.data_save()
  163.     return true
  164.   elseif keycode == 200 or keycode == 203 or character == '-' then -- Up or Left or -
  165.     ffield_projector_indexSelected = ffield_projector_indexSelected - 1
  166.     return true
  167.   elseif keycode == 208 or keycode == 205 or character == '+' then -- Down or Right or +
  168.     ffield_projector_indexSelected = ffield_projector_indexSelected + 1
  169.     return true
  170.   end
  171.   return false
  172. end
  173.  
  174. function ffield_projector_page()
  175.   w.page_begin(w.data_getName() .. " - Monitored Cores")
  176.  
  177.   -- w.setCursorPos(1, 2)
  178.   if #ffield_projectors == 0 then
  179.     w.setColorDisabled()
  180.     w.writeCentered(2, "No force field projector defined, connect one and reboot!")
  181.   else
  182.     w.setColorNormal()
  183.     local indexFirstLine, indexSelected = ffield_projector_getIndexes()
  184.     w.writeCentered(2, "Monitored Core " .. indexSelected .. " of " .. #ffield_projectors .. " is selected")
  185.     local indexLastLine = math.min(indexFirstLine + ffield_projector_lines, #ffield_projectors)
  186.     for indexCurrent = indexFirstLine, indexLastLine do
  187.       if indexCurrent == indexSelected then
  188.         w.setColorSelected()
  189.         w.clearLine()
  190.         w.write(">")
  191.       else
  192.         w.setColorNormal()
  193.         w.write(" ")
  194.       end
  195.       local projector = ffield_projector_get(indexCurrent)
  196.       local description = ffield_projector_getDescription(projector)
  197.       w.write(description)
  198.       w.writeLn("")
  199.     end
  200.   end
  201.  
  202.   w.setCursorPos(1, 16)
  203.   w.setColorNormal()
  204.   w.write("  -----------------------------------------------")
  205.  
  206.   w.setCursorPos(1, 17)
  207.   w.setColorControl()
  208. end
  209.  
  210. function ffield_register()
  211.   w.device_register("warpdriveShipController",
  212.       function(deviceType, address, wrap) table.insert(ffield_projectorAddresses, address) end,
  213.       function() end)
  214. end
  215.  
  216. ----------- connections status
  217.  
  218. function connections_page(isBooting)
  219.   w.page_begin(w.data_getName() .. " - Connections")
  220.  
  221.   w.writeLn("")
  222.  
  223.   local monitors = w.device_getMonitors()
  224.   if #monitors == 0 then
  225.     w.setColorDisabled()
  226.     w.writeLn("No Monitor detected")
  227.   elseif #monitors == 1 then
  228.     w.setColorSuccess()
  229.     w.writeLn("1 monitor detected")
  230.   else
  231.     w.setColorSuccess()
  232.     w.writeLn(#monitors .. " Monitors detected")
  233.   end
  234.  
  235.   if #ffield_projectorAddresses == 0 then
  236.     w.setColorDisabled()
  237.     w.writeLn("No Ship Controllers Detected.")
  238.   elseif #ffield_projectorAddresses == 1 then
  239.     w.setColorSuccess()
  240.     w.writeLn("1 Ship Controller Detected.")
  241.   else
  242.     w.setColorSuccess()
  243.     w.writeLn(#ffield_projectorAddresses .. " Ship Controllers Detected.")
  244.   end
  245.  
  246.   if isBooting then
  247.     ffield_boot()
  248.   end
  249.  
  250.   w.writeLn("")
  251.   w.setColorNormal()
  252.   w.writeLn("This is a keyboard controlled user interface.")
  253.   w.write("Key controls are written like so: ")
  254.   w.setColorControl()
  255.   w.write("Action (key)")
  256.   w.setColorNormal()
  257.   w.writeLn(".")
  258.   w.write("For example, typing ")
  259.   w.setColorControl()
  260.   w.write(" 1 ")
  261.   w.setColorNormal()
  262.   w.writeLn(" will open Cores.")
  263. end
  264.  
  265. ----------- Boot sequence
  266.  
  267. w.page_setEndText(" Home (0), Cores (1), Notifications (2)")
  268. w.page_register('0', connections_page, nil)
  269. w.page_register('1', ffield_projector_page, ffield_projector_key)
  270. w.page_register('2', ffield_relay_page, ffield_relay_key)
  271. ffield_register()
  272.  
  273. w.boot()
  274. w.run()
  275. w.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement