SHOW:
|
|
- or go back to the newest paste.
1 | MiningTurtle = { | |
2 | position = { | |
3 | x = 0, | |
4 | y = 0, | |
5 | z = 0 | |
6 | }, | |
7 | direction = 0 | |
8 | } | |
9 | ||
10 | -- Check if the Turtle needs to be refueled ( <= refuelLevel ) | |
11 | -- if yes, try to refuel it taking the contents of the inventory | |
12 | -- if this is not possible or not enough, go back to base | |
13 | function MiningTurtle:requiredRefuel( refuelLevel, requiredFuelLevel ) | |
14 | ||
15 | if refuelLevel == nil then | |
16 | refuelLevel = 25 | |
17 | end | |
18 | ||
19 | if requiredFuelLevel == nil then | |
20 | requiredFuelLevel = 500 | |
21 | end | |
22 | ||
23 | -- should we refuel? | |
24 | if turtle.getFuelLevel() <= refuelLevel then | |
25 | ||
26 | -- iterate through our inventory | |
27 | for slot = 1,16 do | |
28 | ||
29 | -- select slot | |
30 | turtle.select(slot) | |
31 | ||
32 | -- refuel from active slot... | |
33 | if turtle.refuel( turtle.getItemCount( slot ) ) then | |
34 | ||
35 | end | |
36 | ||
37 | -- ...and check again | |
38 | if turtle.getFuelLevel() >= requiredFuelLevel then | |
39 | return true | |
40 | end | |
41 | ||
42 | end | |
43 | ||
44 | -- check if we did not refueled enough alreay | |
45 | if not (turtle.getFuelLevel() >= requiredFuelLevel) then | |
46 | -- if yes, go back to base | |
47 | ||
48 | MiningTurtle:toBase() | |
49 | -- refuel: to be implemented!!!! | |
50 | end | |
51 | end | |
52 | ||
53 | return false | |
54 | end | |
55 | ||
56 | -- Go back to the base of the MiningTurtle | |
57 | function MiningTurtle:toBase( ) | |
58 | ||
59 | end | |
60 | ||
61 | -- Go to ground | |
62 | function MiningTurtle:toGround( ) | |
63 | ||
64 | while not turtle.detectDown() do | |
65 | MiningTurtle:down() | |
66 | end | |
67 | ||
68 | end | |
69 | ||
70 | -- forward | |
71 | function MiningTurtle:forward() | |
72 | local ret | |
73 | ||
74 | ret = turtle.forward() | |
75 | ||
76 | if ret then | |
77 | ||
78 | ||
79 | if self.direction == 0 then | |
80 | ||
81 | self.position.x = self.position.x + 1 | |
82 | ||
83 | elseif self.direction == 90 then | |
84 | ||
85 | self.position.y = self.position.y + 1 | |
86 | ||
87 | elseif self.direction == 180 then | |
88 | ||
89 | self.position.x = self.position.x - 1 | |
90 | ||
91 | elseif self.direction == 270 then | |
92 | ||
93 | self.position.y = self.position.y - 1 | |
94 | ||
95 | end | |
96 | ||
97 | end | |
98 | ||
99 | return ret | |
100 | end | |
101 | ||
102 | -- back | |
103 | function MiningTurtle:back() | |
104 | local ret | |
105 | ||
106 | ret = turtle.back() | |
107 | ||
108 | if ret then | |
109 | ||
110 | if self.direction == 0 then | |
111 | ||
112 | self.position.x = self.position.x - 1 | |
113 | ||
114 | elseif self.direction == 90 then | |
115 | ||
116 | self.position.y = self.position.y - 1 | |
117 | ||
118 | elseif self.direction == 180 then | |
119 | ||
120 | self.position.x = self.position.x + 1 | |
121 | ||
122 | elseif self.direction == 270 then | |
123 | ||
124 | self.position.y = self.position.y + 1 | |
125 | ||
126 | end | |
127 | ||
128 | end | |
129 | ||
130 | return ret | |
131 | end | |
132 | ||
133 | -- up | |
134 | function MiningTurtle:up() | |
135 | local ret | |
136 | ||
137 | ret = turtle.up() | |
138 | ||
139 | if ret then | |
140 | self.position.z = self.position.z + 1 | |
141 | end | |
142 | ||
143 | return ret | |
144 | end | |
145 | ||
146 | -- down | |
147 | function MiningTurtle:down() | |
148 | local ret | |
149 | ||
150 | ret = turtle.down() | |
151 | ||
152 | if ret then | |
153 | self.position.z = self.position.z - 1 | |
154 | end | |
155 | ||
156 | return ret | |
157 | end | |
158 | ||
159 | -- turn Left | |
160 | function MiningTurtle:turnLeft() | |
161 | local ret | |
162 | ||
163 | ret = turtle.turnLeft() | |
164 | ||
165 | if ret then | |
166 | self.direction = self.direction + 90 | |
167 | ||
168 | while self.direction >= 360 do | |
169 | self.direction = self.direction - 360 | |
170 | end | |
171 | end | |
172 | ||
173 | return ret | |
174 | end | |
175 | ||
176 | -- turn Right | |
177 | function MiningTurtle:turnRight() | |
178 | local ret | |
179 | ||
180 | ret = turtle.turnRight() | |
181 | ||
182 | if ret then | |
183 | self.direction = self.direction - 90 | |
184 | ||
185 | while self.direction < 0 do | |
186 | self.direction = self.direction + 360 | |
187 | end | |
188 | end | |
189 | ||
190 | return ret | |
191 | end | |
192 | ||
193 | -- Save forward | |
194 | function MiningTurtle:saveForward() | |
195 | ||
196 | while not MiningTurtle:forward() do | |
197 | turtle.dig() | |
198 | end | |
199 | end | |
200 | ||
201 | -- Save up | |
202 | function MiningTurtle:saveUp() | |
203 | ||
204 | while not MiningTurtle:up() do | |
205 | turtle.digUp() | |
206 | end | |
207 | end | |
208 | ||
209 | -- Save down | |
210 | function MiningTurtle:saveDown() | |
211 | ||
212 | while not MiningTurtle:down() do | |
213 | turtle.digDown() | |
214 | end | |
215 | end | |
216 | ||
217 | -- 180 degree turn | |
218 | function MiningTurtle:turn() | |
219 | ||
220 | MiningTurtle:turnRight() | |
221 | MiningTurtle:turnRight() | |
222 | end | |
223 | ||
224 | -- Make a tunnel | |
225 | function MiningTurtle:tunnel( length, height, width, ret ) | |
226 | ||
227 | if height == nil then | |
228 | height = 2 | |
229 | end | |
230 | ||
231 | if width == nil then | |
232 | width = 1 | |
233 | end | |
234 | ||
235 | if ret == nil then | |
236 | ret = false | |
237 | end | |
238 | ||
239 | -- Length loop | |
240 | ||
241 | for i = 1,length do | |
242 | ||
243 | MiningTurtle:saveForward() | |
244 | ||
245 | if i % 2 == 0 then | |
246 | -- even | |
247 | ||
248 | MiningTurtle:turnLeft() | |
249 | ||
250 | for x = 0,width do | |
251 | ||
252 | for y = 0,height do | |
253 | ||
254 | if x % 2 == 0 then | |
255 | MiningTurtle:saveUp() | |
256 | else | |
257 | MiningTurtle:saveDown() | |
258 | end | |
259 | ||
260 | end | |
261 | ||
262 | if x < width then | |
263 | MiningTurtle:saveForward() | |
264 | end | |
265 | end | |
266 | ||
267 | MiningTurtle:turnRight() | |
268 | ||
269 | else | |
270 | -- odd | |
271 | ||
272 | MiningTurtle:turnRight() | |
273 | ||
274 | for x = 0,width do | |
275 | ||
276 | for y = 0,height do | |
277 | ||
278 | if x % 2 == 0 then | |
279 | MiningTurtle:saveUp() | |
280 | else | |
281 | MiningTurtle:saveDown() | |
282 | end | |
283 | ||
284 | end | |
285 | ||
286 | if x < width then | |
287 | MiningTurtle:saveForward() | |
288 | end | |
289 | end | |
290 | ||
291 | MiningTurtle:turnLeft() | |
292 | ||
293 | end | |
294 | ||
295 | end | |
296 | ||
297 | if ret then | |
298 | ||
299 | MiningTurtle:turn() | |
300 | end | |
301 | ||
302 | end | |
303 | ||
304 | ||
305 | -- | |
306 | function MiningTurtle:matrix( rows, cols ) | |
307 | ||
308 | ||
309 | ||
310 | end | |
311 | ||
312 | ||
313 | -- main | |
314 | ||
315 | while not MiningTurtle:requiredRefuel() do | |
316 | print("Waiting for MiningTurtle to have enough fuel") | |
317 | end | |
318 | ||
319 | MiningTurtle:toGround() | |
320 | MiningTurtle:tunnel(10) |