def setup_geometry(self, env): """ create geoms and transforms for basic agents and landmarks """ # lazy import from multiagent import rendering if getattr(env, "render_dict", None) is not None: return env.render_dict = {} # make geometries and transforms for entity in env.world.entities: name = entity.name geom = rendering.make_circle(entity.size) xform = rendering.Transform() # agent on top, other entity to background alpha = 0.6 if "agent" in name else 0.5 geom.set_color(*entity.color, alpha=alpha) geom.add_attr(xform) env.render_dict[name] = { "geom": geom, "xform": xform, "attach_ent": entity } # VIS: show visual range/receptor field if 'agent' in entity.name and env.show_visual_range: vis_geom = rendering.make_circle(entity.vision_range) vis_geom.set_color(*entity.color, alpha=0.2) vis_xform = rendering.Transform() vis_geom.add_attr(vis_xform) env.render_dict[name+"_vis"] = { "geom": vis_geom, "xform": vis_xform, "attach_ent": entity } # LABEL: display type & numbering prefix = "A" if "agent" in entity.name else "L" idx = int(name.split(" ")[-1]) x = entity.state.p_pos[0] y = entity.state.p_pos[1] label_geom = rendering.Text("{}{}".format(prefix,idx), position=(x,y), font_size=30) label_xform = rendering.Transform() label_geom.add_attr(label_xform) env.render_dict[name+"_label"] = { "geom": label_geom, "xform": label_xform, "attach_ent": entity } # add geoms to viewer for viewer in env.viewers: viewer.geoms = [] for k, d in env.render_dict.items(): viewer.add_geom(d["geom"])
def setup_geometry(self): # lazy import from multiagent import rendering if self.render_dict is not None: return self.render_dict = {} # make geometries and transforms for entity in self.world.entities: name = entity.name geom = rendering.make_circle(entity.size) xform = rendering.Transform() # agent on top, other entity to background alpha = 1.0 if "agent" in name else 0.5 geom.set_color(*entity.color, alpha=alpha) geom.add_attr(xform) self.render_dict[name] = { "geom": geom, "xform": xform, "attach_ent": entity } # LABEL: display type & numbering prefix = "A" if "agent" in entity.name else "L" idx = int(name.split(" ")[-1]) x = entity.state.p_pos[0] y = entity.state.p_pos[1] label_geom = rendering.Text("{}{}".format(prefix, idx), position=(x, y), font_size=30) label_xform = rendering.Transform() label_geom.add_attr(label_xform) self.render_dict[name + "_label"] = { "geom": label_geom, "xform": label_xform, "attach_ent": entity } # add geoms to viewer for viewer in self.viewers: viewer.geoms = [] for k, d in self.render_dict.items(): viewer.add_geom(d["geom"])
def setup_geometry(self, env): """ create geoms and transforms for basic agents and landmarks """ # lazy import from multiagent import rendering if getattr(env, "render_dict", None) is not None: return env.render_dict = {} # make geometries and transforms for entity in env.world.entities: name = entity.name geom = rendering.make_circle(entity.size) xform = rendering.Transform() # agent on top, other entity to background alpha = 0.6 if "agent" in name else 0.5 geom.set_color(*entity.color, alpha=alpha) geom.add_attr(xform) env.render_dict[name] = { "geom": geom, "xform": xform, "attach_ent": entity } # VIS: show visual range/receptor field if 'agent' in entity.name and env.show_visual_range: vis_geom = rendering.make_circle(entity.vision_range) vis_geom.set_color(*entity.color, alpha=0.2) vis_xform = rendering.Transform() vis_geom.add_attr(vis_xform) env.render_dict[name + "_vis"] = { "geom": vis_geom, "xform": vis_xform, "attach_ent": entity } # GOAL: highlight goal entities if "agent" in entity.name and entity.goal_b is not None: for goal in [entity.goal_a, entity.goal_b]: goal_geom = rendering.make_circle(goal.size * 1.5) goal_geom.set_color(*goal.color, alpha=0.2) goal_xform = rendering.Transform() goal_geom.add_attr(goal_xform) env.render_dict[goal.name + "_highlight"] = { "geom": goal_geom, "xform": goal_xform, "attach_ent": goal } # LABEL: display comm message if "agent" in entity.name and entity.goal_b is not None: # if "agent" in entity.name and entity.goal_b is None: x = entity.state.p_pos[0] + 50 y = entity.state.p_pos[1] + 50 comm_geom = rendering.Text("_", position=(x, y), font_size=36) comm_xform = rendering.Transform() comm_geom.add_attr(comm_xform) env.render_dict[name + "_comm"] = { "geom": comm_geom, "xform": comm_xform, "attach_ent": entity } # add geoms to viewer for viewer in env.viewers: viewer.geoms = [] for k, d in env.render_dict.items(): viewer.add_geom(d["geom"])