Improve searching for crops
This commit is contained in:
+29
-46
@@ -133,49 +133,32 @@ def search_2d(distance=0):
|
||||
visited.add(cur)
|
||||
yield cur
|
||||
|
||||
def search_3d(distance=0, y_limit=0):
|
||||
def get_neighbors(x,y,z):
|
||||
return [
|
||||
(x+1, y+1, z+0),
|
||||
(x+1, y-1, z+0),
|
||||
(x+1, y+1, z+1),
|
||||
(x+1, y+0, z+1),
|
||||
(x+1, y-1, z+1),
|
||||
(x+1, y+1, z-1),
|
||||
(x+1, y+0, z-1),
|
||||
(x+1, y-1, z-1),
|
||||
(x+1, y+0, z+0),
|
||||
(x+0, y+1, z+0),
|
||||
(x+0, y-1, z+0),
|
||||
(x+0, y+1, z+1),
|
||||
(x+0, y+0, z+1),
|
||||
(x+0, y-1, z+1),
|
||||
(x+0, y+1, z-1),
|
||||
(x+0, y+0, z-1),
|
||||
(x+0, y-1, z-1),
|
||||
(x-1, y+1, z+0),
|
||||
(x-1, y-1, z+0),
|
||||
(x-1, y+1, z+1),
|
||||
(x-1, y+0, z+1),
|
||||
(x-1, y-1, z+1),
|
||||
(x-1, y+1, z-1),
|
||||
(x-1, y+0, z-1),
|
||||
(x-1, y-1, z-1),
|
||||
(x-1, y+0, z+0),
|
||||
]
|
||||
|
||||
to_visit = collections.deque([(0, 0, 0)])
|
||||
visited = set()
|
||||
|
||||
while to_visit:
|
||||
cur = to_visit.pop()
|
||||
if cur in visited:
|
||||
continue
|
||||
if y_limit and abs(cur[1]) > y_limit:
|
||||
continue
|
||||
if distance and hypot(*cur) > distance:
|
||||
continue
|
||||
for neighbor in get_neighbors(*cur):
|
||||
to_visit.appendleft(neighbor)
|
||||
visited.add(cur)
|
||||
yield cur
|
||||
def get_neighbors_3d(x,y,z):
|
||||
return [
|
||||
#(x+1, y+1, z+0),
|
||||
#(x+1, y-1, z+0),
|
||||
#(x+1, y+1, z+1),
|
||||
#(x+1, y+0, z+1),
|
||||
#(x+1, y-1, z+1),
|
||||
#(x+1, y+1, z-1),
|
||||
#(x+1, y+0, z-1),
|
||||
#(x+1, y-1, z-1),
|
||||
(x+1, y+0, z+0),
|
||||
(x+0, y+1, z+0),
|
||||
(x+0, y-1, z+0),
|
||||
#(x+0, y+1, z+1),
|
||||
(x+0, y+0, z+1),
|
||||
#(x+0, y-1, z+1),
|
||||
#(x+0, y+1, z-1),
|
||||
(x+0, y+0, z-1),
|
||||
#(x+0, y-1, z-1),
|
||||
#(x-1, y+1, z+0),
|
||||
#(x-1, y-1, z+0),
|
||||
#(x-1, y+1, z+1),
|
||||
#(x-1, y+0, z+1),
|
||||
#(x-1, y-1, z+1),
|
||||
#(x-1, y+1, z-1),
|
||||
#(x-1, y+0, z-1),
|
||||
#(x-1, y-1, z-1),
|
||||
(x-1, y+0, z+0),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user