THEJean_Kevin

stargate

Jul 24th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.65 KB | None | 0 0
  1. mon = peripheral.find("monitor")
  2. sg = peripheral.find("stargate")
  3. mon.setBackgroundColor(colors.black)
  4. mon.clear()
  5. maxEng = 50000
  6. dialling = {}
  7.  
  8.  
  9.  
  10.  
  11. function drawChevrons() --draws cheyvrons on the screen
  12.   x,y = mon.getSize()
  13.   chevX1 = x/3
  14.   chevX2 = x/3*2+1
  15.   chevY1 = y/3-2
  16.   chevY2 = y/3*2 +2
  17.   mon.setBackgroundColor(colors.black)
  18.   for yc = chevY1-2, chevY2-2 do
  19.     for xc = chevX1-2, chevX2-2 do
  20.       mon.setCursorPos(xc, yc)
  21.       mon.write(" ")
  22.     end
  23.   end
  24.   mon.setBackgroundColor(colors.lightGray)
  25.   for i = chevX1+2, chevX2-2 do
  26.     mon.setCursorPos(i,chevY1)
  27.     mon.write(" ")
  28.   end
  29.   for i = chevX1+2, chevX2-2 do
  30.     mon.setCursorPos(i,chevY2)
  31.     mon.write(" ")
  32.   end
  33.   for i = chevY1+2, chevY2-2 do
  34.     mon.setCursorPos(chevX1,i)
  35.     mon.write(" ")
  36.   end
  37.   for i = chevY1+2, chevY2-2 do
  38.     mon.setCursorPos(chevX2, i)
  39.     mon.write(" ")
  40.   end
  41.   chev1pos = {chevX1, chevY2 }
  42.   mon.setBackgroundColor(colors.gray)
  43.   mon.setTextColor(colors.black)
  44.   mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  45.   mon.write(" > ")
  46.   chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  47.   mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  48.   mon.write(" > ")
  49.   chev3pos = {chevX1, chevY1 }
  50.   mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  51.   mon.write(" > ")
  52.   chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  53.   mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  54.   mon.write(" V ")
  55.   chev5pos = {chevX2, chevY1 }
  56.   mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  57.   mon.write(" < ")
  58.   chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  59.   mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  60.   mon.write(" < ")
  61.   chev7pos = {chevX2, chevY2 }
  62.   mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  63.   mon.write(" < ")
  64.   chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  65.   mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  66.   mon.write("   ")
  67. --  chev9pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  68. --  mon.setCursorPos(math.floor(chev8pos[1]-1), chevY1 + ((chevY2 - chevY1) / 2))
  69. --  mon.write(" 9 ")
  70.   mon.setBackgroundColor(colors.black)
  71.   mon.setCursorPos(x/2 - 4, y/2 - 1)
  72.   mon.write("           ")
  73.   mon.setCursorPos(x/2-1, y/2+4)
  74.   mon.write("     ")
  75. end
  76.  
  77. function drawChev( chevInfo )
  78.   mon.setBackgroundColor(colors.gray)
  79.   x,y = mon.getSize()
  80.   chevX1 = x/3
  81.   chevX2 = x/3*2+1
  82.   chevY1 = y/3-2
  83.   chevY2 = y/3*2 +2
  84.   if chevInfo[1] == 1 then
  85.     chev1pos = {chevX1, chevY2 }
  86.     mon.setBackgroundColor(colors.gray)
  87.     mon.setCursorPos(math.floor(chev1pos[1]), math.floor(chev1pos[2])-1)
  88.     mon.write(" "..chevInfo[2].." ")
  89.   elseif chevInfo[1] == 2 then
  90.     chev2pos = {chevX1, chevY1 + ((chevY2 - chevY1) / 2) }
  91.     mon.setCursorPos(math.floor(chev2pos[1]-1), math.floor(chev2pos[2]))
  92.     mon.write(" "..chevInfo[2].." ")
  93.   elseif chevInfo[1] == 3 then
  94.     chev3pos = {chevX1, chevY1 }
  95.     mon.setCursorPos(math.floor(chev3pos[1]), math.floor(chev3pos[2]+1))
  96.     mon.write(" "..chevInfo[2].." ")
  97.   elseif chevInfo[1] == 4 then
  98.     chev4pos = {chevX1 + ((chevX2 - chevX1) / 2), chevY1 }
  99.     mon.setCursorPos(math.floor(chev4pos[1]-1), math.floor(chev4pos[2]))
  100.     mon.write(" "..chevInfo[2].." ")
  101.   elseif chevInfo[1] == 5 then
  102.     chev5pos = {chevX2, chevY1 }
  103.     mon.setCursorPos(math.floor(chev5pos[1]-2), math.floor(chev5pos[2])+1)
  104.     mon.write(" "..chevInfo[2].." ")
  105.   elseif chevInfo[1] == 6 then
  106.     chev6pos = {chevX2, chevY1 + ((chevY2 - chevY1) / 2) }
  107.     mon.setCursorPos(math.floor(chev6pos[1]-1), math.floor(chev6pos[2]))
  108.     mon.write(" "..chevInfo[2].." ")
  109.   elseif chevInfo[1] == 7 then
  110.     chev7pos = {chevX2, chevY2 }
  111.     mon.setCursorPos(math.floor(chev7pos[1]-2), math.floor(chev7pos[2]-1))
  112.     mon.write(" "..chevInfo[2].." ")
  113.   elseif chevInfo[1] == 8 then
  114.     chevsave8 = chevInfo[2]
  115.   elseif chevInfo[1] == 9 then
  116.     chev8pos = {chevX1 + ((chevX2 - chevX1) /2), chevY2 }
  117.     mon.setCursorPos(math.floor(chev8pos[1]-1), math.floor(chev8pos[2]))
  118.     mon.write(""..chevsave8.." "..chevInfo[2])
  119.   mon.setBackgroundColor(colors.black)
  120. end
  121.  
  122. end
  123.  
  124. function drawSgStatus(status) -- draws stargate status
  125.   if status ~= "Idle" then
  126.   term.setCursorPos(1,2)
  127.   write(status) --needed for sting length because sting.len() won't work with stargateStatus()
  128.   xc, yc = term.getCursorPos()
  129.   term.clear()
  130.   term.setCursorPos(1,2)
  131.   write("> ")
  132.   if xc%2 == 1 then
  133.     xc = xc+1
  134.     even = true
  135.   else
  136.     even = false
  137.   end
  138.   mon.setBackgroundColor(colors.black)
  139.   if status == "Connected" then
  140.     mon.setTextColor(colors.lightBlue)
  141.   elseif status == "Dialling" then
  142.     mon.setTextColor(colors.orange)
  143.   else
  144.     mon.setTextColor(colors.green)
  145.   end
  146.   x,y = mon.getSize()
  147.   mon.setCursorPos((x/2+1) - 6, y/2+2)
  148.   mon.write("          ")
  149.   mon.setCursorPos((x/2+1) - (xc/2-1), y/2+2)
  150.   mon.write(status)
  151.   if even == true then
  152.     mon.write(".")
  153.   end
  154.   end
  155. end
  156.  
  157.  
  158. function drawLocalAddress() -- draws the address stargate being controlled
  159.   x,y = mon.getSize()
  160.   mon.setBackgroundColor(colors.black)
  161.   mon.setTextColor(colors.lightGray)
  162.   mon.setCursorPos(x/2-7, 1)
  163.   mon.write("Stargate Address:")
  164.  
  165. end
  166.  
  167. function drawDial() -- draws the button to access the dialing menu
  168.   x,y = mon.getSize()
  169.   state, int = sg.stargateState()
  170.   for yc = y-3, y-1 do
  171.     for xc = x/2-15, x/2 do
  172.       if state == "Idle" then
  173.         mon.setBackgroundColor(colors.lightGray)
  174.       else
  175.         mon.setBackgroundColor(colors.gray)
  176.       end
  177.       mon.setCursorPos(xc,yc)
  178.       mon.write(" ")
  179.     end
  180.   end
  181.   mon.setCursorPos(x/2-7, y-2)
  182.   mon.setTextColor(colors.black)
  183.   mon.write("List")
  184. end
  185.  
  186. function drawTerm() -- draws the button to terminate the stargate connection to another gate
  187.   x,y = mon.getSize()
  188.   state, int = sg.stargateState()
  189.   for yc = y-3, y-1 do
  190.     for xc = x/2+2, x/2+15 do
  191.       if state == "Connected" or state == "Connecting" or state == "Dialling" then
  192.         mon.setBackgroundColor(colors.lightGray)
  193.       else
  194.         mon.setBackgroundColor(colors.gray)
  195.       end
  196.       mon.setCursorPos(xc,yc)
  197.       mon.write(" ")
  198.     end
  199.   end
  200.   mon.setCursorPos(x/2+3, y-2)
  201.   mon.setTextColor(colors.black)
  202.   mon.write("Eteindre")
  203. end
  204.  
  205.  
  206. function drawHome() -- draws the home screen
  207.   mon.setBackgroundColor(colors.black)
  208.   x,y = mon.getSize()
  209.   mon.clear()
  210.   mon.setCursorPos(1,y)
  211.   mon.setTextColor(colors.gray)
  212.   mon.setBackgroundColor(colors.black)
  213.    
  214.   drawChevrons()
  215.   status, int = sg.stargateState()
  216.   drawSgStatus(tostring(status))
  217.  
  218.  
  219.   drawLocalAddress()
  220.  
  221.   drawDial()
  222.   mon.setCursorBlink(false)
  223.   drawTerm()
  224. end
  225.  
  226. function drawBookmarksPage()
  227.   mon.setBackgroundColor(colors.black)
  228.   mon.clear()
  229.   mon.setTextColor(colors.black)
  230.   x,y = mon.getSize()
  231.   for yc = 1,y-3 do
  232.     if yc%2 == 1 then
  233.       mon.setBackgroundColor(colors.lightBlue)
  234.     else
  235.       mon.setBackgroundColor(colors.lightGray)
  236.     end
  237.     for xc = 1,x do
  238.       mon.setCursorPos(xc, yc)
  239.       mon.write(" ")
  240.     end
  241.   end
  242.   for i= 1,y do
  243.     if i%2 == 1 then
  244.       mon.setBackgroundColor(colors.lightBlue)
  245.     else
  246.       mon.setBackgroundColor(colors.lightGray)
  247.     end
  248.     if fs.exists(tostring(i)) then
  249.       file = fs.open(tostring(i),"r")
  250.       bookmark = textutils.unserialize(file.readAll())
  251.       file.close()
  252.       mon.setCursorPos(1,i)
  253.       for k,v in pairs(bookmark) do
  254.         if k == "name" then
  255.           mon.write(v)
  256.           mon.setCursorPos(x/2, i)
  257.           mon.write(bookmark.address)
  258.           mon.setCursorPos(x,i)
  259.         end
  260.       end
  261.     end
  262.   end
  263.   mon.setCursorPos(x/2, y-1)
  264.   mon.setBackgroundColor(colors.black)
  265.   mon.setTextColor(colors.white)
  266.   mon.write("BACK")
  267. end
  268.  
  269.  
  270. function inputPage(type)
  271.   mon.clear()
  272.   term.redirect(mon)
  273.   term.setBackgroundColor(colors.lightGray)
  274.   term.clear()
  275.   x,y = term.getSize()
  276.   term.setCursorPos(x/2-8, y/2-2)
  277.   print("Set an address name")
  278.   term.setCursorPos(x/2 - 4, y/2)
  279.   print("         ")
  280.   term.setCursorPos(x/2 - 4, y/2)
  281.   nameInput = read()
  282.   addressInput = "nil"
  283.   term.setBackgroundColor(colors.lightGray)
  284.   term.clear()
  285.   term.setCursorPos(x/2-9, y/2-4)
  286.   print("Enter Stargate address")
  287.   if type == "secEntry" then
  288.     term.setCursorPos(x/2-10, y/2-2)
  289.     print("DO NOT ENTER ANY HYPHONS")
  290.   end
  291.   term.setBackgroundColor(colors.black)
  292.   term.setCursorPos(x/2 - 5, y/2)
  293.   print("           ")
  294.   term.setCursorPos(x/2 - 5, y/2)
  295.   addressInput = string.upper(read())
  296.   newGate ={name = nameInput, address = addressInput}
  297.   term.redirect(term.native())
  298.   return newGate
  299. end
  300.  
  301. function drawRemoteAddress(name)
  302.   mon.setBackgroundColor(colors.black)
  303.   mon.setTextColor(colors.blue)
  304.   x,y = mon.getSize()
  305.   mon.setCursorPos((x/2+1) - string.len(name)/2, y/2-2)
  306.   mon.write(name)
  307. end
  308.  
  309.  
  310.  
  311.  
  312. if fs.exists("currentSec") then -- checks to see if there's list of gates stored for security reasons
  313.   file = fs.open("currentSec", "r")
  314.   currentSec = file.readAll()
  315.   file.close()
  316. else
  317.   currentSec = "NONE"
  318. end
  319. mon.setTextScale(1)
  320. drawHome()
  321. while true do
  322.   event, param1, param2, param3 = os.pullEvent()
  323.   if event == "monitor_touch" then
  324.     x,y = mon.getSize()
  325.     if param2 > x/2-15 and param2 <= x/2 and param3 >= y-3 and param3 <= y-1 then -- Click has opened dial menu
  326.       status, int = sg.stargateState()
  327.         if status == "Idle" then
  328.             while true do
  329.                 drawBookmarksPage()
  330.                 event, param1, param2, param3 = os.pullEvent()
  331.                 if event == "monitor_touch" then
  332.                     if param3 >= y-2 then -- user clicked back
  333.                         drawHome()
  334.                         break
  335.                        
  336.                        
  337.                     else -- user has clicked on a bookmark
  338.                         if fs.exists(tostring(param3)) then
  339.                           file = fs.open(tostring(param3), "r")
  340.                           gateData = textutils.unserialize(file.readAll()) -- GATE DATA VARIABLE!!!
  341.                           file.close()
  342.                           drawHome()
  343.                           for k,v in pairs(gateData) do
  344.                             if k == "address" then
  345.                               ok, result = pcall(sg.dial, v)
  346.                               if ok then
  347.    
  348.                                     drawRemoteAddress(gateData.name)
  349.                                 status, int = sg.stargateState()
  350.                                 drawSgStatus(status)                               
  351.                               else
  352.                                 drawSgStatus("Error")      
  353.                               end
  354.                            
  355.                                
  356.                             end
  357.                            
  358.                           end
  359.                            
  360.                        
  361.                          
  362.                         break
  363.                         end
  364.                     end
  365.                 else
  366.                   drawHome()
  367.                   break
  368.                 end
  369.             end
  370.         end
  371.        
  372.      
  373.    
  374.     elseif param2 > x/2+2 and param2 <= x/2+15 and param3 >= y-3 and param3 <= y-1 then -- user clicked TERM
  375.       ok, result = pcall(sg.disconnect)
  376.       drawChevrons()
  377.       drawRemoteAddress(" ")
  378.     end
  379.    
  380.   elseif event == "sgDialIn" then
  381.     mon.setTextColor(colors.orange)
  382.    
  383.     if fs.exists("currentSec") then
  384.       file = fs.open("currentSec", "r")
  385.       currentSec = file.readAll()
  386.       file.close()
  387.     end
  388.     if fs.exists("secList") then
  389.       file = fs.open("secList", "r")
  390.       secList = textutils.unserialize(file.readAll())
  391.       for k,v in pairs(secList) do
  392.         address = v.address
  393.         if string.sub(v.address,1,7) == param2 or v.address == param2 then
  394.          
  395.           secGate = true
  396.         end
  397.       end
  398.     end
  399.    
  400.    
  401.    
  402.   elseif event == "sgStargateStateChange" or "sgChevronEngaged" then
  403.     drawDial()
  404.    
  405.     drawTerm()
  406.     status, int = sg.stargateState()
  407.     drawSgStatus(tostring(status))
  408.     if status == "idle" then
  409.       isConnected = false
  410.     else
  411.       isConnected = true
  412.     end
  413.     if event == "sgChevronEngaged" then
  414.       mon.setTextColor(colors.orange)
  415.       drawChev({param2, param3})
  416.       if param2 == 1 then
  417.         dialling = {}
  418.       end
  419.       table.insert(dialling, param2, param3)
  420.       --drawRemoteAddress()
  421.      
  422.     elseif param2 == "Idle" then
  423.      
  424.       drawChevrons()
  425.     elseif param2 == "Connected" then
  426.    
  427.       mon.setTextColor(colors.lightBlue)
  428.       for k,v in pairs(dialling) do
  429.         drawChev({k,v})
  430.       end
  431.       sg.sendMessage(sg.irisState())
  432.     end
  433.   end
  434.   end
Advertisement
Add Comment
Please, Sign In to add comment