Advertisement
visiongaming43

Untitled

Jun 12th, 2022
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 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. saveStats()
  150. elseif (HEADING == 2) then
  151. TURTLE_X = TURTLE_X + 1
  152. saveStats()
  153. elseif (HEADING == 3) then
  154. TURTLE_Z = TURTLE_Z + 1
  155. saveStats()
  156. elseif (HEADING == 4) then
  157. TURTLE_X = TURTLE_X - 1
  158. saveStats()
  159. end
  160. return true
  161. end
  162. return false
  163. end
  164.  
  165. function back()
  166. if (not turtle.back()) then
  167. turtle.turnLeft()
  168. turtle.turnLeft()
  169. clearPath()
  170. turtle.turnLeft()
  171. turtle.turnLeft()
  172. else
  173. if (HEADING == 1) then
  174. TURTLE_Z = TURTLE_Z + 1
  175. elseif (HEADING == 2) then
  176. TURTLE_X = TURTLE_X - 1
  177. elseif (HEADING == 3) then
  178. TURTLE_Z = TURTLE_Z - 1
  179. elseif (HEADING == 4) then
  180. TURTLE_X = TURTLE_X + 1
  181. end
  182. saveStats()
  183. return true
  184. end
  185. return false
  186. end
  187.  
  188. function up()
  189. clearPathUp()
  190. if (turtle.up()) then
  191. TURTLE_Y = TURTLE_Y + 1
  192. saveStats()
  193. return true
  194. end
  195. return false
  196. end
  197.  
  198. function down()
  199. clearPathDown()
  200. if (turtle.down()) then
  201. TURTLE_Y = TURTLE_Y - 1
  202. saveStats()
  203. return true
  204. end
  205. return false
  206. end
  207.  
  208. function translateY(amount)
  209. exp(1, amount, "number")
  210. range(math.abs(amount), 0, turtle.getFuelLevel())
  211. local command
  212. if (amount < 0) then
  213. command = down
  214. else
  215. command = up
  216. end
  217. amount = math.abs(amount)
  218. while (amount > 0) do
  219. command()
  220. amount = amount - 1
  221. end
  222. end
  223.  
  224. -- SINCE U CANT BREAK BEHIND< MAKE TURTLE TURN AROUND AND BREAK BLOCKS IT DETECTS< THEN TURN AROUND AGAIN AFTER IT IS DONE!!!!!!!
  225. function translateX(amount)
  226. exp(1, amount, "number")
  227. range(math.abs(amount), 0, turtle.getFuelLevel())
  228. faceHeading(2)
  229. local command
  230. if (amount < 0) then
  231. command = back
  232. else
  233. command = forward
  234. end
  235. amount = math.abs(amount)
  236. while (amount > 0) do
  237. command()
  238. amount = amount - 1
  239. end
  240. end
  241.  
  242. function translateZ(amount)
  243. exp(1, amount, "number")
  244. range(math.abs(amount), 0, turtle.getFuelLevel())
  245. faceHeading(3)
  246. local command
  247. if (amount < 0) then
  248. command = back
  249. else
  250. command = forward
  251. end
  252. amount = math.abs(amount)
  253. while (amount > 0) do
  254. command()
  255. amount = amount - 1
  256. end
  257. end
  258.  
  259. function goToY(endY)
  260. exp(1, endY, "number")
  261. if (TURTLE_Y == endY) then return end
  262. local amount = endY - TURTLE_Y
  263. translateY(amount)
  264. end
  265.  
  266. function goToX(endX)
  267. exp(1, endX, "number")
  268. if (TURTLE_X == endX) then return end
  269. local amount = endX - TURTLE_X
  270. translateX(amount)
  271. end
  272.  
  273. function goToZ(endZ)
  274. exp(1, endZ, "number")
  275. if (TURTLE_Z == endZ) then return end
  276. local amount = endZ - TURTLE_Z
  277. translateZ(amount)
  278. end
  279.  
  280. function moveTo(x, y, z)
  281. exp(1, x, "number")
  282. exp(1, y, "number")
  283. exp(1, z, "number")
  284. goToY(y)
  285. goToX(x)
  286. goToZ(z)
  287. end
  288.  
  289. return { saveStats = saveStats, clearPath = clearPath,
  290. clearPathUp = clearPathUp,
  291. clearPathDown = clearPathDown, locateCoordinates = locateCoordinates, getCoordinates = getCoordinates,
  292. getCoordinatesFromFile = getCoordinatesFromFile, getHeading = getHeading, getHeadingFromFile = getHeadingFromFile,
  293. calculateStats = calculateStats, faceHeading = faceHeading, turnLeft = turnLeft, turnRight = turnRight,
  294. forward = forward,
  295. back = back, up = up, down = down, translateY = translateY, translateX = translateX, translateZ = translateZ,
  296. goToY = goToY, goToX = goToX, goToZ = goToZ, moveTo = moveTo }
  297.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement