def calc_defend_pos(self): ball = self.bb.ball_global if attackRight(): dest = VecPos(-330, 0, 0) else: dest = VecPos(330, 0, 180) return dest
def tick(self): if self.bb.see_ball: self.lostBallTimer.restart() if self.lostBallTimer.elapsed() > 15: self.gotoGlobal(self.bb.get_default_dest()) if self.got_dest_loose(self.bb.get_default_dest()): self.lostBallTimer.restart() elif self.bb.closest_to_ball() or self.bb.team_lost_ball(): self.ready = False self.strike.tick() else: """ Face ball if see ball, else seek ball Approach close to ball Keep 1m away, don't block attack path """ if self.bb.see_ball: bally = self.bb.ball_global.y ballx = self.bb.ball_global.x rx = self.bb.robot_pos.x ry = self.bb.robot_pos.y dx = rx - ballx dy = ry - bally dist = sqrt(dx * dx + dy * dy) # for attack right case change = False if attackRight(): if ballx > rx or abs(bally - ry) > 150 or dist > 200 or dist < 50: if ry > bally: y = bally + 100 else: y = bally - 100 angle = degree_between(self.bb.robot_pos, self.bb.ball_global) if not self.gotoGlobal(VecPos(ballx + 100, y, angle)): change = True else: if ballx < rx or abs(bally - ry) > 150 or dict > 200 or dist < 50: if ry > bally: y = bally + 100 else: y = bally - 100 angle = degree_between(self.bb.robot_pos, self.bb.ball_global) if not self.gotoGlobal(VecPos(ballx + 100, y, angle)): change = True trackBall.tick() if not change: self.faceBall() else: # to do, max turn cnt, else go back self.seekball.tick() return self.running()
from DecisionMaking.BehaviorTree.Task import Action, Task from DecisionMaking.BehaviorTree.Branch import sequence, parallel from skills.FindBallAroundOnce import FindBallAroundOnce from skills.Attack import Attack from skills.Strike import Strike from utils.VecPos import VecPos from utils.mathutil import get_dis, degree_between, get_magnitude from skills.SeekBall import SeekBall from Blackboard import attackRight from headskills.TrackBall import trackBall from math import fabs, sqrt from Timer import Timer from skills.SeekBall_Fuck import SeekBall_Fuck if attackRight(): KICK_ABAILITY = 240 else: KICK_ABAILITY = 200 class Striker(Action): def init(self): self.strike = Strike() self.seekball = SeekBall() self.ready = False self.lostBallTimer = Timer() self.seekballFuck = SeekBall_Fuck() def tick(self): if self.bb.see_ball: self.lostBallTimer.restart()
def tick(self): #print 'GCPlay' self.trackBall.tick() gc_info = self.bb.GCInfo if gc_info is None or not gc_info.connected: self.playing.tick() else: if gc_info.ourIndirectFreeKick or gc_info.ourDirectFreeKick or gc_info.ourPenaltyKick: if gc_info.state2Freeze: self.trackBall.tick() self.crouch() elif gc_info.state2Ready: self.trackBall.tick() if self.bb.closest_to_ball(): ball = self.bb.ball_global if attackRight(): self.gotoGlobal(VecPos(ball.x - 80, ball.y, 0)) else: self.gotoGlobal(VecPos(ball.x + 80, ball.y, 0)) elif gc_info.enemyIndirectFreeKick or gc_info.enemyDirectFreeKick or gc_info.enemyPenaltyKick: self.enemy_freekick = True self.freeKickTimer.restart() self.lastFreeKickBallPos = self.bb.ball_global if gc_info.state2Freeze: self.crouch() elif gc_info.state2Ready: if self.bb.closest_to_ball(): ball = self.bb.ball_global if attackRight(): self.gotoGlobal(VecPos(ball.x - 50, ball.y, 0)) else: self.gotoGlobal(VecPos(ball.x + 50, ball.y, 0)) else: self.playing.tick() elif self.enemy_freekick: if self.bb.closest_to_ball(): if not self.freeKickTimer.finished(): # print self.freeKickTimer.elapsed() ball_now = self.bb.ball_global diff = (ball_now - self.lastFreeKickBallPos).length() # print diff if diff < 20: self.crouch() self.gazeBall() else: self.playing.tick() else: self.enemy_freekick = False else: self.enemy_freekick = False else: if gc_info.state is GCInfo.INITIAL: self.cur_state = self.initial elif gc_info.state is GCInfo.READY: self.cur_state = self.ready elif gc_info.state is GCInfo.SET: self.cur_state = self.set elif gc_info.state is GCInfo.PLAYING: self.cur_state = self.playing elif gc_info.state is GCInfo.FINISHED: self.cur_state = self.finished else: self.cur_state = self.playing if gc_info.state != self.last_state: if self.cur_state: self.cur_state.fresh() if self.cur_state: self.cur_state.tick() self.last_state = gc_info.state