Advertisement
Ulthean

api_digOres

Jan 12th, 2013
13,194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.56 KB | None | 0 0
  1. -- VALUES FOR THE DIRECTIONS
  2. local up = "up"
  3. local down = "down"
  4. local forward = "forward"
  5. local back  = "back"
  6. local right = "right"
  7. local left = "left"
  8.  
  9. -- LOAD FUNCTIONS FROM THE OTHER FILES
  10. os.loadAPI("api_sharedFunctions")
  11. os.loadAPI("api_turtleExt")
  12.  
  13. -- ------------------------------------------ --
  14. -- START OF THE FUNCTIONS SPECIFIC TO digOres --
  15. -- ------------------------------------------ --
  16.  
  17. -- EXCAVATES A SHAFT, DIGGING OUT ALL THE SPECIAL BLOCKS (ORES ETC)
  18. function excavateShaft(configuration, dir)
  19.   local squaresMoved=0
  20.   for i=1,configuration.centerRadius+api_sharedFunctions.calculateMoves(configuration, configuration.currentL, 0, configuration.currentS) do
  21.     if api_sharedFunctions.needsRestocking(configuration) then
  22.       api_turtleExt.turnTo(back)
  23.       exitShaftAndRestock(configuration, dir, squaresMoved)
  24.     end
  25.     if api_turtleExt.digAndMove(forward)==0 then
  26.       api_sharedFunctions.reportObstruction(configuration, dir)
  27.       break
  28.     end
  29.     squaresMoved = squaresMoved + 1
  30.     checkSides(configuration, up)
  31.   end
  32.   api_turtleExt.digAndMove(down, 1, 0)
  33.   api_turtleExt.turnTo(back)
  34.   checkSides(configuration, down)
  35.   for i=1,squaresMoved do
  36.     if configuration.placeTorches and (squaresMoved%6==5) then
  37.       api_turtleExt.place(up, 1)
  38.     end
  39.     if api_sharedFunctions.needsRestocking(configuration) then
  40.       api_turtleExt.digAndMove(up, 1, 0)
  41.       exitShaftAndRestock(configuration, dir, squaresMoved)
  42.       api_turtleExt.turnTo(back)
  43.       api_turtleExt.digAndMove(down, 1, 0)
  44.     end
  45.     if api_turtleExt.digAndMove(forward)==0 then
  46.       api_sharedFunctions.reportObstruction(configuration, dir)
  47.       break
  48.     end
  49.     squaresMoved = squaresMoved - 1
  50.     checkSides(configuration, down)
  51.   end
  52.   api_turtleExt.digAndMove(up, 1, 0)
  53.   api_turtleExt.digAndMove(forward, squaresMoved, 0)
  54. end
  55.  
  56. -- CHECKS IF THE BLOCKS AT THE LEFT OR RIGHT ARE SPECIAL (AND THE TOP OR BOTTOM, DEPENDING ON THE INPUT)
  57. -- IF SO IT WILL DIG OUT THAT BLOCK AND EXCAVATE THE REST OF THE VEIN
  58. function checkSides(configuration, vDir)
  59.   check(configuration, vDir)
  60.   check(configuration, left)
  61.   check(configuration, right)
  62. end
  63.  
  64. -- DROPS THE ITEMS IN THE INVENTORY AND REFUELS THE TURTLE
  65. function exitShaftAndRestock(configuration, dir, squaresMoved)
  66.   api_turtleExt.digAndMove(forward, squaresMoved, 0)
  67.   api_turtleExt.turnTo(dir)
  68.   api_sharedFunctions.dropoffAndRestock(configuration, configuration.numIgnoreBlocks, false, false, false)
  69.   api_turtleExt.turnTo(dir)
  70.   api_turtleExt.digAndMove(forward, squaresMoved, 0)
  71. end
  72.  
  73. -- CHECKS IF A BLOCK IN A CERTAIN DIRECTION IS SPECIAL
  74. -- IF SO IT WILL DIG OUT THAT BLOCK AND EXCAVATE THE REST OF THE VEIN
  75. function check(configuration, dir)
  76.   api_turtleExt.turnTo(dir)
  77.   local tDir=api_turtleExt.turnedDir(dir)
  78.   if api_turtleExt.detect(tDir) then
  79.     if isSpecial(configuration, tDir) then
  80.       if api_turtleExt.digAndMove(tDir) == 1 then
  81.         configuration.numOres=configuration.numOres+1
  82.         excavate(configuration)
  83.         api_turtleExt.digAndMove(api_turtleExt.reverseDir(tDir), 1, 0)
  84.       end
  85.     end
  86.   end
  87.   api_turtleExt.turnFrom(dir)
  88. end
  89.  
  90. -- CHECKS IF A BLOCK IN A CERTAIN DIRECTION IS SPECIAL (NOT ONE OF THE REFERENCE COMPONENTS (DIRT ETC))
  91. function isSpecial(configuration, dir)
  92.   api_turtleExt.turnTo(dir)
  93.   local tDir=api_turtleExt.turnedDir(dir)
  94.   local torchSlot=0
  95.   if configuration.placeTorches then
  96.     torchSlot=1
  97.   end
  98.   if not api_turtleExt.detect(tDir) then
  99.     return false
  100.   end
  101.   for i=1, configuration.numIgnoreBlocks+torchSlot do
  102.     if api_turtleExt.compare(tDir, i) then
  103.       api_turtleExt.turnFrom(dir)
  104.       return false
  105.     end
  106.   end
  107.   api_turtleExt.turnFrom(dir)
  108.   return true
  109. end
  110.  
  111. -- EXCAVATES AN ORE VEIN
  112. function excavate(configuration)
  113.   local numSteps = 0
  114.   local steps = {}
  115.   repeat
  116.     steps[numSteps] = steps[numSteps] or 0
  117.     steps[numSteps] = lookForOres(configuration, steps[numSteps])  
  118.     if steps[numSteps] ~= 7 then
  119.       if ((numSteps==0) or (steps[numSteps]~=api_turtleExt.reverseIntDir(steps[numSteps-1]))) then
  120.         if api_turtleExt.digAndMove(api_turtleExt.turnedDir(api_turtleExt.intToDir(steps[numSteps]))) == 1 then
  121.           configuration.numOres=configuration.numOres+1
  122.           numSteps = numSteps + 1
  123.         end
  124.       end
  125.     else
  126.       steps[numSteps] = 0
  127.       numSteps = numSteps - 1
  128.       if numSteps >= 0 then
  129.         api_turtleExt.digAndMove(api_turtleExt.reverseDir(api_turtleExt.turnedDir(api_turtleExt.intToDir(steps[numSteps]))), 1, 0)
  130.       end
  131.     end
  132.   until numSteps < 0
  133. end
  134.  
  135. -- LOOKS AROUND THE CURRENT POSITION, LOOKING FOR ORES
  136. function lookForOres(configuration, dir)
  137.   if dir < 1 then
  138.     dir = dir + 1
  139.     if isSpecial(configuration, up) then
  140.       return 1
  141.     end
  142.   end
  143.   if dir < 2 then
  144.     dir = dir + 1
  145.     if isSpecial(configuration, down) then
  146.       return 2
  147.     end
  148.   end
  149.   if dir > 2 then
  150.     api_turtleExt.turnTo(left)
  151.   end
  152.   for dir=dir+1, 6 do
  153.     if isSpecial(configuration, forward) then
  154.       return dir
  155.     end
  156.     api_turtleExt.turnTo(left)
  157.   end
  158.   return 7
  159. end
  160.  
  161. -- CHECKS IF THE USER PLACED ENOUGH BLOCKS IN THE INVENTORY
  162. function enoughBlocksProvided(configuration)
  163.   local torchSlot=0
  164.   if configuration.placeTorches then
  165.     torchSlot=1
  166.   end
  167.   for i=1+torchSlot,configuration.numIgnoreBlocks+torchSlot do
  168.     if turtle.getItemCount(i)==0 then
  169.       return false
  170.     end
  171.   end
  172.   return true
  173. end
  174.  
  175. -- ---------------------------------------- --
  176. -- END OF THE FUNCTIONS SPECIFIC TO digOres --
  177. -- ---------------------------------------- --
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement