Advertisement
visiongaming43

Untitled

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