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