Don't like ads? PRO users don't see any ads ;-)
Guest

gps

By: a guest on Aug 19th, 2012  |  syntax: Lua  |  size: 1.98 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2. local function printUsage()
  3.         print( "Usages:" )
  4.         print( "gps host" )
  5.         print( "gps host <x> <y> <z>" )
  6.         print( "gps locate" )
  7. end
  8.  
  9. local tArgs = { ... }
  10. if #tArgs < 1 then
  11.         printUsage()
  12.         return
  13. end
  14.  
  15. local function readNumber()
  16.         local num = nil
  17.         while num == nil do
  18.                 num = tonumber(read())
  19.                 if not num then
  20.                         write( "Not a number. Try again: " )
  21.                 end
  22.         end
  23.         return math.floor( num + 0.5 )
  24. end
  25.  
  26. local function open()
  27.         local bOpen, sFreeSide = false, nil
  28.         for n,sSide in pairs(rs.getSides()) do 
  29.                 if peripheral.getType( sSide ) == "modem" then
  30.                         sFreeSide = sSide
  31.                         if rednet.isOpen( sSide ) then
  32.                                 bOpen = true
  33.                                 break
  34.                         end
  35.                 end
  36.         end
  37.        
  38.         if not bOpen then
  39.                 if sFreeSide then
  40.                         print( "No modem active. Opening "..sFreeSide.." modem" )
  41.                         rednet.open( sFreeSide )
  42.                         return true
  43.                 else
  44.                         print( "No modem attached" )
  45.                         return false
  46.                 end
  47.         end
  48.         return true
  49. end
  50.        
  51. local sCommand = tArgs[1]
  52. if sCommand == "locate" then
  53.         if open() then
  54.                 gps.locate( 2, true )
  55.         end
  56.        
  57. elseif sCommand == "host" then
  58.         if turtle then
  59.                 print( "Turtles cannot act as GPS hosts." )
  60.                 return
  61.         end
  62.  
  63.         if open() then
  64.                 local x,y,z
  65.                 if #tArgs >= 4 then
  66.                         x = tonumber(tArgs[2])
  67.                         y = tonumber(tArgs[3])
  68.                         z = tonumber(tArgs[4])
  69.                         if x == nil or y == nil or z == nil then
  70.                                 printUsage()
  71.                                 return
  72.                         end
  73.                         print( "Position is "..x..","..y..","..z )
  74.                 else
  75.                         x,y,z = gps.locate( 2, true )
  76.                         if x == nil then
  77.                                 print( "Run \"gps host <x> <y> <z>\" to set position manually" )
  78.                                 return
  79.                         end
  80.                 end
  81.        
  82.                 print( "Serving GPS requests" )
  83.        
  84.                 local nServed = 0
  85.                 while true do
  86.                         sender,message,distance = rednet.receive()
  87.                         if message == "PING" then
  88.                                 rednet.send(sender, textutils.serialize({x,y,z}))
  89.                                
  90.                                 nServed = nServed + 1
  91.                                 if nServed > 1 then
  92.                                         local x,y = term.getCursorPos()
  93.                                         term.setCursorPos(1,y-1)
  94.                                 end
  95.                                 print( nServed.." GPS Requests served" )
  96.                         end
  97.                 end
  98.         end
  99.        
  100. else
  101.         printUsage()
  102.         return
  103. end