def f(point):
     nfc = shortcuts.net_front_center(env, shortcuts.opponent_player(env))
     angles = [
         min(geometry.degree_to_rad(110), geometry.ray_ray_angle(oh, env.me, point))
         for oh in shortcuts.opponent_field_hockeyists(env)
         if geometry.distance(oh, nfc) > 300
     ]
     ticks_to_reach_point = assessments.ticks_to_reach_point(env, env.me, point)
     if not angles:
         return -ticks_to_reach_point
     return geometry.rad_to_degree(min(angles)) - ticks_to_reach_point / 100
def puck_is_heading_to_my_net(env):
    player = shortcuts.my_player(env)
    pbegin = geometry.Point(
        player.net_front,
        env.game.rink_top
    )
    pend = geometry.Point(
        player.net_front,
        env.game.rink_bottom
    )
    intersection = geometry.ray_interval_intersection_v2(
        env.world.puck,
        geometry.Point(
            env.world.puck.speed_x,
            env.world.puck.speed_y
        ),
        pbegin,
        pend
    )
    if intersection is None:
        return False

    angle = geometry.ray_ray_angle(
        env.world.puck,
        intersection,
        geometry.Point(
            player.net_front,
            env.game.rink_top
        ))

    if abs(geometry.degree_to_rad(90) - angle) < geometry.degree_to_rad(20):
        return False

    if intersection.y < player.net_top:
        return (player.net_top - intersection.y) < 10
    if intersection.y > player.net_bottom:
        return (intersection.y - player.net_bottom) < 10
    return abs(intersection.y - player.net_top) < 50 or abs(intersection.y - player.net_bottom) < 50