Advertisement
visiongaming43

Untitled

Jun 12th, 2022
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 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 saveStats()
  19. local turtleStats = fs.open("TURTLE_STATS", "w")
  20. local info = { TURTLE_X, TURTLE_Y, TURTLE_Z, HEADING }
  21. for _, value in ipairs(info) do
  22. turtleStats.writeLine(value)
  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 = tonumber(turtleStats.readLine())
  56. TURTLE_Y = tonumber(turtleStats.readLine())
  57. TURTLE_X = tonumber(turtleStats.readLine())
  58. turtleStats.close()
  59. return TURTLE_X, TURTLE_Y, TURTLE_Z
  60. end
  61.  
  62. function getHeading()
  63. return HEADING
  64. end
  65.  
  66. function getHeadingFromFile()
  67. local turtleStats = fs.open("TURTLE_STATS", "r")
  68. for a = 1, 3 do
  69. turtleStats.readLine()
  70. end
  71. HEADING = tonumber(turtleStats.readLine())
  72. return HEADING
  73. end
  74.  
  75. function calculateStats()
  76. locateCoordinates()
  77. local vectorOne = vector.new(getCoordinates())
  78. clearPath()
  79. if (forward()) then
  80. locateCoordinates()
  81. local vectorTwo = vector.new(getCoordinates())
  82. local resultVector = vectorTwo:sub(vectorOne)
  83. HEADING = ((math.abs(resultVector.x) * 3 - resultVector.x) + (math.abs(resultVector.z) * 2 + resultVector.z))
  84. if (not back()) then
  85. error("TURTLE DID NOT PROPERLY MOVE BACKWARDS")
  86. end
  87. saveStats()
  88. else
  89. error("TURTLE DID NOT PROPERLY MOVE FORWARDS")
  90. end
  91. end
  92.  
  93. function faceHeading(finalHeading)
  94. exp(1, finalHeading, "number")
  95. if (getHeadingFromFile() == finalHeading) then
  96. return
  97. end
  98. local previousIndex
  99. if (getHeadingFromFile() == 1) then
  100. previousIndex = #ACCEPTABLE_HEADINGS
  101. else
  102. previousIndex = getHeadingFromFile() - 1
  103. end
  104. if (finalHeading == previousIndex) then
  105. turnLeft()
  106. return
  107. end
  108. local difference = math.abs(getHeadingFromFile() - finalHeading)
  109. while (difference > 0) do
  110. turnRight()
  111. difference = difference - 1
  112. end
  113. end
  114.  
  115. function turnLeft()
  116. turtle.turnLeft()
  117. if (HEADING == 1) then
  118. HEADING = #ACCEPTABLE_HEADINGS
  119. else
  120. HEADING = HEADING - 1
  121. end
  122. saveStats()
  123. end
  124.  
  125. function turnRight()
  126. turtle.turnRight()
  127. if (HEADING == #ACCEPTABLE_HEADINGS) then
  128. HEADING = 1
  129. else
  130. HEADING = HEADING + 1
  131. end
  132. saveStats()
  133. end
  134.  
  135. function oppositeTurn(firstTurn)
  136. exp(1, firstTurn, "function")
  137. if (firstTurn == turnLeft) then
  138. return turnRight
  139. else
  140. return turnLeft
  141. end
  142. end
  143.  
  144. function forward()
  145. clearPath()
  146. if (turtle.forward()) then
  147. if (HEADING == 1) then
  148. TURTLE_Z = TURTLE_Z - 1
  149. elseif (HEADING == 2) then
  150. TURTLE_X = TURTLE_X + 1
  151. elseif (HEADING == 3) then
  152. TURTLE_Z = TURTLE_Z + 1
  153. elseif (HEADING == 4) then
  154. TURTLE_X = TURTLE_X - 1
  155. end
  156. saveStats()
  157. return true
  158. end
  159. return false
  160. end
  161.  
  162. function back()
  163. if (not turtle.back()) then
  164. turtle.turnLeft()
  165. turtle.turnLeft()
  166. clearPath()
  167. turtle.turnLeft()
  168. turtle.turnLeft()
  169. else
  170. if (HEADING == 1) then
  171. TURTLE_Z = TURTLE_Z + 1
  172. elseif (HEADING == 2) then
  173. TURTLE_X = TURTLE_X - 1
  174. elseif (HEADING == 3) then
  175. TURTLE_Z = TURTLE_Z - 1
  176. elseif (HEADING == 4) then
  177. TURTLE_X = TURTLE_X + 1
  178. end
  179. saveStats()
  180. return true
  181. end
  182. return false
  183. end
  184.  
  185. function up()
  186. clearPathUp()
  187. if (turtle.up()) then
  188. TURTLE_Y = TURTLE_Y + 1
  189. saveStats()
  190. return true
  191. end
  192. return false
  193. end
  194.  
  195. function down()
  196. clearPathDown()
  197. if (turtle.down()) then
  198. TURTLE_Y = TURTLE_Y - 1
  199. saveStats()
  200. return true
  201. end
  202. return false
  203. end
  204.  
  205. function translateY(amount)
  206. exp(1, amount, "number")
  207. range(math.abs(amount), 0, turtle.getFuelLevel())
  208. local command
  209. if (amount < 0) then
  210. command = down
  211. else
  212. command = up
  213. end
  214. amount = math.abs(amount)
  215. while (amount > 0) do
  216. command()
  217. amount = amount - 1
  218. end
  219. end
  220.  
  221. -- SINCE U CANT BREAK BEHIND< MAKE TURTLE TURN AROUND AND BREAK BLOCKS IT DETECTS< THEN TURN AROUND AGAIN AFTER IT IS DONE!!!!!!!
  222. function translateX(amount)
  223. exp(1, amount, "number")
  224. range(math.abs(amount), 0, turtle.getFuelLevel())
  225. faceHeading(2)
  226. local command
  227. if (amount < 0) then
  228. command = back
  229. else
  230. command = forward
  231. end
  232. amount = math.abs(amount)
  233. while (amount > 0) do
  234. command()
  235. amount = amount - 1
  236. end
  237. end
  238.  
  239. function translateZ(amount)
  240. exp(1, amount, "number")
  241. range(math.abs(amount), 0, turtle.getFuelLevel())
  242. faceHeading(3)
  243. local command
  244. if (amount < 0) then
  245. command = back
  246. else
  247. command = forward
  248. end
  249. amount = math.abs(amount)
  250. while (amount > 0) do
  251. command()
  252. amount = amount - 1
  253. end
  254. end
  255.  
  256. function goToY(endY)
  257. exp(1, endY, "number")
  258. if (TURTLE_Y == endY) then return end
  259. local amount = endY - TURTLE_Y
  260. translateY(amount)
  261. end
  262.  
  263. function goToX(endX)
  264. exp(1, endX, "number")
  265. if (TURTLE_X == endX) then return end
  266. local amount = endX - TURTLE_X
  267. translateX(amount)
  268. end
  269.  
  270. function goToZ(endZ)
  271. exp(1, endZ, "number")
  272. if (TURTLE_Z == endZ) then return end
  273. local amount = endZ - TURTLE_Z
  274. translateZ(amount)
  275. end
  276.  
  277. function moveTo(x, y, z)
  278. exp(1, x, "number")
  279. exp(1, y, "number")
  280. exp(1, z, "number")
  281. goToY(y)
  282. goToX(x)
  283. goToZ(z)
  284. end
  285.  
  286. return { saveStats = saveStats, clearPath = clearPath,
  287. clearPathUp = clearPathUp,
  288. clearPathDown = clearPathDown, locateCoordinates = locateCoordinates, getCoordinates = getCoordinates,
  289. getCoordinatesFromFile = getCoordinatesFromFile, getHeading = getHeading, getHeadingFromFile = getHeadingFromFile,
  290. calculateStats = calculateStats, faceHeading = faceHeading, turnLeft = turnLeft, turnRight = turnRight,
  291. forward = forward,
  292. back = back, up = up, down = down, translateY = translateY, translateX = translateX, translateZ = translateZ,
  293. goToY = goToY, goToX = goToX, goToZ = goToZ, moveTo = moveTo }
  294.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement