Advertisement
visiongaming43

Untitled

Jun 10th, 2022
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.86 KB | None | 0 0
  1. local modem = peripheral.find("modem") or error("TURTLE HAS NO MODEM")
  2. if (gps.locate(2, false) == nil) then error("GPS.LOCATE() IS NOT FUNCTIONING PROPERLY") end
  3.  
  4. local expect = require("cc.expect")
  5. local exp, field, range = expect.expect, expect.field, expect.range
  6.  
  7. local HEADING = nil
  8. local TURTLE_X, TURTLE_Y, TURTLE_Z = nil, nil, nil
  9.  
  10. -- North, East, South, West correlates to (1, 2, 3, 4)
  11. local ACCEPTABLE_HEADINGS = {
  12. [1] = "-z",
  13. [2] = "+x",
  14. [3] = "+z",
  15. [4] = "-x"
  16. }
  17.  
  18. function saveToFile()
  19. local turtleStats = fs.open("TURTLE_STATS", "w")
  20. local info = { TURTLE_X, TURTLE_Y, TURTLE_Z, HEADING }
  21. for key, line in ipairs(info) do
  22. turtleStats.writeLine(info[key])
  23. end
  24. turtleStats.close()
  25. end
  26.  
  27. function clearPath()
  28. while (turtle.detect()) do
  29. turtle.dig()
  30. end
  31. end
  32.  
  33. function clearPathUp()
  34. while (turtle.detectUp()) do
  35. turtle.digUp()
  36. end
  37. end
  38.  
  39. function clearPathDown()
  40. while (turtle.detectDown()) do
  41. turtle.digDown()
  42. end
  43. end
  44.  
  45. function locateCoordinates()
  46. TURTLE_X, TURTLE_Y, TURTLE_Z = gps.locate(2, false)
  47. end
  48.  
  49. function getCoordinates()
  50. return TURTLE_X, TURTLE_Y, TURTLE_Z
  51. end
  52.  
  53. function getCoordinatesFromFile()
  54. local turtleStats = fs.open("TURTLE_STATS", "r")
  55. TURTLE_X = turtleStats.readLine()
  56. TURTLE_Y = turtleStats.readLine()
  57. TURTLE_X = turtleStats.readLine()
  58. turtleStats.close()
  59. return TURTLE_X, TURTLE_Y, TURTLE_Z
  60. end
  61.  
  62. function updateStats()
  63. locateCoordinates()
  64. local vectorOne = vector.new(getCoordinates())
  65. clearPath()
  66. if (forward()) then
  67. locateCoordinates()
  68. local vectorTwo = vector.new(getCoordinates())
  69. local resultVector = vectorTwo:sub(vectorOne)
  70. HEADING = ((math.abs(resultVector.x) * 3 - resultVector.x) + (math.abs(resultVector.z) * 2 + resultVector.z))
  71. if (not back()) then
  72. error("TURTLE DID NOT PROPERLY MOVE BACKWARDS")
  73. end
  74. else
  75. error("TURTLE DID NOT PROPERLY MOVE FORWARDS")
  76. end
  77. end
  78.  
  79. function getHeadingFromFile()
  80. local turtleStats = fs.open("TURTLE_STATS", "r")
  81. for a = 1, 3 do
  82. turtleStats.readLine()
  83. end
  84. HEADING = turtleStats.readLine()
  85. return HEADING
  86. end
  87.  
  88. function faceHeading(finalHeading)
  89. exp(1, finalHeading, "number")
  90. local previousIndex
  91. if (HEADING == 1) then
  92. previousIndex = #ACCEPTABLE_HEADINGS
  93. else
  94. previousIndex = HEADING - 1
  95. end
  96. if (finalHeading == previousIndex) then
  97. turnLeft()
  98. return
  99. end
  100. local difference = math.abs(HEADING - finalHeading)
  101. while (difference > 0) do
  102. turnRight()
  103. difference = difference - 1
  104. end
  105. end
  106.  
  107. function turnLeft()
  108. turtle.turnLeft()
  109. if (HEADING == 1) then
  110. HEADING = 4
  111. else
  112. HEADING = HEADING - 1
  113. end
  114. saveToFile()
  115. end
  116.  
  117. function turnRight()
  118. turtle.turnRight()
  119. if (HEADING == 4) then
  120. HEADING = 1
  121. else
  122. HEADING = HEADING + 1
  123. end
  124. saveToFile()
  125. end
  126.  
  127. function oppositeTurn(firstTurn)
  128. exp(1, firstTurn, "function")
  129. if (firstTurn == turnLeft) then
  130. return turnRight
  131. else
  132. return turnLeft
  133. end
  134. end
  135.  
  136. function forward()
  137. clearPath()
  138. if (turtle.forward()) then
  139. if (HEADING == 1) then
  140. TURTLE_Z = TURTLE_Z - 1
  141. elseif (HEADING == 2) then
  142. TURTLE_X = TURTLE_X + 1
  143. elseif (HEADING == 3) then
  144. TURTLE_Z = TURTLE_Z + 1
  145. elseif (HEADING == 4) then
  146. TURTLE_X = TURTLE_X - 1
  147. end
  148. saveToFile()
  149. return true
  150. end
  151. return false
  152. end
  153.  
  154. function back()
  155. if (not turtle.back()) then
  156. turtle.turnLeft()
  157. turtle.turnLeft()
  158. clearPath()
  159. turtle.turnLeft()
  160. turtle.turnLeft()
  161. else
  162. if (HEADING == 1) then
  163. TURTLE_Z = TURTLE_Z + 1
  164. elseif (HEADING == 2) then
  165. TURTLE_X = TURTLE_X - 1
  166. elseif (HEADING == 3) then
  167. TURTLE_Z = TURTLE_Z - 1
  168. elseif (HEADING == 4) then
  169. TURTLE_X = TURTLE_X + 1
  170. end
  171. saveToFile()
  172. return true
  173. end
  174. return false
  175. end
  176.  
  177. function up()
  178. clearPathUp()
  179. if (turtle.up()) then
  180. TURTLE_Y = TURTLE_Y + 1
  181. saveToFile()
  182. return true
  183. end
  184. return false
  185. end
  186.  
  187. function down()
  188. clearPathDown()
  189. if (turtle.down()) then
  190. TURTLE_Y = TURTLE_Y - 1
  191. saveToFile()
  192. return true
  193. end
  194. return false
  195. end
  196.  
  197. function translateY(amount)
  198. exp(1, amount, "number")
  199. range(math.abs(amount), 0, turtle.getFuelLevel())
  200. local command
  201. if (amount < 0) then
  202. command = down
  203. else
  204. command = up
  205. end
  206. amount = math.abs(amount)
  207. while (amount > 0) do
  208. command()
  209. amount = amount - 1
  210. end
  211. end
  212.  
  213. -- SINCE U CANT BREAK BEHIND< MAKE TURTLE TURN AROUND AND BREAK BLOCKS IT DETECTS< THEN TURN AROUND AGAIN AFTER IT IS DONE!!!!!!!
  214. function translateX(amount)
  215. exp(1, amount, "number")
  216. range(math.abs(amount), 0, turtle.getFuelLevel())
  217. faceHeading(2)
  218. local command
  219. if (amount < 0) then
  220. command = back
  221. else
  222. command = forward
  223. end
  224. amount = math.abs(amount)
  225. while (amount > 0) do
  226. command()
  227. amount = amount - 1
  228. end
  229. end
  230.  
  231. function translateZ(amount)
  232. exp(1, amount, "number")
  233. range(math.abs(amount), 0, turtle.getFuelLevel())
  234. faceHeading(3)
  235. local command
  236. if (amount < 0) then
  237. command = back
  238. else
  239. command = forward
  240. end
  241. amount = math.abs(amount)
  242. while (amount > 0) do
  243. command()
  244. amount = amount - 1
  245. end
  246. end
  247.  
  248. function goToY(endY)
  249. exp(1, endY, "number")
  250. local amount = endY - TURTLE_Y
  251. translateY(amount)
  252. end
  253.  
  254. function goToX(endX)
  255. exp(1, endX, "number")
  256. local amount = endX - TURTLE_X
  257. translateX(amount)
  258. end
  259.  
  260. function goToZ(endZ)
  261. exp(1, endZ, "number")
  262. local amount = endZ - TURTLE_Z
  263. translateZ(amount)
  264. end
  265.  
  266. function moveTo(x, y, z)
  267. exp(1, x, "number")
  268. exp(1, y, "number")
  269. exp(1, z, "number")
  270. goToY(y)
  271. goToX(x)
  272. goToZ(z)
  273. end
  274.  
  275. return { HEADING = HEADING, TURTLE_X = TURTLE_X, TURTLE_Y = TURTLE_Y, TURTLE_Z = TURTLE_Z, ACCEPTABLE_HEADINGS = ACCEPTABLE_HEADINGS, saveToFile = saveToFile, clearPath = clearPath, locateCoordinates = locateCoordinates, getCoordinates = getCoordinates, getCoordinatesFromFile = getCoordinatesFromFile, updateStats = updateStats, getHeadingFromFile = getHeadingFromFile, faceHeading = faceHeading, turnLeft = turnLeft, turnRight = turnRight, forward = forward, back = back, up = up, down = down, translateY = translateY, translateX = translateX, translateZ = translateZ, goToY = goToY, goToX = goToX, goToZ = goToZ, moveTo = moveTo }
  276.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement