add sunflower grid planting / harvesting logic

This commit is contained in:
2026-01-10 01:12:11 -05:00
parent db310c2a19
commit 5a16e7a8a3
3 changed files with 127 additions and 7 deletions

View File

@@ -16,10 +16,94 @@ def move_to(x, y):
# plant_grid will plant a square of the given list of entities. If the water level is below waterBelow,
# Plant a square of the given list of entities.
#
# If the water level is below waterBelow,
# it will water the tile. If requireSoil is true, it will till the tile if it's not soil.
# plantWith - list of entities to plant. The entities will alternate if repeated.
#
# Parameters:
# width (int): The number of columns in the grid.
# height (int): The number of rows in the grid.
# plantWith (list): A list of entities to plant.
# waterBelow (float): The water level below which the tile will be watered.
# requireSoil (bool): If true, the tile will be tilled if it's not soil.
#
# Returns:
# None
#
# Important:
# plant_grid_returns_measurements uses identical logic but has added needed measurement calls. Any logic changes here
# Any changes to this function should be reflected in plant_grid_returns_measurements as well.
def plant_grid(width, height, plantWith, waterBelow, requireSoil):
res = {}
x = get_pos_x()
y = get_pos_y()
gridSize = get_world_size()
if (x + width) > gridSize:
width = gridSize - x
if (y + height) > gridSize:
height = gridSize - y
tracker = 0
others = {East: West, West: East}
sideDir = East
# first pass over, checking if anything can be harvested. if so, harvest.
# then check what type of ground is down, if it's not soil then till.
# then if it's below 75% water and i have some water, give it some.
# then plant a pumpkin.
for row in range(height):
for col in range(width):
if can_harvest():
harvest()
if requireSoil:
if get_ground_type() != Grounds.Soil:
till()
while get_water() < waterBelow:
if not use_item(Items.Water):
break
index = tracker % len(plantWith)
tracker += 1
plant(plantWith[index])
# if it's not the last pass, then move
if col < width - 1:
move(sideDir)
if row < height - 1:
sideDir = others[sideDir]
move(North)
return res
# Plant a square of the given list of entities.
#
# If the water level is below waterBelow,
# it will water the tile. If requireSoil is true, it will till the tile if it's not soil.
# plantWith - list of entities to plant. The entities will alternate if repeated.
#
# Parameters:
# width (int): The number of columns in the grid.
# height (int): The number of rows in the grid.
# plantWith (list): A list of entities to plant.
# waterBelow (float): The water level below which the tile will be watered.
# requireSoil (bool): If true, the tile will be tilled if it's not soil.
#
# Returns:
# None
#
# Important:
# plant_grid uses identical logic but has added needed measurement calls. Any logic changes here
# Any changes to this function should be reflected in plant_grid as well.
def plant_grid_return_measurements(width, height, plantWith, waterBelow, requireSoil):
res = {}
x = get_pos_x()
y = get_pos_y()
@@ -56,6 +140,12 @@ def plant_grid(width, height, plantWith, waterBelow, requireSoil):
tracker += 1
plant(plantWith[index])
measurement = measure()
if measurement not in res:
res[measurement] = []
res[measurement].append((get_pos_x(), get_pos_y()))
# if it's not the last pass, then move
if col < width - 1:
move(sideDir)
@@ -63,4 +153,6 @@ def plant_grid(width, height, plantWith, waterBelow, requireSoil):
if row < height - 1:
sideDir = others[sideDir]
move(North)
move(North)
return res