Beispiel #1
0
def executeDribble(player):
    """
    Move through the ball, so as to execute a dribble.
    """
    if transitions.ballToOurLeft(player):
        player.kick = kicks.LEFT_DRIBBLE
    else:
        player.kick = kicks.RIGHT_DRIBBLE

    ball = player.brain.ball
    kick_pos = player.kick.getPosition()
    player.kickPose = RelRobotLocation(ball.rel_x - kick_pos[0],
                                       ball.rel_y - kick_pos[1],
                                       0)

    if player.firstFrame():
        player.aboutToRotate = False
        player.ballBeforeDribble = ball
        if player.corner_dribble:
            player.brain.nav.goTo(player.kickPose,
                                  Navigator.PRECISELY,
                                  Navigator.CAREFUL_SPEED,
                                  False,
                                  False)
        else:
            player.brain.nav.goTo(player.kickPose,
                                  Navigator.PRECISELY,
                                  Navigator.GRADUAL_SPEED,
                                  False,
                                  False)
    else:
        player.brain.nav.updateDest(player.kickPose)

    if player.corner_dribble:
        if transitions.ballLost(player) or transitions.ballGotFarAway(player):
            player.corner_dribble = False
            return player.goLater('approachBall')
        elif transitions.dribbleGoneBad(player):
            return player.goNow('positionForDribble')
        elif transitions.centerField(player):
            player.corner_dribble = False
            return player.goLater('approachBall')
    else:
        if transitions.ballLost(player):
            return player.goNow('lookForBall')
        elif not transitions.shouldDribble(player):
            player.inKickingState = False
            return player.goLater('approachBall')
        elif not transitions.centerLaneOpen(player):
            player.aboutToRotate = True # we will go from position to rotate
            return player.goNow('positionForDribble')
        elif transitions.dribbleGoneBad(player):
            return player.goNow('positionForDribble')

    return player.stay()
Beispiel #2
0
def executeDribble(player):
    """
    Move through the ball, so as to execute a dribble.
    """
    if transitions.ballToOurLeft(player):
        player.kick = kicks.LEFT_DRIBBLE
    else:
        player.kick = kicks.RIGHT_DRIBBLE

    ball = player.brain.ball
    kick_pos = player.kick.getPosition()
    player.kickPose = RelRobotLocation(ball.rel_x - kick_pos[0],
                                       ball.rel_y - kick_pos[1], 0)

    if player.firstFrame():
        player.aboutToRotate = False
        player.ballBeforeDribble = ball
        if player.corner_dribble:
            player.brain.nav.goTo(player.kickPose, Navigator.PRECISELY,
                                  Navigator.CAREFUL_SPEED, False, False)
        else:
            player.brain.nav.goTo(player.kickPose, Navigator.PRECISELY,
                                  Navigator.GRADUAL_SPEED, False, False)
    else:
        player.brain.nav.updateDest(player.kickPose)

    if player.corner_dribble:
        if transitions.ballLost(player) or transitions.ballGotFarAway(player):
            player.corner_dribble = False
            return player.goLater('chase')
        elif transitions.dribbleGoneBad(player):
            return player.goNow('positionForDribble')
        elif transitions.centerField(player):
            player.corner_dribble = False
            return player.goLater('chase')
    else:
        if transitions.ballLost(player):
            return player.goNow('lookForBall')
        elif not transitions.shouldDribble(player):
            player.inKickingState = False
            return player.goLater('chase')
        elif not transitions.centerLaneOpen(player):
            player.aboutToRotate = True  # we will go from position to rotate
            return player.goNow('positionForDribble')
        elif transitions.dribbleGoneBad(player):
            return player.goNow('positionForDribble')

    return player.stay()
Beispiel #3
0
def rotateToOpenSpace(player):
    """
    Rotate around ball, so as to find an open lane to dribble thru
    """
    if player.firstFrame():
        rotateToOpenSpace.counter = 0
        if transitions.rotateLeft(player):
            player.setWalk(0, -.7, .25)
        else:
            player.setWalk(0, .7, -.25)

    if transitions.ballLost(player):
        return player.goNow('lookForBall')
    elif not transitions.shouldDribble(player):
        player.inKickingState = False
        player.stand()
        return player.goLater('chase')
    elif rotateToOpenSpace.counter == constants.ROTATE_FC:
        player.stand()
        return player.goLater('decideDribble')
    elif transitions.centerLaneOpen(player):
        rotateToOpenSpace.counter += 1
        return player.stay() # so counter is not reset, see below

    rotateToOpenSpace.counter = 0
    return player.stay()
