def build_world_step()

in mae_envs/modules/walls.py [0:0]


    def build_world_step(self, env, floor, floor_size):
        # Outside walls
        walls = outside_walls(self.grid_size, use_low_wall_height=self.low_outside_walls)
        if self.scenario in ['quadrant', 'var_quadrant']:
            q_size = env._random_state.uniform(0.3, 0.6) if self.scenario == 'var_quadrant' else 0.5
            q_size = int(q_size * self.grid_size)
            env.metadata['quadrant_size'] = q_size
            new_walls = [
                Wall([self.grid_size - q_size, 0], [self.grid_size - q_size, q_size]),
                Wall([self.grid_size - q_size, q_size], [self.grid_size - 1, q_size])]
            if env._random_state.uniform(0, 1) < self.p_door_dropout:
                wall_to_split = env._random_state.randint(0, 2)
                walls += [new_walls[(1 - wall_to_split)]]
                walls_to_split = [new_walls[wall_to_split]]
            else:
                walls_to_split = new_walls
        elif self.scenario == 'half':
            walls_to_split += [Wall([self.grid_size - 1, self.grid_size // 2],
                                    [0, self.grid_size // 2])]
        elif self.scenario == 'var_tri':
            wall1_splitoff_point, wall2_splitoff_point = [
                int(self.grid_size * env._random_state.uniform(0.4, 0.6)) for _ in range(2)
            ]
            wall1_orientation = 'vertical' if env._random_state.uniform() < 0.5 else 'horizontal'
            # if first wall is horizontal, 'left' means below and 'right' means above
            wall2_orientation = 'left' if env._random_state.uniform() < 0.5 else 'right'

            env.metadata['tri_wall_splitoff_points'] = [wall1_splitoff_point, wall2_splitoff_point]
            env.metadata['tri_wall_orientations'] = [wall1_orientation, wall2_orientation]
            if wall1_orientation == 'horizontal':
                walls_to_split = [Wall([self.grid_size - 1, wall1_splitoff_point],
                                       [0, wall1_splitoff_point])]
                if wall2_orientation == 'left':
                    walls_to_split += [Wall([wall2_splitoff_point, wall1_splitoff_point],
                                            [wall2_splitoff_point, 0])]
                    rooms = [[(1, self.grid_size - 1),
                              (wall1_splitoff_point + 1, self.grid_size - 1)],
                             [(1, wall2_splitoff_point - 1),
                              (1, wall1_splitoff_point - 1)],
                             [(wall2_splitoff_point + 1, self.grid_size - 1),
                              (1, wall1_splitoff_point - 1)]]
                elif wall2_orientation == 'right':
                    walls_to_split += [Wall([wall2_splitoff_point, self.grid_size - 1],
                                            [wall2_splitoff_point, wall1_splitoff_point])]
                    rooms = [[(1, self.grid_size - 1),
                              (0, wall1_splitoff_point - 1)],
                             [(1, wall2_splitoff_point - 1),
                              (wall1_splitoff_point + 1, self.grid_size - 1)],
                             [(wall2_splitoff_point + 1, self.grid_size - 1),
                              (wall1_splitoff_point + 1, self.grid_size - 1)]]
            elif wall1_orientation == 'vertical':
                walls_to_split = [Wall([wall1_splitoff_point, self.grid_size - 1],
                                       [wall1_splitoff_point, 0])]
                if wall2_orientation == 'left':
                    walls_to_split += [Wall([wall1_splitoff_point, wall2_splitoff_point],
                                            [0, wall2_splitoff_point])]
                    rooms = [[(wall1_splitoff_point + 1, self.grid_size - 1),
                              (1, self.grid_size - 1)],
                             [(1, wall1_splitoff_point - 1),
                              (1, wall2_splitoff_point - 1)],
                             [(1, wall1_splitoff_point - 1),
                              (wall2_splitoff_point + 1, self.grid_size - 1)]]
                elif wall2_orientation == 'right':
                    walls_to_split += [Wall([self.grid_size - 1, wall2_splitoff_point],
                                            [wall1_splitoff_point, wall2_splitoff_point])]
                    rooms = [[(0, wall1_splitoff_point - 1),
                              (1, self.grid_size - 1)],
                             [(wall1_splitoff_point + 1, self.grid_size - 1),
                              (1, wall2_splitoff_point - 1)],
                             [(wall1_splitoff_point + 1, self.grid_size - 1),
                              (wall2_splitoff_point + 1, self.grid_size - 1)]]
            env.metadata['tri_room_grid_cell_range'] = rooms

            # this is used when we want to consecutively place objects in every room
            # e.g. if we want object i to go in room (i % 3)
            env.metadata['tri_placement_rotation'] = []
        elif self.scenario == 'empty':
            walls_to_split = []

        # Add doors
        new_walls, doors = split_walls(walls_to_split, self.door_size,
                                       random_state=env._random_state)
        walls += new_walls

        env.metadata['doors'] = np.array(doors)

        # Convert doors into mujoco frame
        if len(doors) > 0:
            self.door_obs = construct_door_obs(np.array(doors), floor_size, self.grid_size)
        else:
            self.door_obs = None

        walls_to_mujoco(floor, floor_size, self.grid_size, walls, friction=self.friction)
        add_walls_to_grid(env.placement_grid, walls)
        return True