def can_goal(env, hockeyist, player):
    if env.world.puck.owner_hockeyist_id != hockeyist.id:
        return False

    speed_abs = shortcuts.puck_speed_abs_after_strike(env, hockeyist)

    puck_after_strike = prediction.UnitShadow(
        env.world.puck.x,
        env.world.puck.y,
        speed_abs * math.cos(hockeyist.angle),
        speed_abs * math.sin(hockeyist.angle)
    )

    return not prediction.goalie_can_save_straight(env, puck=puck_after_strike)
def puck_after_strike(env, hockeyist=None, puck=None):
    if hockeyist is None:
        hockeyist = env.me
    if puck is None:
        puck = env.world.puck

    speed_abs = shortcuts.puck_speed_abs_after_strike(env, hockeyist)

    speed = geometry.adjust_vector(geometry.Point(
        puck.x - hockeyist.x,
        puck.y - hockeyist.y
    ), speed_abs)

    return prediction.UnitShadow(
        puck.x,
        puck.y,
        speed.x,
        speed.y,
        angle=env.world.puck.angle
    )