Difference between revisions of "Gps (program)"
From ComputerCraft Wiki
m (Moved to programs category) |
|||
| (2 intermediate revisions by one other user not shown) | |||
| Line 22: | Line 22: | ||
| + | == Source code == | ||
<nowiki> | <nowiki> | ||
local function printUsage() | local function printUsage() | ||
| Line 126: | Line 127: | ||
end | end | ||
</nowiki> | </nowiki> | ||
| − | [[Category: | + | [[Category:Programs]] |
Latest revision as of 07:40, 26 March 2014
gps is a stock program designed to make use of the positioning capabilities introduced in ComputerCraft 1.31.
Usage
| Method name | Description |
|---|---|
| gps host | The computer will act as a gps host. The computer's own location is retrieved using the gps. |
| gps host <x> <y> <z> | The computer will act as a gps host. You manually provide the computer's own location (x, y and z). |
| gps locate | It will try to retrieve the computer or turtle own location. |
Source code
local function printUsage()
print( "Usages:" )
print( "gps host" )
print( "gps host <x> <y> <z>" )
print( "gps locate" )
end
local tArgs = { ... }
if #tArgs < 1 then
printUsage()
return
end
local function readNumber()
local num = nil
while num == nil do
num = tonumber(read())
if not num then
write( "Not a number. Try again: " )
end
end
return math.floor( num + 0.5 )
end
local function open()
local bOpen, sFreeSide = false, nil
for n,sSide in pairs(rs.getSides()) do
if peripheral.getType( sSide ) == "modem" then
sFreeSide = sSide
if rednet.isOpen( sSide ) then
bOpen = true
break
end
end
end
if not bOpen then
if sFreeSide then
print( "No modem active. Opening "..sFreeSide.." modem" )
rednet.open( sFreeSide )
return true
else
print( "No modem attached" )
return false
end
end
return true
end
local sCommand = tArgs[1]
if sCommand == "locate" then
if open() then
gps.locate( 2, true )
end
elseif sCommand == "host" then
if turtle then
print( "Turtles cannot act as GPS hosts." )
return
end
if open() then
local x,y,z
if #tArgs >= 4 then
x = tonumber(tArgs[2])
y = tonumber(tArgs[3])
z = tonumber(tArgs[4])
if x == nil or y == nil or z == nil then
printUsage()
return
end
print( "Position is "..x..","..y..","..z )
else
x,y,z = gps.locate( 2, true )
if x == nil then
print( "Run \"gps host <x> <y> <z>\" to set position manually" )
return
end
end
print( "Serving GPS requests" )
local nServed = 0
while true do
sender,message,distance = rednet.receive()
if message == "PING" then
rednet.send(sender, textutils.serialize({x,y,z}))
nServed = nServed + 1
if nServed > 1 then
local x,y = term.getCursorPos()
term.setCursorPos(1,y-1)
end
print( nServed.." GPS Requests served" )
end
end
end
else
printUsage()
return
end