Difference between revisions of "Gps (program)"
From ComputerCraft Wiki
(Hi) |
m (Moved to programs category) |
||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| − | + | '''gps''' is a stock program designed to make use of the ''positioning capabilities'' introduced in ComputerCraft 1.31. | |
| − | + | ||
| + | == Usage == | ||
| + | |||
| + | |||
| + | {| border="1" cellpadding="2" cellspacing="0" | ||
| + | !style="background:#EEE" width="200px"|Method name | ||
| + | !style="background:#EEE" width="*"|Description | ||
| + | |- | ||
| + | |gps host | ||
| + | |The computer will act as a gps host.<br /> | ||
| + | The computer's own location is retrieved using the gps. | ||
| + | |- | ||
| + | |gps host <x> <y> <z> | ||
| + | |The computer will act as a gps host.<br /> | ||
| + | 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.<br /> | ||
| + | |} | ||
| + | |||
| + | |||
| + | == Source code == | ||
| + | <nowiki> | ||
| + | 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 | ||
| + | </nowiki> | ||
| + | [[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