def waitBeforeKick(player): """ Stop before we kick to make sure we want to kick """ player.inKickingState = True if player.firstFrame(): player.brain.CoA.setRobotGait(player.brain.motion) player.stopWalking() if not player.brain.nav.isStopped(): return player.stay() if transitions.shouldKick(player): return player.goLater('getKickInfo') elif transitions.shouldApproachForKick(player): player.brain.tracker.trackBall() player.inKickingState = False return player.goLater('approachBall') elif transitions.shouldScanFindBall(player): player.inKickingState = False player.brain.tracker.trackBall() return player.goLater('scanFindBall') elif transitions.shouldRepositionForKick(player): player.brain.tracker.trackBall() return player.goLater('positionForKick') # Just don't get stuck here! if player.counter > 50: return player.goNow('scanFindBall') return player.stay()
def waitBeforeKick(player): """ Stop before we kick to make sure we want to kick """ player.inKickingState = True if player.firstFrame(): player.brain.CoA.setRobotGait(player.brain.motion) player.stopWalking() if not player.brain.nav.isStopped(): return player.stay() if transitions.shouldKick(player): return player.goLater('getKickInfo') elif transitions.shouldApproachForKick(player): player.brain.tracker.trackBall() player.inKickingState = False return player.goLater('approachBall') elif transitions.shouldScanFindBall(player): player.inKickingState = False player.brain.tracker.trackBall() return player.goLater('scanFindBall') elif transitions.shouldRepositionForKick(player): player.brain.tracker.trackBall() return player.goLater('positionForKick') # Just don't get stuck here! if player.counter > 50: return player.goNow('scanFindBall') return player.stay()
def positionForKick(player): """ State to align on the ball once we are near it """ if player.firstFrame(): player.brain.CoA.setRobotSlowGait(player.brain.motion) ball = player.brain.ball player.inKickingState = True # Leave this state if necessary if transitions.shouldKick(player): player.brain.CoA.setRobotGait(player.brain.motion) return player.goNow('waitBeforeKick') elif transitions.shouldScanFindBall(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('scanFindBall') elif transitions.shouldTurnToBallFromPositionForKick(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('turnToBall') elif transitions.shouldApproachFromPositionForKick(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('approachBall') # Determine approach speed targetY = ball.relY sY = MyMath.clip(targetY * constants.PFK_Y_GAIN, constants.PFK_MIN_Y_SPEED, constants.PFK_MAX_Y_SPEED) sY = max(constants.PFK_MIN_Y_MAGNITUDE,sY) * MyMath.sign(sY) if transitions.shouldApproachForKick(player): targetX = (ball.relX - (constants.BALL_KICK_LEFT_X_CLOSE + constants.BALL_KICK_LEFT_X_FAR) / 2.0) sX = MyMath.clip(ball.relX * constants.PFK_X_GAIN, constants.PFK_MIN_X_SPEED, constants.PFK_MAX_X_SPEED) else: sX = 0.0 if ball.on: player.setSpeed(sX,sY,0) return player.stay()
def positionForKick(player): """ State to align on the ball once we are near it """ if player.firstFrame(): player.brain.CoA.setRobotSlowGait(player.brain.motion) ball = player.brain.ball player.inKickingState = True # Leave this state if necessary if transitions.shouldKick(player): player.brain.CoA.setRobotGait(player.brain.motion) return player.goNow('waitBeforeKick') elif transitions.shouldScanFindBall(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('scanFindBall') elif transitions.shouldTurnToBallFromPositionForKick(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('turnToBall') elif transitions.shouldApproachFromPositionForKick(player): player.inKickingState = False player.brain.CoA.setRobotGait(player.brain.motion) return player.goLater('approachBall') # Determine approach speed targetY = ball.relY sY = MyMath.clip(targetY * constants.PFK_Y_GAIN, constants.PFK_MIN_Y_SPEED, constants.PFK_MAX_Y_SPEED) sY = max(constants.PFK_MIN_Y_MAGNITUDE, sY) * MyMath.sign(sY) if transitions.shouldApproachForKick(player): # targetX = (ball.relX - # (constants.BALL_KICK_LEFT_X_CLOSE + # constants.BALL_KICK_LEFT_X_FAR) / 2.0) sX = MyMath.clip(ball.relX * constants.PFK_X_GAIN, constants.PFK_MIN_X_SPEED, constants.PFK_MAX_X_SPEED) else: sX = 0.0 if ball.on: player.setWalk(sX, sY, 0) return player.stay()