Hydrotronics

GPI

Oct 9th, 2016
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. _G["gpi"] = {}
  2. North,South,West,East,Invalid = 0,1,2,3,-1
  3. gpi.direction = -1
  4. gpi.location = {0,0,0}
  5. function gpi.locate(x,y,z)
  6.   if x == nil then
  7.     x2, y2, z2 = gps.locate(5)
  8.     if x2 then
  9.       oldTForward()
  10.       local x3, y3, z3 = gps.locate(5)
  11.       if x3 then
  12.         if x3 ~= x2 then
  13.           if x3 > x2 then
  14.             gpi.direction = 3
  15.           else
  16.             gpi.direction = 2
  17.           end
  18.         else
  19.           if z3 ~= z2 then
  20.             if z3 > z2 then
  21.               gpi.direction = 1
  22.             else
  23.               gpi.direction = -1
  24.             end
  25.           else
  26.             gpi.direction = -1
  27.           end
  28.         end
  29.       end
  30.     end
  31.   elseif y == nil then
  32.     error("Error: 3 or 0 Coordinates required.")
  33.   end
  34.   turtle.back()
  35.   gpi.location[1] = x2
  36.   gpi.location[2] = y2
  37.   gpi.location[3] = z2
  38.   return x2, y2, z2, gpi.direction
  39. end
  40. oldTForward = turtle.forward
  41. gpi.locate()
  42. function gpi.forward()
  43.   if turtle.getFuelLevel() == "unlimited" or turtle.getFuelLevel <= 1 then
  44.   if gpi.direction > -1 and gpi.direction < 4 then
  45.   if oldTForward() then
  46.     if gpi.direction == 0 then
  47.       gpi.location[3] = gpi.location[3] - 1
  48.       oldTForward()
  49.     elseif gpi.direction == 1 then
  50.       gpi.location[3] = gpi.location[3] + 1
  51.       oldTForward()
  52.     elseif gpi.direction == 2 then
  53.       gpi.location[1] = gpi.location[1] - 1
  54.       oldTForward()
  55.     elseif gpi.direction == 3 then
  56.       gpi.location[1] = gpi.location[1] + 1
  57.       oldTForward()
  58.     end
  59.     return gpi.location[1], gpi.location[2], gpi.location[3]
  60.   else
  61.     return false
  62.   end
  63.   else
  64.     return false
  65.   end
  66.   else
  67.     return false
  68.   end
  69. end
  70. turtle.forward = gpi.forward
  71.  
  72. function gpi.restore()
  73.   turtle.forward = oldTForward
  74.   turtle.back = oldTBack
  75.   turtle.turnLeft = oldTLeft
  76.   turtle.turnRight = oldTRight
  77.   turtle.up = oldTUp
  78.   turtle.down = oldTDown
  79. end
  80.  
  81. oldTLeft = turtle.turnLeft
  82. function gpi.turnLeft()
  83.   if gpi.direction > -1 and gpi.direction < 4 then
  84.     if gpi.direction == 0 then
  85.       gpi.direction = 2
  86.       oldTLeft()
  87.     elseif gpi.direction == 1 then
  88.       gpi.direction = 3
  89.       oldTLeft()
  90.     elseif gpi.direction == 2 then
  91.       gpi.direction = 1
  92.       oldTLeft()
  93.     elseif gpi.direction == 3 then
  94.       gpi.direction = 0
  95.       oldTLeft()
  96.     end
  97.     return gpi.direction
  98.   else
  99.     return false
  100.   end
  101. end
  102. turtle.turnLeft = gpi.turnLeft
  103. oldTRight = turtle.turnRight()
  104. function gpi.turnRight()
  105.   if gpi.direction > -1 and gpi.direction < 4 then
  106.     if gpi.direction == 0 then
  107.       gpi.direction = 3
  108.       oldTRight()
  109.     elseif gpi.direction == 1 then
  110.       gpi.direction = 2
  111.       oldTRight()
  112.     elseif gpi.direction == 2 then
  113.       gpi.direction = 0
  114.       oldTRight()
  115.     elseif gpi.direciton == 3 then
  116.       gpi.direction = 1
  117.       oldTRight()
  118.     end
  119.     return gpi.direction
  120.   else
  121.     return false
  122.   end
  123. end
  124. turtle.turnRight = gpi.turnRight
  125. oldTBack = turtle.back
  126. function gpi.back()
  127.   if turtle.getFuelLevel() == "unlimited" or turtle.getFuelLevel() >= 1 then
  128.   if gpi.direction > -1 and gpi.direction < 4 then
  129.   if oldTBack() then
  130.     oldTBack()
  131.     if gpi.direction == 0 then
  132.       gpi.location[3] = gpi.location[3] + 1
  133.     elseif gpi.direction == 1 then
  134.       gpi.location[3] = gpi.location[3] - 1
  135.     elseif gpi.direction == 2 then
  136.       gpi.location[1] = gpi.location[1] + 1
  137.     elseif gpi.direction == 3 then
  138.       gpi.location[1] = gpi.location[1] - 1
  139.     end
  140.     return gpi.location[1], gpi.location[2], gpi.location[3]
  141.   else
  142.     return false
  143.   end
  144.   else
  145.     return false
  146.   end
  147.   else
  148.     return false
  149.   end
  150. end
  151. turtle.back = gpi.back
  152. oldTUp = turtle.up
  153. function gpi.up()
  154.   if turtle.getFuelLevel() == "unlimited" or turtle.getFuelLevel >= 1 then
  155.   if gpi.direction > -1 and gpi.direction < 4 then
  156.   if oldTUp() then
  157.     oldTUp()
  158.     gpi.location[2] = gpi.location[2] + 1
  159.     return gpi.location[1], gpi.location[2], gpi.location[3]
  160.   else
  161.     return false
  162.   end
  163.   else
  164.     return false
  165.   end
  166.   else
  167.     return false
  168.   end
  169. end
  170. turtle.up = gpi.up
  171. oldTDown = turtle.down
  172. function gpi.down()
  173.   if turtle.getFuelLevel() == "unlimited" or turtle.getFuelLevel >= 1 then
  174.   if gpi.direction > -1 and gpi.direction < 4 then
  175.   if oldTDown() then
  176.     oldTDown()
  177.     gpi.location[2] = gpi.location[2] - 1
  178.     return gpi.location[1], gpi.location[2], gpi.location[3]
  179.   else
  180.     return false
  181.   end
  182.   else
  183.     return false
  184.   end
  185.   else
  186.     return false
  187.   end
  188. end
  189. turtle.down = gpi.down
  190. function gpi.getDirection()
  191.   return gpi.direction
  192. end
  193. function gpi.setDirection(dire)
  194.   if not tonumber(dire) then
  195.     error("Error: Got "..type(dire)..". Number Or Compass Expected.")
  196.   end
  197.   if dire > -1 and dire < 4 then
  198.   if gpi.direction > -1 and gpi.direction < 4 then
  199.   while gpi.direction ~= dire do
  200.     gpi.turnLeft()
  201.   end
  202.   return direction
  203.   else
  204.     return false
  205.   end
  206.   else
  207.     return false
  208.   end
  209. end
Advertisement
Add Comment
Please, Sign In to add comment