• API
• FAQ
• Tools
• Archive
A Pastebin account makes a great Christmas gift
SHARE
TWEET

# pump.lua

a guest Nov 15th, 2018 100 Never
ENDING IN00days00hours00mins00secs

1. local rbt = require("robot")
2. local cmp = require("component")
3. local evt = require("event")
4. local os = require("os")
5. local math = require("math")
6. local computer = require("computer")
7. local coroutine = require("coroutine")
8.
9. -- slot 1: tesseract
10. -- slot 2: charger
11. -- slot 3: redstone block
12.
13. rechargeThreshold = 0.50
14. fullRatio = 0.95
15. path = {}
16. x, y, z = 0, 0, 0
17.
18. -- move robot forward n spaces, track motion for RTLS
19. function forward(n)
20.   if n == nil then n=1 end
21.   for i = 1,n do
22.     if rbt.forward() then
23.       path[#path+1] = "forward"
24.     end
25.   end
26. end
27.
28. -- move robot up n w/ rtls
29. function up(n)
30.   if n == nil then n=1 end
31.   for i = 1,n do
32.     if rbt.up() then
33.       path[#path+1] = "up"
34.     end
35.   end
36. end
37.
38. -- move robot down n w/ rtls
39. function down(n)
40.   if n == nil then n=1 end
41.   for i = 1,n do
42.     if rbt.down() then
43.       path[#path+1] = "down"
44.     end
45.   end
46. end
47.
48. -- turn robot n times, track motion for RTLS
49. function left(n)
50.   if n == nil then n=1 end
51.   for i = 1,n do
52.     if rbt.turnLeft() then
53.       path[#path+1] = "left"
54.     end
55.   end
56. end
57.
58. -- turn robot n times, track motion for RTLS
59. function right(n)
60.   if n == nil then n=1 end
61.   for i = 1,n do
62.     if rbt.turnRight() then
63.       path[#path+1] = "right"
64.     end
65.   end
66. end
67.
68. undo = {right = rbt.turnLeft, left = rbt.turnRight,
69. up = rbt.down, down = rbt.up,
70. forward = rbt.back}
71.
74. function RTLS()
75.   while #path > 0 do
76.     while undo[path[#path]]()==false do
77.       rbt.turnAround()
78.       rbt.swing()
79.       rbt.turnAround()
80.     end
81.     path[#path] = nil
82.   end
83. end
84.
85. -- reset RTLS, clear RTLS stack; set new starting
86. -- location
87. function rRTLS()
88.   path = {}
89. end
90.
91. function forwardBreak()
92.   if rbt.detect() then
93.     rbt.swing()
94.   end
95.   rbt.forward()
96. end
97.
98.
99. -- ensure XxYxZ free space, with robot in the 0, 0, 0
100. -- corner, xd being in front and zd being to the right
101. function ensureEmpty(xd, yd, zd)
102.   xd = xd - 1
103.   for y = 1,yd do
104.     for r = 1,zd do
105.       for c = 1,xd do
106.         forwardBreak()
107.       end
108.       rbt.turnLeft()
109.       rbt.turnLeft()
110.       for c = 1,xd do
111.         rbt.forward()
112.       end
113.       rbt.turnLeft()
114.       forwardBreak()
115.       rbt.turnLeft()
116.     end
117.
118.     rbt.turnLeft()
119.     for r = 1,zd do
120.       rbt.forward()
121.     end
122.     rbt.turnRight()
123.
124.     if rbt.detectUp() then
125.       rbt.swingUp()
126.     end
127.     rbt.up()
128.   end
129.   for y = 1,yd do
130.     rbt.down()
131.   end
132. end
133.
134. -- Get level in tanks
135. function tankLevel()
136.   return cmp.tank_controller.getTankLevelInSlot(4)+cmp.tank_controller.getTankLevelInSlot(8)
137. end
138.
139. -- Get tank capacity
140. function tankCapacity()
141.   return cmp.tank_controller.getTankCapacityInSlot(4)+cmp.tank_controller.getTankCapacityInSlot(8)
142. end
143.
144. -- RTLS, empty tanks, get power
145. function reset()
146.   RTLS()
147.   rRTLS()
148.   rbt.turnAround()
149.   while tankLevel() > 0 do
150.     rbt.select(4)
151.     if cmp.tank_controller.getTankLevelInSlot(4) == 0 then
152.       rbt.select(8)
153.     end
154.     cmp.tank_controller.drain()
155.     rbt.fill()
156.   end
157.   while computer.energy()/computer.maxEnergy() < fullRatio do
158.     os.sleep(3)
159.   end
160.   rbt.turnAround()
161. end
162.
163. -- BEGIN NON FUNCTION CODE --
165. rbt.selectTank(1)
166.
167. -- Move to get lava
168. while true do
169.   print(tankLevel().." mB of lava in tank")
170.   -- check tank level and empty if necesary
171.   if tankLevel() > tankCapacity()*0.95 then
172.     -- empty tank into tesseract
173.     print("Dumping tank")
174.     reset()
175.   end
176.   -- power level check
177.   if computer.energy()/computer.maxEnergy() < rechargeThreshold then
178.     -- Wait for charging
179.     reset()
180.   end
181.   -- check for obstacle before moving
182.   if rbt.detect() or math.random() < 0.025 then
183.     -- deal with the obstacle - this happens as soon as we hit the other side of the lake
184.     --
185.     if math.random() < 0.5 then
186.       left()
187.     else
188.       right()
189.     end
190.     goto loopEnd
191.   end
192.   forward()
193.   rbt.drainDown()
194.   rbt.select(4)
195.   if cmp.tank_controller.getTankLevelInSlot(4) == cmp.tank_controller.getTankCapacityInSlot(4) then
196.     rbt.select(8)
197.   end
198.   cmp.tank_controller.fill()
199.   ::loopEnd::
200. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top