def positionForKick(player): """ State to align on the ball once we are near it """ if player.firstFrame(): kick = player.brain.kickDecider.getKick() if kick is None: player.angleToOrbit = player.brain.kickDecider.kickInfo.orbitAngle return player.goLater('orbitBall') player.inKickingState = True if transitions.shouldKickNow(player): return player.goLater('kickBallExecute') player.brain.nav.kickPosition(kick) player.brain.tracker.trackBall() # Leave this state if necessary if transitions.shouldStopAndKick(player): return player.goLater('preKickStop') if player.brain.tracker.activeLocOn: if transitions.shouldScanFindBallActiveLoc(player): player.inKickingState = False return player.goLater('scanFindBall') elif transitions.shouldScanFindBallKick(player): player.inKickingState = False return player.goLater('scanFindBall') elif transitions.shouldSpinToKick(player): return player.goLater('spinToKick') if transitions.shouldChaseFromPositionForKick(player): player.inKickingState = False return player.goLater('chase') if not player.brain.play.isRole(GOALIE): if transitions.shouldDribble(player): return player.goLater('dribble') if player.brain.nav.isStopped(): kick = player.brain.kickDecider.getKick() player.brain.nav.kickPosition(kick) return player.stay()
def dribble(player): """ Keep running at the ball, but dribble """ if player.firstFrame(): player.brain.nav.dribble() if transitions.shouldScanFindBallKick(player): return player.goLater('scanFindBall') # if we should stop dribbling, see what else we should do if transitions.shouldStopDribbling(player): # may not be appropriate due to turned out feet... if transitions.shouldStopBeforeKick(player): return player.goLater('stopBeforeKick') if transitions.shouldPositionForKick(player): return player.goLater('decideKick') elif transitions.shouldChaseBall(player): return player.goLater('chase') return player.stay()