From b05e614130049a87b7c3e3721c5058e1003eab4e Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Fri, 4 Jan 2019 14:06:12 -0500 Subject: [PATCH] superTreefarm: now with more trees --- farms/superTreefarm.lua | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/farms/superTreefarm.lua b/farms/superTreefarm.lua index 9214b50..9b2e8dc 100644 --- a/farms/superTreefarm.lua +++ b/farms/superTreefarm.lua @@ -487,23 +487,23 @@ local function findDroppedSaplings() return sensed end -local function scan(pt, filter) +local function scan(pt, filter, blocks) turtle.pathfind(pt) equip('left', 'plethora:scanner', SCANNER) local raw = peripheral.call('left', 'scan') - local blocks = Util.reduce(raw, function(acc, b) - Point.rotate(b, state.home.heading) - b.x = b.x + turtle.point.x - b.y = b.y + turtle.point.y - b.z = b.z + turtle.point.z - if filter(b) then - acc[makeKey(b)] = b + return Util.reduce(raw, function(acc, b) + if b.y >= 0 then + Point.rotate(b, state.home.heading) + b.x = b.x + turtle.point.x + b.y = b.y + turtle.point.y + b.z = b.z + turtle.point.z + if filter(b) then + acc[makeKey(b)] = b + end end - end, { }) - - return blocks + end, blocks or { }) end local function getPlantLocations(blocks) @@ -588,10 +588,13 @@ local function fell() -- low scan local blocks = scan(HOME_PT, filter) - if not Util.every(blocks, function(b) return b.y < 6 end) then + + local pt = Util.shallowCopy(HOME_PT) + while Util.any(blocks, function(b) return b.y > pt.y + 6 end) do -- tree might be above low scan range, do a scan higher up equip('left', PICKAXE) - blocks = scan(HIGH_PT, filter) + pt.y = pt.y + 8 + blocks = scan(pt, filter, blocks) end Util.merge(blocks, sensed) @@ -616,7 +619,7 @@ local function moreTrees() return end - if not state.chest or turtle.getItemCount(OAK_SAPLING) < 15 then + if not state.chest or turtle.getItemCount(OAK_SAPLING) < 2 then return true end @@ -626,7 +629,7 @@ local function moreTrees() state.trees = { } for x = -2, 2, 1 do - for z = -2, 2, 2 do + for z = -2, 2, 1 do if x ~= 0 or z ~= 0 then local tree = { x = x, y = 0, z = z } table.insert(state.trees, tree) @@ -640,7 +643,10 @@ local function moreTrees() setState('trees', state.trees) Point.eachClosest(turtle.point, state.trees, function(pt) - turtle.placeDownAt(pt, randomSapling()) + local sapling = randomSapling() + if sapling then + turtle.placeDownAt(pt, sapling) + end end) end @@ -675,7 +681,7 @@ local function findHome() y = GRID.TL.y, z = GRID.TL.z, ex = GRID.BR.x, - ey = 16, + ey = 32, ez = GRID.BR.z, })