Advertisement
visiongaming43

posLib

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