Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
    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