Neon1432

moving and returning

Nov 26th, 2020 (edited)
923
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. dofile("basics")
  2. dofile("ui")
  3.  
  4. local direction = 0
  5. local px = 0
  6. local py = 0
  7. local pz = 0
  8.  
  9. local pathCounter = 1
  10. local path = {}
  11.  
  12.  
  13. local function addToPath(action)
  14.     path[pathCounter] = action
  15.     pathCounter = pathCounter + 1
  16. end
  17.  
  18.  
  19. local function left()
  20.     turtle.turnLeft()
  21.  
  22.     if direction == 0 then
  23.         direction = 3
  24.     else
  25.         direction = direction - 1
  26.     end
  27.     addToPath("r")
  28. end
  29.  
  30.  
  31.  
  32. local function right()
  33.     turtle.turnRight()
  34.  
  35.     if direction == 3 then
  36.         direction = 0
  37.     else
  38.         direction = direction + 1
  39.     end
  40.     addToPath("l")
  41. end
  42.  
  43.  
  44.  
  45. local function turnto(desdir)
  46.     if direction == desdir then
  47.         return
  48.     end
  49.  
  50.     if desdir > direction then
  51.         if direction == 0 and desdir == 3 then
  52.             left()
  53.         else
  54.             while direction ~= desdir do
  55.                 right()
  56.             end
  57.         end
  58.     elseif desdir < direction then
  59.         if direction == 3 and desdir == 0 then
  60.             right()
  61.         else
  62.             while direction ~= desdir do
  63.                 left()
  64.             end
  65.         end
  66.     end
  67. end
  68.  
  69.  
  70.  
  71.  local function dig()
  72.     local returnvalue = false
  73.     while turtle.detect() do
  74.         if turtle.dig() then
  75.             returnvalue = true
  76.         end
  77.     end
  78.     return returnvalue
  79.  end
  80.  
  81.  
  82.  
  83.  local function digUp()
  84.     local returnvalue = false
  85.     while turtle.detectUp() do
  86.         if turtle.digUp() then
  87.             returnvalue = true
  88.         end
  89.     end
  90.     return returnvalue
  91.  end
  92.  
  93.  
  94.  
  95.  local function digDown()
  96.     if turtle.digDown() then
  97.         return true
  98.     end
  99.     return false
  100.  end
  101.  
  102.  
  103.  
  104. local function Fforward()
  105.     if not turtle.forward() then
  106.         print("something is obstructing the way")
  107.         sleep(1)
  108.         ui.clear()
  109.         Fforward()
  110.     end
  111. end
  112.  
  113. local function forward()
  114.     if turtle.getFuelLevel() == 0 then
  115.         print("Out of fuel! Give me coal")
  116.         ui.pressenter()
  117.         basics.refuelanywhere()
  118.     end
  119.     if not turtle.forward() then
  120.         ui.clear()
  121.         sleep(1)
  122.         Fforward()
  123.     end
  124.  
  125.     if direction == 0 then
  126.         px = px + 1
  127.     elseif direction == 1 then
  128.         pz = pz + 1
  129.     elseif direction == 2 then
  130.         px = px - 1
  131.     elseif direction == 3 then
  132.         pz = pz - 1
  133.     else
  134.         print("invalid direction = ")  
  135.     end
  136.     addToPath("b")
  137. end
  138.  
  139.  
  140.  
  141. local function Fback()
  142.     if not turtle.back() then
  143.         print("something is obstucting the way")
  144.         sleep(1)
  145.         ui.clear()
  146.         Fback()
  147.     end
  148. end
  149.  
  150. local function back()
  151.     if turtle.getFuelLevel() == 0 then
  152.         print("Out of fuel! Give me coal")
  153.         ui.pressenter()
  154.         basics.refuelanywhere()
  155.     end
  156.     if not turtle.back() then
  157.         ui.clear()
  158.         sleep(1)
  159.         Fback()
  160.     end
  161.  
  162.     if direction == 0 then
  163.         px = px - 1
  164.     elseif direction == 1 then
  165.         pz = pz - 1
  166.     elseif direction == 2 then
  167.         px = px + 1
  168.     elseif direction == 3 then
  169.         pz = pz + 1
  170.     else
  171.         print("invalid direction = ")  
  172.     end
  173.     addToPath("f")
  174. end
  175.  
  176.  
  177.  
  178. local function Fup()
  179.     if not turtle.up() then
  180.         print("something is obstucting the way")
  181.         sleep(1)
  182.         ui.clear()
  183.         Fup()  
  184.     end
  185. end
  186.  
  187. local function up()
  188.     if turtle.getFuelLevel() == 0 then
  189.         print("Out of fuel! Give me coal")
  190.         ui.pressenter()
  191.         basics.refuelanywhere()
  192.     end
  193.     if not turtle.up() then
  194.         ui.clear()
  195.         sleep(1)
  196.         Fup()  
  197.     end
  198.  
  199.     py = py + 1
  200.     addToPath("d")
  201. end
  202.  
  203.  
  204.  
  205. local function Fdown()
  206.     if not turtle.down() then
  207.         print("something is obstucting the way")
  208.         sleep(1)
  209.         ui.clear()
  210.         Fdown()
  211.     end
  212. end
  213.  
  214. local function down()
  215.     if turtle.getFuelLevel() == 0 then
  216.         print("Out of fuel! Give me coal")
  217.         ui.pressenter()
  218.         basics.refuelanywhere()
  219.     end
  220.     if not turtle.down() then
  221.         ui.clear()
  222.         sleep(1)
  223.         Fdown()
  224.     end
  225.  
  226.     py = py - 1
  227.     addToPath("u")
  228. end
  229.  
  230.  
  231.  
  232. local function returnX()
  233.     if px < 0 then
  234.         turnto(0)
  235.     else
  236.         turnto(2)
  237.     end
  238.  
  239.     while px ~= 0 do
  240.         forward()
  241.     end
  242. end
  243.  
  244.  
  245.  
  246. local function returnY()
  247.     while py ~= 0 do
  248.         if py < 0 then
  249.             up()
  250.         end
  251.         if py > 0 then
  252.             down()
  253.         end
  254.     end
  255. end
  256.  
  257.  
  258.  
  259. local function returnZ()
  260.     if pz < 0 then
  261.         turnto(1)
  262.     else
  263.         turnto(3)
  264.     end
  265.  
  266.     while pz ~= 0 do
  267.         forward()
  268.     end
  269. end
  270.  
  271.  
  272.  
  273. local function setStart()
  274.     px = 0
  275.     py = 0
  276.     pz = 0
  277.     direction = 0
  278.     path = {}
  279.     pathCounter = 1
  280. end
  281.  
  282.  
  283.  
  284.  local function normalReturn()
  285.     if px ~= 0 then
  286.         returnX()
  287.     end
  288.     if py ~= 0 then
  289.         returnY()
  290.     end
  291.     if pz ~= 0 then
  292.         returnZ()
  293.     end
  294.     turnto(0)
  295.     setStart()
  296.  end
  297.  
  298.  
  299.  
  300. local function sameWayReturn()
  301.     for I = (pathCounter -1), 1, -1 do
  302.         if path[I] == "l" then
  303.             left()
  304.         elseif path[I] == "r" then
  305.             right()
  306.         elseif path[I] == "b" then
  307.             back()
  308.         elseif path[I] == "f" then
  309.             forward()
  310.         elseif path[I] == "d" then
  311.             down()
  312.         elseif path[I] == "u" then
  313.             up()
  314.         else
  315.             print("Error returning the same way")
  316.             ui.pressenter()
  317.         end
  318.        
  319.         pathCounter = pathCounter - 1
  320.         path[I] = nil  
  321.     end
  322.     setStart()
  323. end
  324.  
  325.  
  326.  
  327. local function setStart()
  328.     px = 0
  329.     py = 0
  330.     pz = 0
  331.     direction = 0
  332.     path = {}
  333.     pathCounter = 1
  334. end
  335.  
  336.  
  337.  
  338. local xNegative = false
  339. local yNegative = false
  340. local zNegative = false
  341.  
  342. local function digUpOrDown()
  343.     if yNegative == true then
  344.         digDown()
  345.     else
  346.         turtle.digUp()
  347.     end
  348. end
  349.  
  350.  
  351.  
  352. local function xBeforeZ(x, z, digging)
  353.     local leftorright = false
  354.     if zNegative == true then
  355.         leftorright = true
  356.     end
  357.     if xNegative == true then
  358.         if zNegative == true then
  359.             leftorright = false
  360.         else
  361.             leftorright = true
  362.         end
  363.     end
  364.     local function UseFunction() end
  365.     if digging == true then
  366.         UseFunction = dig
  367.     end
  368.  
  369.     if xNegative == true then
  370.         left()
  371.         left()
  372.     end
  373.     for I = 1, z do
  374.         for C = 1, (x-1) do
  375.             UseFunction()
  376.             forward()
  377.         end
  378.         if leftorright == false and I ~= z then
  379.             right()
  380.             UseFunction()
  381.             forward()
  382.             right()
  383.             leftorright = true
  384.         elseif leftorright == true and I ~= z then
  385.             left()
  386.             UseFunction()
  387.             forward()
  388.             left()
  389.             leftorright = false
  390.         else
  391.             return
  392.         end
  393.     end
  394. end
  395.  
  396.  
  397.  
  398. local function zBeforeX(x, z, digging)
  399.     local leftorright = true
  400.     if xNegative == true then
  401.         leftorright = false
  402.     end
  403.     if zNegative == true then
  404.         if xNegative == true then
  405.             leftorright = true
  406.         else
  407.             leftorright = false
  408.         end
  409.     end
  410.     local function UseFunction() end
  411.     if digging == true then
  412.         UseFunction = dig
  413.     end
  414.     if zNegative == true then
  415.         left()
  416.     else
  417.         right()
  418.     end
  419.     for I = 1, x do
  420.         for C = 1, (z-1) do
  421.             UseFunction()
  422.             forward()
  423.         end
  424.         if leftorright == false and I ~= x then
  425.             right()
  426.             UseFunction()
  427.             forward()
  428.             right()
  429.             leftorright = true
  430.         elseif leftorright == true and I ~= x then
  431.             left()
  432.             UseFunction()
  433.             forward()
  434.             left()
  435.             leftorright = false
  436.         else
  437.             return
  438.         end
  439.     end
  440. end
  441.  
  442.  
  443. local function setNegatives(x, y, z)
  444.     if x < 0 then
  445.         x = math.abs(x)
  446.         xNegative = true
  447.     end
  448.     if y < 0 then
  449.         y = math.abs(y)
  450.         yNegative = true
  451.     end
  452.     if z < 0 then
  453.         z = math.abs(z)
  454.         zNegative = true
  455.     end
  456.     return x, y, z
  457. end
  458.  
  459.  
  460.  
  461. local function resetNegatives()
  462.     xNegative = false
  463.     yNegative = false
  464.     zNegative = false
  465. end
  466.  
  467.  
  468.  
  469. local function field(x, z, digging)
  470.     if digging == nil then
  471.         digging = false
  472.     end
  473.     if x < z then
  474.         zBeforeX(x, z, digging)
  475.     else
  476.         xBeforeZ(x, z, digging)
  477.     end
  478.     returnX()
  479.     returnZ()
  480.     turnto(0)
  481. end
  482.  
  483.  
  484.  
  485. local function block(x, y, z, digging)
  486.     setStart()
  487.     if x == nil or y == nil or z == nil or x == 0 or y == 0 or z == 0 then
  488.         ui.clear()
  489.         ui.printing("checkBlock(xAxis, yAxis, zAxis)", colors.red)
  490.         print("Waring: x and z axis are relative to turtles position and 0 is invalid")
  491.         ui.pressenter()
  492.         return
  493.     end
  494.  
  495.     x, y, z = setNegatives(x, y, z)
  496.  
  497.     if digging == nil then
  498.         digging = false
  499.     end
  500.  
  501.     local function UseFunction() end
  502.     if digging == true then
  503.         UseFunction = digUpOrDown
  504.     end
  505.     for I = 1, y do
  506.         field(x, z, digging)
  507.         if I ~= y then
  508.             UseFunction()
  509.             if yNegative == true then
  510.                 down()
  511.             else
  512.                 up()
  513.             end
  514.         end
  515.     end
  516.     resetNegatives()
  517. end
  518.  
  519.  
  520. local function excavate(x, y, z)
  521.     block(x, y, z, true)
  522. end
  523.  
  524.  
  525.  
  526. local function relativeTo(x,y,z)
  527.     if x == nil or y == nil or z == nil then
  528.         ui.printing("Enter x, y, z as parameters", colors.red)
  529.         ui.pressenter()
  530.         return false
  531.     end
  532.     if tonumber(x) == nil or tonumber(y) == nil or tonumber(z) == nil then
  533.         ui.printing("One of the parameters you entered isnt a number", colors.red)
  534.         ui.pressenter()
  535.         return false
  536.     end
  537.  
  538.     local FxNegative = false
  539.     if x < 0 then
  540.         x = math.abs(x)
  541.         FxNegative = true
  542.         left()
  543.         left()
  544.     end
  545.     for I = 1, x do
  546.         forward()
  547.     end
  548.  
  549.     if y < 0 then
  550.         y = math.abs(y)
  551.         for I = 1, y do
  552.             down()
  553.         end
  554.     else
  555.         for I = 1, y do
  556.             up()
  557.         end
  558.     end
  559.  
  560.     if z == 0 then return true end
  561.     if z < 0 then
  562.         if FxNegative == true then
  563.             z = math.abs(z)
  564.             right()
  565.         else
  566.             z = math.abs(z)
  567.             left()
  568.         end
  569.     else
  570.         if FxNegative == true then
  571.             left()
  572.         else
  573.             right()
  574.         end
  575.     end
  576.     for I = 1, z do
  577.         forward()
  578.     end
  579. end
  580.  
  581.  
  582.  
  583. local function globalTo(x,y,z)
  584.  
  585. end
  586.  
  587. returning = {sameWay = sameWayReturn, setStart = setStart, normalWay = normalReturn, Z = returnZ, Y = returnY, X = returnX}
  588. move = { turnto = turnto, up = up, down = down, left = left, right = right, forward = forward, back = back, relativeTo = relativeTo }
  589. check = { block = block }
  590. digging = { excavate = excavate, up = digUp, forward = dig, down = digDown }  
RAW Paste Data