solidity

minecraft swarm drone

May 26th, 2013
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.28 KB | None | 0 0
  1. --y = 6+3   -- y level
  2.  
  3. function estFuel(f,r,y)
  4.     fuel = 8*f+2*r+2*y+2
  5.     print("refueling to estimated level of "..fuel)
  6.     turtle.select(1)
  7.     while turtle.getFuelLevel() < fuel do
  8.         if turtle.getItemCount(1) < 1 then
  9.             if not turtle.suckDown() then
  10.                 print("can't find fuel in there")
  11.                 sleep(2)
  12.             end
  13.         end
  14.         turtle.refuel(1)
  15.         print("fuel level: "..turtle.getFuelLevel().." / "..fuel)
  16.     end
  17.     turtle.dropDown()
  18. end
  19.  
  20. function tleft(turns)
  21.     if turns == nil then
  22.         turns = 1
  23.     end
  24.     for i = 1,turns do
  25.         turtle.turnLeft()
  26.     end
  27. end
  28.  
  29. function tright(turns)
  30.     if turns == nil then
  31.         turns = 1
  32.     end
  33.     for i = 1,turns do
  34.         turtle.turnRight()
  35.     end
  36. end
  37.  
  38. function move(dir, dist, dig)
  39.     for d = 1, dist do
  40.         if dir == "f" then
  41.             while not turtle.forward() do
  42.                 if turtle.detect() then
  43.                     if (not peripheral.isPresent("front")) and dig then
  44.                         turtle.dig()
  45.                     end
  46.                 else
  47.                     turtle.attack()
  48.                 end
  49.                 sleep(0.2)
  50.             end
  51.         elseif dir == "u" then
  52.             while turtle.detect() and dig do
  53.                 turtle.dig()
  54.                 sleep(0.2)  -- wait for gravel/sand to settle
  55.             end            
  56.             while not turtle.up() do
  57.                 if turtle.detectUp() then
  58.                     if not peripheral.isPresent("top") then
  59.                         turtle.digUp()
  60.                     end
  61.                 else
  62.                     turtle.attackUp()
  63.                 end
  64.                 sleep(0.2)
  65.             end
  66.         elseif dir == "d" then
  67.             while turtle.detect() and dig do
  68.                 turtle.dig()
  69.                 sleep(0.2)
  70.             end
  71.             while not turtle.down() do
  72.                 if turtle.detectDown() then
  73.                     if not peripheral.isPresent("bottom") then
  74.                         turtle.digDown()
  75.                     end
  76.                 else
  77.                     turtle.attackDown()
  78.                 end
  79.             end
  80.         elseif dir == "b" then
  81.             if not turtle.back() then
  82.                 tleft(2)
  83.                 while not turtle.forward() do
  84.                     if turtle.detect() then
  85.                         if not peripheral.isPresent("front") then
  86.                             turtle.dig()
  87.                         end
  88.                     else
  89.                         turtle.attack()
  90.                     end
  91.                 end
  92.                 tleft(2)
  93.             end
  94.         end
  95.     end
  96. end
  97.  
  98. -- read position from file
  99. fh = fs.open("disk/state","r")
  100. right = tonumber(fh.readLine())
  101. forward = tonumber(fh.readLine())
  102. y = tonumber(fh.readLine())
  103. fh.close()
  104.  
  105. -- update position to file
  106. fh = fs.open("disk/state","w")
  107. newRight = right - 1
  108. newForward = forward
  109. if newRight == -1 then
  110.     newRight = 15
  111.     newForward = forward - 1
  112. end
  113. if newForward == -1 then
  114.     newForward = 3
  115. end
  116. fh.writeLine(newRight)
  117. fh.writeLine(newForward)
  118. fh.writeLine(y)
  119. fh.close()
  120.  
  121. -- refuel
  122. estFuel(forward, right, y)
  123.  
  124. -- position
  125. if right == 15 then
  126.     dig = true
  127. else
  128.     -- dig = false
  129.     dig = true
  130. end
  131. if forward > 0 then
  132.     move("f",4*forward-1,dig)
  133.     tright()
  134.     move("f",right,dig)
  135.     tleft()
  136. elseif (forward == 0) and (right == 0) then
  137.     move("f",1,true)
  138.     move("d",2,true)
  139.     move("b",2,true)
  140. else
  141.     tright()
  142.     move("f",right,dig)
  143.     tright()
  144.     move("f",1,true)
  145.     tleft(2)
  146. end
  147.  
  148. -- dig out
  149. if (forward == 0) and (right == 0) then
  150.     move("d",y-7,true)
  151. else
  152.     move("d",y-5,true)
  153. end
  154. move("f",2,true)
  155. -- move("u",y-6,true)
  156. -- move("u",1,false)
  157. move("u",y-5,true)
  158. -- return
  159. -- if forward == 0 then
  160.     -- move("f",1,false)
  161. -- end
  162. tleft()
  163. move("f",right,false)
  164. tleft()
  165. move("f",4*forward+1,false)
  166.  
  167. -- dump inventory
  168. print("dumping")
  169. for s=16,1,-1 do
  170.     if turtle.getItemCount(s) > 0 then
  171.         turtle.select(s)
  172.         while not turtle.dropDown() do
  173.             sleep(0.5)
  174.         end
  175.     end
  176. end
  177. redstone.setOutput("front",true)
Advertisement
Add Comment
Please, Sign In to add comment