def approachBall(player): """ Once we are aligned with the ball, approach it """ # Switch to other states if we should if player.penaltyKicking and \ player.brain.ball.inOppGoalBox(): return player.goNow('penaltyBallInOppGoalbox') elif player.brain.tracker.activeLocOn: if transitions.shouldScanFindBallActiveLoc(player): return player.goLater('scanFindBall') elif transitions.shouldScanFindBall(player): return player.goLater('scanFindBall') elif player.brain.play.isRole(GOALIE) and goalTran.dangerousBall(player): return player.goNow('approachDangerousBall') elif transitions.shouldDribble(player): return player.goNow('dribble') elif transitions.shouldSpinToBallClose(player): return player.goNow('spinToBallClose') elif transitions.shouldStopBeforeKick(player): return player.goNow('stopBeforeKick') elif transitions.shouldPositionForKick(player): return player.goNow('decideKick') if player.firstFrame(): player.brain.nav.chaseBall() player.hasAlignedOnce = False player.brain.tracker.trackBall() return player.stay()
def penaltyKickShortDribble(player): """ Acts as a layer above dribble for penalty shots. """ if player.firstFrame(): player.penaltyMadeFirstKick = True if transitions.shouldStopPenaltyKickDribbling(player): if transitions.shouldStopBeforeKick(player): return player.goLater("chase") elif transitions.shouldPositionForKick(player): return player.goLater("positionForKick") elif transitions.shouldChaseBall(player): return player.goLater("chase") return player.goLater("dribble")
def goalieChase(player): """ TODO: make goalie more aggressive (different transitions?) """ # Check in order of importance if transitions.shouldScanFindBall(player): return player.goNow('scanFindBall') elif transitions.shouldSpinToBallClose(player): return player.goNow('spinToBallClose') elif transitions.shouldStopBeforeKick(player): return player.goNow('stopBeforeKick') elif transitions.shouldPositionForKick(player): return player.goNow('decideKick') elif transitions.shouldApproachBall(player): return player.goNow('approachBall') else: return player.goNow('scanFindBall')
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()
def chase(player): """ Super State to determine what to do from various situations """ player.isChasing = True player.hasAlignedOnce = False if player.brain.play.isRole(GOALIE): return player.goNow('goalieChase') # Check in order of importance if transitions.shouldScanFindBall(player): return player.goNow('scanFindBall') elif transitions.shouldStopBeforeKick(player): return player.goNow('stopBeforeKick') elif transitions.shouldPositionForKick(player): return player.goNow('decideKick') elif transitions.shouldApproachBall(player): return player.goNow('approachBall') else: return player.goNow('scanFindBall')
def goalieChase(player): """ TODO: make goalie more aggressive (different transitions?) """ # Check in order of importance #tells the goalie what state its in if player.firstFrame(): player.isChasing = True player.isPositioning = False player.isSaving = False if transitions.shouldScanFindBall(player): return player.goNow('scanFindBall') elif transitions.shouldSpinToBallClose(player): return player.goNow('spinToBallClose') elif transitions.shouldStopBeforeKick(player): return player.goNow('stopBeforeKick') elif transitions.shouldPositionForKick(player): return player.goNow('decideKick') elif transitions.shouldApproachBall(player): return player.goNow('approachBall') else: return player.goNow('scanFindBall')