in mae_envs/modules/food.py [0:0]
def build_world_step(self, env, floor, floor_size):
env.metadata['food_size'] = self.food_size
self.curr_n_food = env._random_state.randint(self.n_food[0], self.n_food[1] + 1)
env.metadata['max_n_food'] = self.n_food[1]
env.metadata['curr_n_food'] = self.curr_n_food
successful_placement = True
for i in range(self.curr_n_food):
env.metadata.pop(f"food{i}_initpos", None)
# Add food sites
for i in range(self.curr_n_food):
if self.placement_fn is not None:
_placement_fn = (self.placement_fn[i]
if isinstance(self.placement_fn, list)
else self.placement_fn)
pos, pos_grid = rejection_placement(env, _placement_fn, floor_size,
np.array([self.food_size, self.food_size]))
if pos is not None:
floor.mark(f"food{i}", relative_xyz=np.append(pos, [self.food_size / 2]),
size=(self.food_size, self.food_size, self.food_size),
rgba=(0., 1., 0., 1.))
# store spawn position in metadata. This allows sampling subsequent food items
# close to previous food items
env.metadata[f"food{i}_initpos"] = pos_grid
else:
successful_placement = False
else:
floor.mark(f"food{i}", rgba=(0., 1., 0., 1.),
size=(self.food_size, self.food_size, self.food_size))
return successful_placement