def reset(self):
        """
        Generate an accident scene or construction scene on block
        :return: None
        """
        self.accident_lanes = []
        engine = get_engine()
        accident_prob = self.accident_prob
        if abs(accident_prob - 0.0) < 1e-2:
            return
        for block in engine.current_map.blocks:
            if type(block) not in [Straight, Curve, InRampOnStraight, OutRampOnStraight]:
                # blocks with exists do not generate accident scene
                continue
            if self.np_random.rand() > accident_prob:
                # prob filter
                continue

            road_1 = Road(block.pre_block_socket.positive_road.end_node, block.road_node(0, 0))
            road_2 = Road(block.road_node(0, 0), block.road_node(0, 1)) if not isinstance(block, Straight) else None

            if self.np_random.rand() > self.PROHIBIT_SCENE_PROB:
                accident_road = self.np_random.choice([road_1, road_2]) if not isinstance(block, Curve) else road_2
                accident_road = road_1 if accident_road is None else accident_road
                is_ramp = isinstance(block, InRampOnStraight) or isinstance(block, OutRampOnStraight)
                on_left = True if self.np_random.rand() > 0.5 or (accident_road is road_2 and is_ramp) else False
                accident_lane_idx = 0 if on_left else -1
                lane = accident_road.get_lanes(engine.current_map.road_network)[accident_lane_idx]
                longitude = lane.length - self.ACCIDENT_AREA_LEN - 5

                lateral_len = engine.current_map.config[engine.current_map.LANE_WIDTH]

                lane = engine.current_map.road_network.get_lane(accident_road.lane_index(accident_lane_idx))
                self.accident_lanes.append(accident_road.get_lanes(engine.current_map.road_network)[accident_lane_idx])
                self.prohibit_scene(lane, longitude, lateral_len, on_left)
            else:
                accident_road = self.np_random.choice([road_1, road_2])
                accident_road = road_1 if accident_road is None else accident_road
                is_ramp = isinstance(block, InRampOnStraight) or isinstance(block, OutRampOnStraight)
                on_left = True if self.np_random.rand() > 0.5 or (accident_road is road_2 and is_ramp) else False
                lanes = accident_road.get_lanes(engine.current_map.road_network)
                if len(lanes) - 1 == 0:
                    accident_lane_idx = -1
                else:
                    accident_lane_idx = self.np_random.randint(0, len(lanes) - 1) if on_left else -1
                lane = lanes[accident_lane_idx]
                self.accident_lanes.append(accident_road.get_lanes(engine.current_map.road_network)[accident_lane_idx])
                longitude = self.np_random.rand() * lane.length / 2 + lane.length / 2
                if self.np_random.rand() > 0.5:
                    self.break_down_scene(lane, longitude)
                else:
                    self.barrier_scene(lane, longitude)

        Generate an accident scene or construction scene on block
        :return: None
        
metadrive/manager/object_manager.py