Beispiel #4
0
def rotateToOpenSpace(player):
    """
    Rotate around ball, so as to find an open lane to dribble thru
    """
    if player.firstFrame():
        rotateToOpenSpace.counter = 0
        if transitions.rotateLeft(player):
            player.setWalk(0, -.7, .25)
        else:
            player.setWalk(0, .7, -.25)

    if transitions.ballLost(player):
        return player.goNow('lookForBall')
    elif not transitions.shouldDribble(player):
        player.inKickingState = False
        player.stand()
        return player.goLater('chase')
    elif rotateToOpenSpace.counter == constants.ROTATE_FC:
        player.stand()
        return player.goLater('decideDribble')
    elif transitions.centerLaneOpen(player):
        rotateToOpenSpace.counter += 1
        return player.stay()  # so counter is not reset, see below

    rotateToOpenSpace.counter = 0
    return player.stay()
Beispiel #5
0
def positionForDribble(player):
    """
    We should position ourselves behind the ball for easy dribbling.
    """
    if transitions.ballToOurLeft(player):
        player.kick = kicks.LEFT_DRIBBLE
    else:
        player.kick = kicks.RIGHT_DRIBBLE

    ball = player.brain.ball
    kick_pos = player.kick.getPosition()
    player.kickPose = RelRobotLocation(ball.rel_x + constants.SETUP_POSITION,
                                       ball.rel_y - kick_pos[1],
                                       0)

    if player.firstFrame():
        player.brain.nav.goTo(player.kickPose,
                              Navigator.GENERAL_AREA,
                              Navigator.MEDIUM_SPEED,
                              False,
                              False)
    else:
        player.brain.nav.updateDest(player.kickPose)

    if player.corner_dribble:
        if transitions.ballLost(player) or transitions.ballGotFarAway(player):
            player.corner_dribble = False
            return player.goLater('approachBall')
        elif transitions.navDone(player):
            return player.goLater('executeDribble')
    else:
        if transitions.ballLost(player):
            return player.goLater('lookForBall')
        elif not transitions.shouldDribble(player):
            player.inKickingState = False
            player.stand()
            return player.goLater('approachBall')
        elif player.aboutToRotate and transitions.navDone(player):
            player.aboutToRotate = False
            return player.goLater('rotateToOpenSpace')
        elif transitions.navDone(player):
            return player.goLater('decideDribble')

    return player.stay()
Beispiel #6
0
def positionForDribble(player):
    """
    We should position ourselves behind the ball for easy dribbling.
    """
    if transitions.ballToOurLeft(player):
        player.kick = kicks.LEFT_DRIBBLE
    else:
        player.kick = kicks.RIGHT_DRIBBLE

    ball = player.brain.ball
    kick_pos = player.kick.getPosition()
    player.kickPose = RelRobotLocation(ball.rel_x + constants.SETUP_POSITION,
                                       ball.rel_y - kick_pos[1], 0)

    if player.firstFrame():
        player.brain.nav.goTo(player.kickPose, Navigator.GENERAL_AREA,
                              Navigator.MEDIUM_SPEED, False, False)
    else:
        player.brain.nav.updateDest(player.kickPose)

    if player.corner_dribble:
        if transitions.ballLost(player) or transitions.ballGotFarAway(player):
            player.corner_dribble = False
            return player.goLater('chase')
        elif transitions.navDone(player):
            return player.goLater('executeDribble')
    else:
        if transitions.ballLost(player):
            return player.goLater('lookForBall')
        elif not transitions.shouldDribble(player):
            player.inKickingState = False
            player.stand()
            return player.goLater('chase')
        elif player.aboutToRotate and transitions.navDone(player):
            player.aboutToRotate = False
            return player.goLater('rotateToOpenSpace')
        elif transitions.navDone(player):
            return player.goLater('decideDribble')

    return player.stay()