Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[Stworzone przez kwinto93
- Created by kwinto93
- http://www.youtube.com/user/kwinto93
- --]]
- os.loadAPI("ocs/apis/sensor") -- ładujemy API, bardzo istotna linijka
- local ArgStartowe = {...}
- local stronaRadar = ArgStartowe[1] -- strona do której podłączony jest radar
- local stronaMonitor = ArgStartowe[2] -- strona do której podłączony jest monitor
- local przyblizenie = 1 -- ustawia skale mapy
- local glebokosc = 5 -- ustawia glebokosc skanowania
- local monitor = peripheral.wrap(stronaMonitor)
- local radar = sensor.wrap(stronaRadar) -- podłącza sensor http://computercraft.info/wiki/OpenCCSensors
- local obrot = 1 -- standardowa pozycja
- function wyswietlCel(cel)
- term.redirect(monitor) -- przekierowuje wszystko do monitora
- 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;
- -- UWAGA!! zmienna Y pokazuje wysokość bezwzględną celu, a nie względem radaru!!
- local szerokosc, wysokosc = monitor.getSize() -- pobiera wymiary monitora
- local x = (szerokosc / 2) + 1 -- obliczam środek ekranu
- local y = wysokosc / 2
- -- obliczam wspolrzedne celu względem środka ekranu i go wyświetlam
- local celX
- local celY
- -- sprawdzam obrót ekranu
- if obrot == 1 then
- celX = x + przesX
- celY = y + przesZ
- elseif obrot == 2 then
- celX = x + (-przesZ)
- celY = y + przesX
- elseif obrot == 3 then
- celX = x + (-przesX)
- celY = y + (-przesZ)
- elseif obrot == 4 then
- celX = x + przesX
- celY = y + (-przesZ)
- else
- celX = x + przesX
- celY = y + przesZ
- end
- if (cel.Position.Y <= glebokosc) and (cel.Position.Y >= (-glebokosc)) then
- if cel.Name == "Player" then
- paintutils.drawPixel(celX, celY, colors.white) -- drukuje mały kwadracik jeśli zawiera się w ustalonej przestrzeni skanowania
- else
- paintutils.drawPixel(celX, celY, colors.red)
- end
- end
- term.restore() -- przywracam kontrolę konsoli
- end
- function wyswietlRadar()
- monitor.setTextScale(przyblizenie)
- monitor.setBackgroundColor(colors.black)
- monitor.clear() -- czyszcze ekran
- term.redirect(monitor)
- local szerokosc,wysokosc = monitor.getSize()
- local x = (szerokosc / 2) + 1
- local y = wysokosc / 2
- paintutils.drawPixel(x, y, colors.yellow) -- drukuje środek radaru
- term.restore()
- end
- -- pobiera dane z otoczenia i przetwarza je
- function wykrywaj()
- -- pętla nieskończona
- while true do
- wyswietlRadar()
- local cele = radar.getTargets() -- pobieramy cele https://github.com/Cloudhunter/OpenCCSensors/wiki/Proximity-sensor
- -- przeszukujemy tabele z informacjami o celu http://computercraft.info/wiki/OpenCCSensors (przykład na dole strony)
- -- sekcja wyświetlania
- for klucz, wartosc in pairs(cele) do
- wyswietlCel(wartosc) -- wyswietla pozycje celu
- end
- sleep(0)
- end
- end
- -- wyswietla proste menu
- function menu()
- local wyjdz = false
- -- pętla nieskończona
- while wyjdz == false do
- local zdarzenie = os.pullEvent()
- print([[
- Menu Radaru by kwinto93
- [1] Wylacz radar
- [2] Zmien przyblizenie (1-5 raza)
- [3] Zmien zakres skanowania w pionie
- [4] Zmien obrot ekranu (1 do 4)
- Wybor: ]])
- local wybor = io.read()
- -- sekcja kontroli wyboru
- if wybor == "1" then wyjdz = true
- elseif wybor == "2" then
- print("Podaj skale mapy (1-5): ")
- przyblizenie = tonumber(io.read())
- elseif wybor == "3" then
- print("Podaj zakres skanowania w pionie: ")
- glebokosc = tonumber(io.read())
- elseif wybor == "4" then
- print("Podaj obrot ekranu (od 1 do 4): ")
- obrot = tonumber(io.read())
- end
- end
- end
- parallel.waitForAny(menu, wykrywaj) -- uruchamia główne wątki programu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement