Advertisement
kssr3951

beacon[receiver]

May 6th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.75 KB | None | 0 0
  1. -- =========================================================
  2. -- beacon[receiver]
  3. -- =========================================================
  4. -- ----------------------------------------------------
  5. -- Utilities
  6. -- ----------------------------------------------------
  7. function lFixText(text, length)
  8.     return string.sub(text .. string.rep(" ", length), 1, length)
  9. end
  10. function rFixText(text, length)
  11.     return string.sub(string.rep(" ", length) .. text, -length)
  12. end
  13. -- ----------------------------------------------------
  14. -- Config
  15. -- ----------------------------------------------------
  16. local PROTOCOL_NAME = "BEACON"
  17. local DISPLAY_INTERVAL = 1.5
  18. local MODEM_DIRECTION = "back"
  19. local LOST_COUNT = 5
  20. -- =========================================================
  21. -- beacon[receiver]
  22. -- =========================================================
  23. rednet.open(MODEM_DIRECTION)
  24. local timerId = os.startTimer(DISPLAY_INTERVAL)
  25. local dataTable = { }
  26. while true do
  27.     local rslt = { os.pullEvent() }
  28.     if "modem_message" == rslt[1] then
  29.         local event, side, frequency, replyFrequency, message, distance = rslt[1], rslt[2], rslt[3], rslt[4], rslt[5], rslt[6]
  30.         if rednet.CHANNEL_BROADCAST == frequency then
  31.             if nil ~= message and message.sProtocol == PROTOCOL_NAME then
  32.                 local dat = { }
  33.                 dat.id = replyFrequency
  34.                 dat.label = message.message
  35.                 dat.distance = distance
  36.                 dat.lostCount = LOST_COUNT
  37.                 if nil ~= dataTable[dat.id] then
  38.                     dat.previousDistance = dataTable[dat.id].distance
  39.                 else
  40.                     dat.previousDistance = -1
  41.                 end
  42.                 dataTable[dat.id] = dat
  43.             end
  44.         end
  45.     elseif "timer" == rslt[1] then
  46.         local event, tId = rslt[1], rslt[2]
  47.         if timerId == tId then
  48.             timerId = os.startTimer(DISPLAY_INTERVAL)
  49.             term.clear()
  50.             term.setCursorPos(1, 1)
  51.             local signalCount = 0
  52.             for key, dat in pairs(dataTable) do
  53.                 if 0 < dat.lostCount then
  54.                     local tDist
  55.                     if -1 == dat.distance then
  56.                         tDist = "-----"
  57.                     else
  58.                         local distVal = math.floor(dat.distance * 10) / 10
  59.                         if 0 == (distVal * 10) % 10 then
  60.                             tDist = rFixText(tostring(distVal) .. ".0", 5)
  61.                         else
  62.                             tDist = rFixText(tostring(distVal), 5)
  63.                         end
  64.                     end
  65.                     local noMove
  66.                     if math.floor(dat.previousDistance * 10) == math.floor(dat.distance * 10) then
  67.                         noMove = "?"
  68.                     else
  69.                         noMove = " "
  70.                     end
  71.                     local tId    = tostring(dat.id)
  72.                     local tLabel = lFixText(dat.label, 20)
  73.                     print(tDist .. noMove .. "[" .. tId .. "]" .. tLabel)
  74.                     if LOST_COUNT == dat.lostCount then
  75.                         signalCount = signalCount + 1
  76.                     end
  77.                 end
  78.                 dat.lostCount = dat.lostCount - 1
  79.                 dat.previousDistance = dat.distance
  80.                 dat.distance = -1
  81.             end
  82.             if 0 == signalCount then
  83.                 print("No signal")
  84.             end
  85.         end
  86.     end
  87. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement