Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extraFuncs = {
- pos = vector.new(0, 0, 0),
- dir = "N",
- gps = false
- }
- function extraFuncs:new(pos, dir, gps)
- setmetatable({}, extraFuncs)
- self.pos = pos
- self.dir = dir
- self.gps = gps
- return self
- end
- function extraFuncs:forward()
- if turtle.forward() == true then
- if self.dir == "N" then
- self.pos.y = self.pos.y - 1
- elseif self.dir == "S" then
- self.pos.y = self.pos.y + 1
- elseif self.dir == "E" then
- self.pos.x = self.pos.x + 1
- elseif self.dir == "W" then
- self.pos.x = self.pos.x - 1
- end
- return true
- else
- return false
- end
- end
- function extraFuncs:back()
- if turtle.back() == true then
- if self.dir == "N" then
- self.pos.y = self.pos.y + 1
- elseif self.dir == "S" then
- self.pos.y = self.pos.y - 1
- elseif self.dir == "E" then
- self.pos.x = self.pos.x - 1
- elseif self.dir == "W" then
- self.pos.x = self.pos.x + 1
- end
- return true
- else
- return false
- end
- end
- function extraFuncs:digForward()
- repeat turtle.dig() until turtle.forward() == true
- if self.dir == "N" then
- self.pos.y = self.pos.y - 1
- elseif self.dir == "S" then
- self.pos.y = self.pos.y + 1
- elseif self.dir == "E" then
- self.pos.x = self.pos.x + 1
- elseif self.dir == "W" then
- self.pos.x = self.pos.x - 1
- end
- return true
- end
- function extraFuncs:up()
- if turtle.up() == true then
- self.pos.z = self.pos.z + 1
- return true
- else
- return false
- end
- end
- function extraFuncs:digUp()
- repeat turtle.digUp() until turtle.up() == true
- self.pos.z = self.pos + 1
- return true
- end
- function extraFuncs:digDown()
- repeat turtle.digDown() until turtle.down() == true
- self.pos.z = self.pos.z - 1
- return true
- end
- function extraFuncs:down()
- if turtle.down() == true then
- self.pos.z = self.pos.z - 1
- return true
- else
- return false
- end
- end
- function extraFuncs:left()
- turtle.turnLeft()
- if self.dir == "N" then
- self.dir = "W"
- elseif self.dir == "W" then
- self.dir = "S"
- elseif self.dir == "S" then
- self.dir = "E"
- elseif self.dir == "E" then
- self.dir = "N"
- end
- return true
- end
- function extraFuncs:right()
- turtle.turnRight()
- if self.dir == "N" then
- self.dir = "E"
- elseif self.dir == "E" then
- self.dir = "S"
- elseif self.dir == "S" then
- self.dir = "W"
- elseif self.dir == "W" then
- self.dir = "N"
- end
- return true
- end
- function extraFuncs:has_modem()
- if peripheral.getType("right") == "modem" or peripheral.getType("left") ==
- "modem" then
- return true
- else
- return false
- end
- end
- function extraFuncs:get_gps()
- if self:has_modem() and self.gps then
- local this_new_position = vector.new(gps.locate(5))
- if not this_new_position.x then
- return "E:GPS failes"
- else
- self.pos = this_new_position:round()
- return this_new_position:round()
- end
- else
- return "E:No modem"
- end
- end
- function extraFuncs:get_dir()
- if self:has_modem() and self.gps then
- local first_scan = self:get_gps()
- if not first_scan.x then
- print(first_scan)
- else
- if turtle.forward() then
- local second_scan = self:get_gps()
- if second_scan.y ~= first_scan.y then
- if first_scan.y > second_scan.y then
- self.dir = "N"
- else
- self.dir = "S"
- end
- elseif second_scan.x ~= first_scan.x then
- if first_scan.x < second_scan.x then
- self.dir = "E"
- else
- self.dir = "W"
- end
- end
- turtle.back()
- elseif turtle.back() then
- local second_scan = self:get_gps()
- if second_scan.y ~= first_scan.y then
- if first_scan.y > second_scan.y then
- self.dir = "S"
- else
- self.dir = "N"
- end
- elseif second_scan.x ~= first_scan.x then
- if first_scan.x < second_scan.x then
- self.dir = "W"
- else
- self.dir = "E"
- end
- end
- turtle.forward()
- end
- end
- elseif not self.gps then
- local first_scan = self.pos
- if turtle.forward() then
- local second_scan = self.pos
- if second_scan.y ~= first_scan.y then
- if first_scan.y > second_scan.y then
- self.dir = "N"
- else
- self.dir = "S"
- end
- elseif second_scan.x ~= first_scan.x then
- if first_scan.x < second_scan.x then
- self.dir = "E"
- else
- self.dir = "W"
- end
- end
- turtle.back()
- elseif turtle.back() then
- local second_scan = self.pos
- if second_scan.y ~= first_scan.y then
- if first_scan.y > second_scan.y then
- self.dir = "S"
- else
- self.dir = "N"
- end
- elseif second_scan.x ~= first_scan.x then
- if first_scan.x < second_scan.x then
- self.dir = "W"
- else
- self.dir = "E"
- end
- end
- turtle.forward()
- end
- self:get_gps()
- else
- print("Error?")
- end
- end
- -- Read and save turtle position
- function extraFuncs:read_pos()
- if not fs.exists("extraFuncs_turtlePosition") then
- io.write("Couldn't find the extraFuncs_turtlePosition folder, make one? Y/N")
- answer=io.read()
- if answer:lower()=="y" then
- print("creating extraFuncs_turtlePosition file")
- local h = fs.open("extraFuncs_turtlePosition", "w")
- h.writeLine(self.pos.x)
- h.writeLine(self.pos.y)
- h.writeLine(self.pos.z)
- h.writeLine(self.dir)
- h.close()
- elseif answer:lower()=="n" then
- error("Couldn't find the extraFuncs_turtlePosition folder")
- end
- else
- local h = fs.open("extraFuncs_turtlePosition", "r")
- self.pos.x = tonumber(h.readLine())
- self.pos.y = tonumber(h.readLine())
- self.pos.z = tonumber(h.readLine())
- self.dir = h.readLine()
- h.close()
- return true
- end
- end
- function extraFuncs:save_pos()
- if not fs.exists("extraFuncs_turtlePosition") then
- io.write("Couldn't find the extraFuncs_turtlePosition folder, make one? Y/N")
- answer=io.read()
- if answer:lower()=="y" then
- print("creating extraFuncs_turtlePosition file")
- local h = fs.open("extraFuncs_turtlePosition", "w")
- h.writeLine(self.pos.x)
- h.writeLine(self.pos.y)
- h.writeLine(self.pos.z)
- h.writeLine(self.dir)
- h.close()
- elseif answer:lower()=="n" then
- error("Couldn't find the extraFuncs_turtlePosition folder")
- end
- else
- local h = fs.open("extraFuncs_turtlePosition", "w")
- h.writeLine(self.pos.x)
- h.writeLine(self.pos.y)
- h.writeLine(self.pos.z)
- h.writeLine(self.dir)
- h.close()
- return true
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment