jille_Jr

CC: Goto API

Nov 2nd, 2016
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- goto.lua
  2.  
  3. --(( Variables ))--
  4.  
  5. x,y,z = 0,0,0
  6. dir = 0
  7. local init = false
  8.  
  9. --(( Methods ))--
  10.  
  11. function up()
  12.   while not turtle.up() do
  13.     if not turtle.attackUp() then
  14.       print("ERROR: Failed to move up!")
  15.       return false
  16.     end
  17.     sleep(1)
  18.   end
  19.   y = y + 1
  20.   return true
  21. end
  22.  
  23. function down()
  24.   while not turlte.down() do
  25.     if not turtle.attackDown() then
  26.       print("ERROR: Failed to move down!")
  27.       return false
  28.     end
  29.     sleep(1)
  30.   end
  31.   y = y - 1
  32.   return true
  33. end
  34.  
  35. function forward()
  36.   while not turtle.forward() do
  37.     if not turtle.attack() then
  38.       print("ERROR: Failed to go forwards!")
  39.       return false
  40.     end
  41.     sleep(1)
  42.   end
  43.   if dir == 0 then z = z + 1
  44.   elseif dir == 1 then x = x - 1
  45.   elseif dir == 2 then z = z - 1
  46.   elseif dir == 3 then x = x + 1 end
  47.   return true
  48. end
  49.  
  50. function right()
  51.   turtle.turnRight()
  52.   dir = dir + 1
  53.   if dir == 4 then dir = 0 end
  54. end
  55.  
  56. function left()
  57.   turtle.turnLeft()
  58.   dir = dir - 1
  59.   if dir == -1 then dir = 3 end
  60. end
  61.  
  62. local function deltaDir(a,b)
  63.   local delta = b - a
  64.   if delta == 3 then return -1 end
  65.   if delta == -3 then return 1 end
  66.   return delta
  67. end
  68.  
  69. function turn(towards)
  70.   local delta = deltaDir(dir,towards)
  71.   for x = 1,delta,1 do right() end
  72.   for x = -1,delta,-1 do left() end
  73. end
  74.  
  75. local function whereAmI()
  76.   rednet.open("right")
  77.   -- find start pos
  78.   local nx,_,nz = gps.locate(.5)
  79.   if not nx then error("ERROR: Failed to get my location!",0) end
  80.  
  81.   for count = 1,4 do
  82.     if forward() then break
  83.     else right() end
  84.     if count == 4 then error("ERROR: Failed to get my direction!",0) end
  85.   end
  86.  
  87.   x,y,z = gps.locate(.5)
  88.   if not x then error("ERROR: Failed to get my location!",0) end
  89.  
  90.   if nx < x then dir = 3
  91.   elseif nx > x then dir = 1
  92.   elseif nz < z then dir = 0
  93.   elseif nz > z then dir = 2
  94.   else
  95.     error("ERROR: Invalid direction!",0)
  96.   end
  97.  
  98.   rednet.close("right")
  99.   init = true
  100. end
  101.  
  102. function goto(nx,ny,nz)
  103.   if not init then whereAmI() end
  104.  
  105.   while x~=nx or y~=ny or z~=nz do
  106.     print("Heading to x"..nx.." y"..ny.." z"..nz.."!")
  107.    
  108.     -- X axis
  109.     if nx > x then turn(3) end
  110.     if nx < x then turn(1) end
  111.     repeat until nx == x or not forward()
  112.    
  113.     -- Z axis
  114.     if nz > z then turn(0) end
  115.     if nz < z then turn(2) end
  116.     repeat until nz == z or not forward()
  117.    
  118.     -- Up
  119.     while ny > y do up() end
  120.    
  121.     -- Down
  122.     while ny < y do down() end
  123.   end
  124. end
  125.  
  126. -- EOF
Add Comment
Please, Sign In to add comment