def orbitBall(player): """ State to orbit the ball """ if player.firstFrame(): player.brain.nav.orbitAngle(player.angleToOrbit) player.brain.tracker.trackBall() if transitions.shouldScanFindBall(player): return player.goLater('scanFindBall') if transitions.shouldChaseFromPositionForKick(player): return player.goLater('chase') elif player.brain.nav.isStopped(): return player.goLater('chase') return player.stay()
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()