Advertisement
Guest User

test

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