Advertisement
kwinto93

radar

Aug 19th, 2013
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.76 KB | None | 0 0
  1.  --[[Stworzone przez kwinto93
  2.     Created by kwinto93
  3.     http://www.youtube.com/user/kwinto93
  4. --]]
  5.  
  6. os.loadAPI("ocs/apis/sensor") -- ładujemy API, bardzo istotna linijka
  7.  
  8. local ArgStartowe = {...}
  9.  
  10. local stronaRadar = ArgStartowe[1] -- strona do której podłączony jest radar
  11. local stronaMonitor = ArgStartowe[2] -- strona do której podłączony jest monitor
  12.  
  13. local przyblizenie = 1 -- ustawia skale mapy
  14. local glebokosc = 5 -- ustawia glebokosc skanowania
  15.  
  16. local monitor = peripheral.wrap(stronaMonitor)
  17. local radar = sensor.wrap(stronaRadar) -- podłącza sensor http://computercraft.info/wiki/OpenCCSensors
  18.  
  19. local obrot = 1 -- standardowa pozycja
  20.  
  21. function wyswietlCel(cel)
  22.     term.redirect(monitor) -- przekierowuje wszystko do monitora
  23.  
  24.     local przesX, przesZ = cel.Position.X, cel.Position.Z -- każdy cel ma właściwość .Position (pozycja), która ma właściwości: .X, .Y i .Z, które zawierają aktualną pozycję celu, względem frontu radaru;
  25.                                                         -- UWAGA!! zmienna Y pokazuje wysokość bezwzględną celu, a nie względem radaru!!
  26.    
  27.     local szerokosc, wysokosc = monitor.getSize() -- pobiera wymiary monitora
  28.    
  29.     local x = (szerokosc / 2) + 1 -- obliczam środek ekranu
  30.     local y = wysokosc / 2
  31.    
  32.     -- obliczam wspolrzedne celu względem środka ekranu i go wyświetlam
  33.     local celX
  34.     local celY
  35.    
  36.     -- sprawdzam obrót ekranu
  37.     if obrot == 1 then
  38.         celX = x + przesX
  39.         celY = y + przesZ
  40.     elseif obrot == 2 then
  41.         celX = x + (-przesZ)
  42.         celY = y + przesX
  43.     elseif obrot == 3 then
  44.         celX = x + (-przesX)
  45.         celY = y + (-przesZ)
  46.     elseif obrot == 4 then
  47.         celX = x + przesX
  48.         celY = y + (-przesZ)
  49.     else
  50.         celX = x + przesX
  51.         celY = y + przesZ
  52.     end
  53.    
  54.     if (cel.Position.Y <= glebokosc) and (cel.Position.Y >= (-glebokosc)) then
  55.         if cel.Name == "Player" then
  56.             paintutils.drawPixel(celX, celY, colors.white) -- drukuje mały kwadracik jeśli zawiera się w ustalonej przestrzeni skanowania
  57.         else
  58.             paintutils.drawPixel(celX, celY, colors.red)
  59.         end
  60.     end
  61.    
  62.     term.restore() -- przywracam kontrolę konsoli
  63. end
  64.  
  65. function wyswietlRadar()
  66.     monitor.setTextScale(przyblizenie)
  67.     monitor.setBackgroundColor(colors.black)
  68.     monitor.clear() -- czyszcze ekran
  69.  
  70.     term.redirect(monitor)
  71.    
  72.     local szerokosc,wysokosc = monitor.getSize()
  73.    
  74.     local x = (szerokosc / 2) + 1
  75.     local y = wysokosc / 2
  76.    
  77.     paintutils.drawPixel(x, y, colors.yellow) -- drukuje środek radaru
  78.    
  79.     term.restore()
  80. end
  81.  
  82. -- pobiera dane z otoczenia i przetwarza je
  83. function wykrywaj()
  84.    
  85.     -- pętla nieskończona
  86.     while true do
  87.         wyswietlRadar()
  88.        
  89.         local cele = radar.getTargets() -- pobieramy cele https://github.com/Cloudhunter/OpenCCSensors/wiki/Proximity-sensor
  90.        
  91.         -- przeszukujemy tabele z informacjami o celu http://computercraft.info/wiki/OpenCCSensors (przykład na dole strony)
  92.         -- sekcja wyświetlania
  93.         for klucz, wartosc in pairs(cele) do
  94.             wyswietlCel(wartosc) -- wyswietla pozycje celu
  95.         end
  96.         sleep(0)
  97.     end
  98. end
  99.  
  100. -- wyswietla proste menu
  101. function menu()
  102.     local wyjdz = false
  103.    
  104.     -- pętla nieskończona
  105.     while wyjdz == false do
  106.         local zdarzenie = os.pullEvent()
  107.        
  108.         print([[
  109. Menu Radaru by kwinto93
  110.  
  111. [1] Wylacz radar
  112. [2] Zmien przyblizenie (1-5 raza)
  113. [3] Zmien zakres skanowania w pionie
  114. [4] Zmien obrot ekranu (1 do 4)
  115.  
  116. Wybor: ]])
  117.  
  118.         local wybor = io.read()
  119.        
  120.         -- sekcja kontroli wyboru
  121.         if wybor == "1" then wyjdz = true
  122.         elseif wybor == "2" then
  123.             print("Podaj skale mapy (1-5): ")
  124.             przyblizenie = tonumber(io.read())
  125.         elseif wybor == "3" then
  126.             print("Podaj zakres skanowania w pionie: ")
  127.             glebokosc = tonumber(io.read())
  128.         elseif wybor == "4" then
  129.             print("Podaj obrot ekranu (od 1 do 4): ")
  130.             obrot = tonumber(io.read())
  131.         end
  132.     end
  133. end
  134.  
  135. parallel.waitForAny(menu, wykrywaj) -- uruchamia główne wątki programu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement