def goalieSpinToPosition(player):
    nav = player.brain.nav
    if helper.useFarPosition(player):
        player.brain.tracker.activeLoc()
    else:
        player.brain.tracker.trackBall()

    if not nav.atHeading(NogginConstants.OPP_GOAL_HEADING):
        spinDir = MyMath.getSpinDir(player.brain.my.h,
                                    NogginConstants.OPP_GOAL_HEADING)
        player.setSpeed(0, 0, spinDir*10)
        return player.stay()
    else:
        player.stopWalking()
        return player.goLater('goaliePosition')

    return player.stay()
def goaliePositionBallClose(player):

    nav = player.brain.nav
    player.brain.tracker.trackBall()

    #if not nav.atHeading(NogginConstants.OPP_GOAL_HEADING):
    #    return player.goLater('goalieSpinToPosition')
    if helper.useLeftStrafeCloseSpeed(player):
        helper.strafeLeftSpeed(player)
    elif helper.useRightStrafeCloseSpeed(player):
        helper.strafeRightSpeed(player)
    else:
        player.stopWalking()

    #switch out if we lose the ball for multiple frames
    if helper.useFarPosition(player):
        return player.goNow('goaliePositionBallFar')

    return player.stay()
def goalieOutOfPosition(player):
    nav = player.brain.nav
    if helper.useFarPosition(player):
        player.brain.tracker.activeLoc()
    else:
        player.brain.tracker.trackBall()

    position = player.brain.play.getPosition()
    if player.firstFrame() or\
            nav.destX != position[0] or nav.destY != position[1]:
        nav.omniGoTo(position)

    if helper.useClosePosition(player):
        return player.goLater('goaliePositionBallClose')
    if nav.isStopped() and player.counter > 0:
        player.framesFromCenter = 0
        player.stepOffCenter = 0
        return player.goLater('goaliePosition')

    return player.stay()