le_Fish

extraFuncs - v2

Aug 13th, 2019
630
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.69 KB | None | 0 0
  1. extraFuncs = {
  2.     pos = vector.new(0, 0, 0),
  3.     dir = "N",
  4.     gps = false
  5. }
  6.  
  7. function extraFuncs:new(pos, dir, gps)
  8.     setmetatable({}, extraFuncs)
  9.     self.pos = pos
  10.     self.dir = dir
  11.     self.gps = gps
  12.     return self
  13. end
  14.  
  15. function extraFuncs:forward()  
  16.     if turtle.forward() == true then
  17.         if self.dir == "N" then
  18.             self.pos.y = self.pos.y - 1
  19.         elseif self.dir == "S" then
  20.             self.pos.y = self.pos.y + 1
  21.         elseif self.dir == "E" then
  22.             self.pos.x = self.pos.x + 1
  23.         elseif self.dir == "W" then
  24.             self.pos.x = self.pos.x - 1
  25.         end
  26.         return true
  27.     else
  28.         return false
  29.     end
  30. end
  31.  
  32. function extraFuncs:back()
  33.     if turtle.back() == true then
  34.         if self.dir == "N" then
  35.             self.pos.y = self.pos.y + 1
  36.         elseif self.dir == "S" then
  37.             self.pos.y = self.pos.y - 1
  38.         elseif self.dir == "E" then
  39.             self.pos.x = self.pos.x - 1
  40.         elseif self.dir == "W" then
  41.             self.pos.x = self.pos.x + 1
  42.         end
  43.         return true
  44.     else
  45.         return false
  46.     end
  47. end
  48.  
  49. function extraFuncs:digForward()
  50.     repeat turtle.dig() until turtle.forward() == true
  51.     if self.dir == "N" then
  52.             self.pos.y = self.pos.y - 1
  53.         elseif self.dir == "S" then
  54.                 self.pos.y = self.pos.y + 1
  55.         elseif self.dir == "E" then
  56.                 self.pos.x = self.pos.x + 1
  57.         elseif self.dir == "W" then
  58.                 self.pos.x = self.pos.x - 1
  59.         end
  60.     return true
  61. end
  62.  
  63. function extraFuncs:up()
  64.     if turtle.up() == true then
  65.         self.pos.z = self.pos.z + 1
  66.         return true
  67.     else
  68.         return false
  69.     end
  70. end
  71.  
  72. function extraFuncs:digUp()
  73.     repeat turtle.digUp() until turtle.up() == true
  74.     self.pos.z = self.pos + 1
  75.     return true
  76. end
  77.  
  78. function extraFuncs:digDown()
  79.     repeat turtle.digDown() until turtle.down() == true
  80.     self.pos.z = self.pos.z - 1
  81.     return true
  82. end
  83.  
  84. function extraFuncs:down()
  85.     if turtle.down() == true then
  86.         self.pos.z = self.pos.z - 1
  87.         return true
  88.     else
  89.         return false
  90.     end
  91. end
  92.  
  93. function extraFuncs:left()
  94.     turtle.turnLeft()
  95.     if self.dir == "N" then
  96.         self.dir = "W"
  97.     elseif self.dir == "W" then
  98.         self.dir = "S"
  99.     elseif self.dir == "S" then
  100.         self.dir = "E"
  101.     elseif self.dir == "E" then
  102.         self.dir = "N"
  103.     end
  104.     return true
  105. end
  106.  
  107. function extraFuncs:right()
  108.     turtle.turnRight()
  109.     if self.dir == "N" then
  110.         self.dir = "E"
  111.     elseif self.dir == "E" then
  112.         self.dir = "S"
  113.     elseif self.dir == "S" then
  114.         self.dir = "W"
  115.     elseif self.dir == "W" then
  116.         self.dir = "N"
  117.     end
  118.     return true
  119. end
  120.  
  121. function extraFuncs:has_modem()
  122.     if peripheral.getType("right") == "modem" or peripheral.getType("left") ==
  123.         "modem" then
  124.         return true
  125.     else
  126.         return false
  127.     end
  128. end
  129.  
  130. function extraFuncs:get_gps()
  131.     if self:has_modem() and self.gps then
  132.         local this_new_position = vector.new(gps.locate(5))
  133.         if not this_new_position.x then
  134.             return "E:GPS failes"
  135.         else
  136.             self.pos = this_new_position:round()
  137.             return this_new_position:round()
  138.         end
  139.     else
  140.         return "E:No modem"
  141.     end
  142. end
  143.  
  144. function extraFuncs:get_dir()
  145.     if self:has_modem() and self.gps then
  146.         local first_scan = self:get_gps()
  147.         if not first_scan.x then
  148.             print(first_scan)
  149.         else
  150.             if turtle.forward() then
  151.                 local second_scan = self:get_gps()
  152.                 if second_scan.y ~= first_scan.y then
  153.                     if first_scan.y > second_scan.y then
  154.                         self.dir = "N"
  155.                     else
  156.                         self.dir = "S"
  157.                     end
  158.                 elseif second_scan.x ~= first_scan.x then
  159.                     if first_scan.x < second_scan.x then
  160.                         self.dir = "E"
  161.                     else
  162.                         self.dir = "W"
  163.                     end
  164.                 end
  165.                 turtle.back()
  166.             elseif turtle.back() then
  167.                 local second_scan = self:get_gps()
  168.                 if second_scan.y ~= first_scan.y then
  169.                     if first_scan.y > second_scan.y then
  170.                         self.dir = "S"
  171.                     else
  172.                         self.dir = "N"
  173.                     end
  174.                 elseif second_scan.x ~= first_scan.x then
  175.                     if first_scan.x < second_scan.x then
  176.                         self.dir = "W"
  177.                     else
  178.                         self.dir = "E"
  179.                     end
  180.                 end
  181.                 turtle.forward()
  182.             end
  183.         end
  184.             elseif not self.gps then
  185.         local first_scan = self.pos
  186.         if turtle.forward() then
  187.             local second_scan = self.pos
  188.             if second_scan.y ~= first_scan.y then
  189.                 if first_scan.y > second_scan.y then
  190.                     self.dir = "N"
  191.                 else
  192.                     self.dir = "S"
  193.                 end
  194.             elseif second_scan.x ~= first_scan.x then
  195.                 if first_scan.x < second_scan.x then
  196.                     self.dir = "E"
  197.                 else
  198.                     self.dir = "W"
  199.                 end
  200.             end
  201.             turtle.back()
  202.         elseif turtle.back() then
  203.             local second_scan = self.pos
  204.             if second_scan.y ~= first_scan.y then
  205.                 if first_scan.y > second_scan.y then
  206.                     self.dir = "S"
  207.                 else
  208.                     self.dir = "N"
  209.                 end
  210.             elseif second_scan.x ~= first_scan.x then
  211.                 if first_scan.x < second_scan.x then
  212.                     self.dir = "W"
  213.                 else
  214.                     self.dir = "E"
  215.                 end
  216.             end
  217.             turtle.forward()
  218.                 end
  219.                 self:get_gps()
  220.             else
  221.                 print("Error?")
  222.             end
  223. end
  224.  
  225. -- Read and save turtle position
  226. function extraFuncs:read_pos()
  227.     if not fs.exists("extraFuncs_turtlePosition") then
  228.             io.write("Couldn't find the extraFuncs_turtlePosition folder, make one? Y/N")
  229.             answer=io.read()
  230.             if answer:lower()=="y" then
  231.                 print("creating extraFuncs_turtlePosition file")
  232.                 local h = fs.open("extraFuncs_turtlePosition", "w")
  233.                 h.writeLine(self.pos.x)
  234.                 h.writeLine(self.pos.y)
  235.                 h.writeLine(self.pos.z)
  236.                 h.writeLine(self.dir)
  237.                 h.close()
  238.             elseif answer:lower()=="n" then
  239.                 error("Couldn't find the extraFuncs_turtlePosition folder")
  240.             end
  241.         else
  242.             local h = fs.open("extraFuncs_turtlePosition", "r")
  243.             self.pos.x = tonumber(h.readLine())
  244.             self.pos.y = tonumber(h.readLine())
  245.             self.pos.z = tonumber(h.readLine())
  246.             self.dir = h.readLine()
  247.             h.close()
  248.             return true
  249.         end
  250. end
  251.  
  252. function extraFuncs:save_pos()
  253.     if not fs.exists("extraFuncs_turtlePosition") then
  254.         io.write("Couldn't find the extraFuncs_turtlePosition folder, make one? Y/N")
  255.         answer=io.read()
  256.         if answer:lower()=="y" then
  257.             print("creating extraFuncs_turtlePosition file")
  258.             local h = fs.open("extraFuncs_turtlePosition", "w")
  259.             h.writeLine(self.pos.x)
  260.             h.writeLine(self.pos.y)
  261.             h.writeLine(self.pos.z)
  262.             h.writeLine(self.dir)
  263.             h.close()
  264.         elseif answer:lower()=="n" then
  265.             error("Couldn't find the extraFuncs_turtlePosition folder")
  266.         end
  267.     else
  268.         local h = fs.open("extraFuncs_turtlePosition", "w")
  269.         h.writeLine(self.pos.x)
  270.         h.writeLine(self.pos.y)
  271.         h.writeLine(self.pos.z)
  272.         h.writeLine(self.dir)
  273.         h.close()
  274.         return true
  275.     end
  276. end
Advertisement
Add Comment
Please, Sign In to add comment