mine.lua: rewrite checkpoint 4
This commit is contained in:
parent
e4b9438119
commit
91a27e292e
1 changed files with 31 additions and 5 deletions
36
mine.lua
36
mine.lua
|
|
@ -6,6 +6,10 @@ local FUEL_RESERVE = 800
|
||||||
local FUEL_REFUEL_UNIT = 8 -- how many items to refuel with at a time
|
local FUEL_REFUEL_UNIT = 8 -- how many items to refuel with at a time
|
||||||
local FULL_CHECK_SLOT = 14 -- slot to check for "fullness"
|
local FULL_CHECK_SLOT = 14 -- slot to check for "fullness"
|
||||||
|
|
||||||
|
-- what size of a dimension is considered big enough to split into medium-size
|
||||||
|
-- pieces
|
||||||
|
local BIG_DIM = 7
|
||||||
|
|
||||||
local V_ZERO = vector.new(0, 0, 0)
|
local V_ZERO = vector.new(0, 0, 0)
|
||||||
local UNIT_X = vector.new(1, 0, 0)
|
local UNIT_X = vector.new(1, 0, 0)
|
||||||
local UNIT_Y = vector.new(0, 1, 0)
|
local UNIT_Y = vector.new(0, 1, 0)
|
||||||
|
|
@ -69,6 +73,10 @@ local Block = {
|
||||||
vector.new(self.v1.x, self.v1.y, self.v1.z),
|
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,
|
||||||
|
tostring = function (self)
|
||||||
|
-- TODO revisit?
|
||||||
|
return string.format('%s %s', self.v1:tostring(), self.v2:tostring())
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -266,9 +274,27 @@ function splitHorizontal (block)
|
||||||
-- Future work: potentially split a large block into smaller blocks
|
-- Future work: potentially split a large block into smaller blocks
|
||||||
-- based on currentPos (think splitting down the middle instead of
|
-- based on currentPos (think splitting down the middle instead of
|
||||||
-- splitting off of one end)
|
-- splitting off of one end)
|
||||||
-- Future work: decide whether to take a slice off of the x or z direction
|
local bigBlock = function (block)
|
||||||
-- (criteria?)
|
return (block.v2.x >= BIG_DIM) and (block.v2.z >= BIG_DIM)
|
||||||
return block:take(1, "x")
|
end
|
||||||
|
local inMiddleOfBlock = function (block)
|
||||||
|
local middle_of_x = differentSigns(block.v1.x, block.v2.x)
|
||||||
|
local middle_of_z = differentSigns(block.v1.z, block.v2.z)
|
||||||
|
return middle_of_x or middle_of_z
|
||||||
|
end
|
||||||
|
local inMiddleOfBigBlock = function (block)
|
||||||
|
return bigBlock(block) and inMiddleOfBlock(block)
|
||||||
|
end
|
||||||
|
if inMiddleOfBigBlock(block) then
|
||||||
|
-- TODO
|
||||||
|
end
|
||||||
|
-- decide whether to take a slice off of the x or z direction
|
||||||
|
-- (criteria: take the dimension with the smaller length)
|
||||||
|
if block.v2.x <= block.v2.z then
|
||||||
|
return block:take(1, "x")
|
||||||
|
else
|
||||||
|
return block:take(1, "z")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function split (block)
|
function split (block)
|
||||||
|
|
@ -287,10 +313,10 @@ function process (stack, starting_point)
|
||||||
-- fuel and go to starting point
|
-- fuel and go to starting point
|
||||||
refuelUntil(FUEL_RESERVE)
|
refuelUntil(FUEL_RESERVE)
|
||||||
mode.mine = { forward = true }
|
mode.mine = { forward = true }
|
||||||
moveAbs(starting_point)
|
|
||||||
-- TODO
|
-- TODO
|
||||||
if #stack == 0 then return nil end
|
if #stack == 0 then return nil end
|
||||||
local working = table.remove(stack):orient(getCurrentPos())
|
local working = table.remove(stack):orient(getCurrentPos())
|
||||||
|
print("Working:", working:tostring())
|
||||||
if canMine(working) then
|
if canMine(working) then
|
||||||
checkAndDropOff(starting_point)
|
checkAndDropOff(starting_point)
|
||||||
mine(working)
|
mine(working)
|
||||||
|
|
@ -299,7 +325,7 @@ function process (stack, starting_point)
|
||||||
table.insert(stack, remainder)
|
table.insert(stack, remainder)
|
||||||
table.insert(stack, new)
|
table.insert(stack, new)
|
||||||
end
|
end
|
||||||
return process (stack)
|
return process (stack, starting_point)
|
||||||
end
|
end
|
||||||
|
|
||||||
function run (v1, v2)
|
function run (v1, v2)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue