Robear9992

navigation

Jul 2nd, 2022 (edited)
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.58 KB | None | 0 0
  1. --cc:Tweaked Turtle Navigation
  2. --pastebin get DBMuZyEc navigation.lua
  3. --nav = require("navigation")
  4. --
  5.  
  6.  
  7. local sides = require("sides")
  8. local coord = require("coord")
  9.  
  10.  
  11. local navOffset --Actual XYZ, not Minecraft (width,length,height)
  12. local navFacing = sides.front
  13.  
  14. local navigation = {}
  15.  
  16. function navigation.setHome()
  17.     navOffset = coord()
  18. end
  19. navigation.setHome()
  20.  
  21. function navigation.getPosition()
  22.     return navOffset.copy()
  23. end
  24.  
  25. function navigation.getDirection()
  26.     return navFacing
  27. end
  28.  
  29. function navigation.up()
  30.     while true do
  31.         local blocked,item = turtle.detectUp()
  32.        
  33.         if blocked then
  34.             turtle.digUp()
  35.         else
  36.             local moved, result = turtle.up()
  37.             if moved then
  38.                 navOffset.z = navOffset.z + 1
  39.                 return true
  40.             else
  41.                 turtle.digUp()
  42.             end
  43.         end
  44.     end
  45. end
  46.  
  47. function navigation.down()
  48.     while true do
  49.         local blocked,item = turtle.detectDown()
  50.        
  51.         if blocked then
  52.             turtle.digDown()
  53.         else
  54.             local moved, result = turtle.down()
  55.             if moved then
  56.                 navOffset.z = navOffset.z - 1
  57.                 return true
  58.             else
  59.                 turtle.digDown()
  60.             end
  61.         end
  62.     end
  63. end
  64.  
  65. function navigation.forward()
  66.     while true do
  67.         local blocked,item = turtle.detect()
  68.        
  69.         if blocked then
  70.             turtle.dig()
  71.         end
  72.         local moved, result = turtle.forward()
  73.         if moved then
  74.             if navFacing == sides.front then
  75.                 navOffset.y = navOffset.y + 1
  76.             elseif navFacing == sides.right then
  77.                 navOffset.x = navOffset.x + 1
  78.             elseif navFacing == sides.back then
  79.                 navOffset.y = navOffset.y - 1
  80.             elseif navFacing == sides.left then
  81.                 navOffset.x = navOffset.x - 1
  82.             end
  83.             return true
  84.         else
  85.             turtle.dig()
  86.         end
  87.     end
  88. end
  89.  
  90. function navigation.back() 
  91.     while not turtle.back() do end
  92.    
  93.     if navFacing == sides.front then
  94.         navOffset.y = navOffset.y - 1
  95.     elseif navFacing == sides.right then
  96.         navOffset.x = navOffset.x - 1
  97.     elseif navFacing == sides.back then
  98.         navOffset.y = navOffset.y + 1
  99.     elseif navFacing == sides.left then
  100.         navOffset.x = navOffset.x + 1
  101.     end
  102. end
  103.  
  104. function navigation.left()
  105.     turtle.turnLeft()
  106.    
  107.     if navFacing == sides.front then
  108.         navFacing = sides.left
  109.     elseif navFacing == sides.right then
  110.         navFacing = sides.front
  111.     elseif navFacing == sides.back then
  112.         navFacing = sides.right
  113.     elseif navFacing == sides.left then
  114.         navFacing = sides.back
  115.     end
  116. end
  117.  
  118. function navigation.right()
  119.     turtle.turnRight()
  120.    
  121.     if navFacing == sides.front then
  122.         navFacing = sides.right
  123.     elseif navFacing == sides.right then
  124.         navFacing = sides.back
  125.     elseif navFacing == sides.back then
  126.         navFacing = sides.left
  127.     elseif navFacing == sides.left then
  128.         navFacing = sides.front
  129.     end
  130. end
  131.  
  132. function navigation.turnTo(side)
  133.     if navFacing == sides.front then
  134.         if side == sides.front then
  135.         elseif side == sides.right then
  136.             navigation.right()
  137.         elseif side == sides.back then
  138.             navigation.right()
  139.             navigation.right()
  140.         elseif side == sides.left then
  141.             navigation.left()
  142.         end
  143.     elseif navFacing == sides.right then
  144.         if side == sides.front then
  145.             navigation.left()
  146.         elseif side == sides.right then
  147.         elseif side == sides.back then
  148.             navigation.right()
  149.         elseif side == sides.left then
  150.             navigation.right()
  151.             navigation.right()
  152.         end
  153.     elseif navFacing == sides.back then
  154.         if side == sides.front then
  155.             navigation.right()
  156.             navigation.right()
  157.         elseif side == sides.right then
  158.             navigation.left()
  159.         elseif side == sides.back then
  160.         elseif side == sides.left then
  161.             navigation.right()
  162.         end
  163.     elseif navFacing == sides.left then
  164.         if side == sides.front then
  165.             navigation.right()
  166.         elseif side == sides.right then
  167.             navigation.right()
  168.             navigation.right()
  169.         elseif side == sides.back then
  170.             navigation.left()
  171.         elseif side == sides.left then
  172.         end
  173.     end
  174.     navFacing = side
  175. end
  176.  
  177. function navigation.moveTo(position)
  178.     position = navOffset.union(position)
  179.     local delta = position.subtract(navOffset)
  180.    
  181.     if delta.z > 0 then
  182.         for i=1,delta.z do navigation.up() end
  183.     elseif delta.z < 0 then
  184.         for i=1,-delta.z do navigation.down() end
  185.     end
  186.  
  187.     if delta.x > 0 then
  188.         navigation.turnTo(sides.right)
  189.         for i=1,delta.x do navigation.forward() end
  190.     elseif delta.x < 0 then
  191.         navigation.turnTo(sides.left)
  192.         for i=1,-delta.x do navigation.forward() end
  193.     end
  194.    
  195.     if delta.y > 0 then
  196.         navigation.turnTo(sides.front)
  197.         for i=1,delta.y do navigation.forward() end
  198.     elseif delta.y <0 then
  199.         navigation.turnTo(sides.back)
  200.         for i=1,-delta.y do navigation.forward() end
  201.     end
  202. end
  203.  
  204.  
  205. function navigation.moveHome()
  206.     navigation.moveTo({y=0})
  207.     navigation.moveTo({x=0})
  208.     navigation.moveTo({z=0})
  209. end
  210.  
  211. return navigation
Add Comment
Please, Sign In to add comment