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()
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()
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()
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()