def build_random_shape(agent, rand_range=(10, 0, 10), no_chat=False): """Pick a random shape from shapes.py and build that""" target_loc = agent.pos for i in range(3): target_loc[i] += np.random.randint(-rand_range[i], rand_range[i] + 1) shape = random.choice(sh.SHAPE_NAMES) opts = sh.SHAPE_HELPERS[shape]() opts["bid"] = sh.bid() schematic = sh.SHAPE_FNS[shape](**opts) relations = [ {"pred": "has_name", "obj": shape.lower()}, {"pred": "has_tag", "obj": shape.lower()}, ] task_data = { "blocks_list": schematic, "origin": target_loc, "verbose": False, "schematic_tags": relations, "default_behavior": "build_random_shape", # must == function name. Hacky and I hate it. } logging.info("Default behavior: building {}".format(shape)) agent.memory.task_stack_push(tasks.Build(agent, task_data)) if not no_chat: shape_name = prepend_a_an(shape.lower()) agent.dialogue_manager.dialogue_stack.append_new( Say, "I am building {} while you decide what you what me to do!".format(shape_name) ) return schematic
def get_schematic(): shape_name = random.choice(sh.SHAPE_NAMES) opts = sh.SHAPE_HELPERS[shape_name]() opts["bid"] = sh.bid() blocks = sh.SHAPE_FNS[shape_name](**opts) if len(blocks) == 0: import ipdb ipdb.set_trace() return blocks