From f4444cd120d32b9efbc3e5296fb98502ba87d3ee Mon Sep 17 00:00:00 2001 From: Emerson Rosen-Jones Date: Mon, 1 Dec 2025 20:32:46 -0500 Subject: [PATCH] mine.lua: rewrite checkpoint 2 --- mine.lua | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/mine.lua b/mine.lua index 8aa1cea..f6ef302 100644 --- a/mine.lua +++ b/mine.lua @@ -21,7 +21,7 @@ function copy_v(v) return vector.new( v.x, v.y, - v.z, + v.z ) end @@ -33,8 +33,8 @@ local Block = { -- orient our corner and offset to a vector orient = function (self, pos) local dims = { - x = { self.v1.x, self.v1.x + self.v2.x } - y = { self.v1.y, self.v1.y + self.v2.y } + x = { self.v1.x, self.v1.x + self.v2.x }, + y = { self.v1.y, self.v1.y + self.v2.y }, z = { self.v1.z, self.v1.z + self.v2.z } } for dim, points in pairs(dims) do @@ -67,7 +67,7 @@ local Block = { copy = function (self) return Block.new( vector.new(self.v1.x, self.v1.y, self.v1.z), - vector.new(self.v2.x, self.v2.y, self.v2.z), + vector.new(self.v2.x, self.v2.y, self.v2.z) ) end } @@ -193,10 +193,11 @@ function refuelUntil (amt) end function dropOffItems (starting_point, go_back) + print("Time to drop off what I got") -- Turn off mining mode.mine = { forward = true } -- Note current position (assuming facing FORWARD) - local pos_state = vector.new(mode.v.x, mode.v.y, mode.v.z) + local pos_state = getCurrentPos() -- Return to origin, facing BACK moveAbs(starting_point) moveAbs(V_ZERO) @@ -232,7 +233,7 @@ function mine (block) -- a. don't move vertically if you don't have to -- b. set mining mode beforehand -- 2. move to the ending point - local height = block.v2.y + local height = block.v2.y + 1 if height % 3 == 0 then mode.mine = { up = true, forward = true, down = true } elseif height == 2 then @@ -249,14 +250,14 @@ function mine (block) start_v = start_v - UNIT_Y end_v = end_v - UNIT_Y end - move(start_v) - move(end_v) + moveAbs(start_v) + moveAbs(end_v) end function canMine (block) - local tooHigh = block.v2.y > 3 + local tooHigh = block.v2.y > 2 -- we can only mine in a 1-wide strip at a time - local tooWide = block.v2.x > 1 and block.v2.z > 1 + local tooWide = block.v2.x > 0 and block.v2.z > 0 return not (tooHigh or tooWide) end @@ -272,7 +273,7 @@ end function split (block) local tooHigh = function (block) - return block.v2.y > 3 + return block.v2.y > 2 end block = block:orient(getCurrentPos()) if tooHigh(block) then @@ -283,12 +284,10 @@ function split (block) end function process (stack, starting_point) - -- START code taken from `mine` -- fuel and go to starting point refuelUntil(FUEL_RESERVE) mode.mine = { forward = true } moveAbs(starting_point) - -- END -- TODO if #stack == 0 then return nil end local working = table.remove(stack):orient(getCurrentPos()) @@ -323,7 +322,7 @@ function calculateBlock (v1, v2) normalize("y", v1.y, v2.y) normalize("z", v1.z, v2.z) return new_block( - vector.new(block.x, block.y, block.z) + vector.new(block.x, block.y, block.z), vector.new(block.xoff, block.yoff, block.zoff) ) end @@ -332,14 +331,16 @@ function run (v1, v2) -- TODO calculate starting_point, the place turtle will move to before -- moving to the first corner of block local block = new_block(v1, v2 - v1) - process({ block }) + local starting_point = V_ZERO + + process({ block }, starting_point) -- return to base dropOffItems(starting_point) turnToFace(FORWARD) end function usage () - print("Usage: mine x1 y1 z1 x2 y2 z2 OR mine x1 y1 z1 OR mine x1 y1 z1 + print("Usage: mine x1 y1 z1 x2 y2 z2 OR mine x1 y1 z1 OR mine x1 y1 z1 \ x2 y2 z2 x_turtle y_turtle z_turtle.") print("Mine from the first set of coordinates to the second in a \ rectangular prism.") @@ -347,9 +348,9 @@ function usage () start of the program.") print("If invoked with only three arguments, act as if they are the last \ three arguments and substitute 0 0 0 for the first three.") - print("If invoked with nine arguments, interpret the first two sets as - world coordinates of the rectangular prism and the third set as - the coordinates of the turtle's starting position, + print("If invoked with nine arguments, interpret the first two sets as \ + world coordinates of the rectangular prism and the third set as \ + the coordinates of the turtle's starting position, \ ASSUMING FACING NORTH.") print("Fuel goes in the top-left slot of the turtle's inventory.") end