Exemple #1
0
    def perform(self, comms):
        goal = self.world.our_goal
        robots = filter(lambda r: not r.is_missing(), self.world.their_robots)
        robots.sort(key=lambda r: math.hypot(r.x - goal.x, r.y - goal.y))
        if len(robots) == 0:
            logging.error("There is no enemy here. Gimme someone to destroy!")
            return 1
        robot = robots[0]
        cone_upper = math.atan2(goal.x - robot.x, goal.higher_post - robot.y) % (2 * pi)
        cone_lower = math.atan2(goal.x - robot.x, goal.lower_post - robot.y) % (2 * pi)
        if robot.angle < min(cone_upper, cone_lower) or robot.angle > max(cone_upper, cone_lower):
            critical_angle = (cone_upper + cone_lower) / 2
        else:
            critical_angle = robot.angle

        target_rotation = (critical_angle - self.robot.angle + pi / 2) % pi - pi / 2
        if (critical_angle - self.robot.angle + pi / 2) % pi - pi / 2 <= 0.6:
            target_rotation = 0
        dist = utils.defender_get_alignment_offset(self.robot, robot, critical_angle, target_rotation)
        logging.info("Aligning with enemy. (Rotate %f degrees, move %f right)", math.degrees(target_rotation), dist)
        if abs(dist) > MOVEMENT_THRESHOLD and abs(target_rotation) > ROTATION_THRESHOLD:
            comms.turn_then_move(target_rotation, dist)
            return utils.defender_turn_delay(target_rotation) + utils.defender_move_delay(dist)
        elif abs(dist) > MOVEMENT_THRESHOLD:
            comms.move(dist)
            return utils.defender_move_delay(dist)
        elif abs(target_rotation) > ROTATION_THRESHOLD:
            comms.turn(target_rotation)
            return utils.defender_turn_delay(target_rotation)
Exemple #2
0
 def perform(self, comms):
     target_rotation = (self.world.ball.angle - self.robot.angle + pi / 2) % pi - pi / 2
     dist = utils.defender_get_alignment_offset(self.robot, self.world.ball, self.world.ball.angle, target_rotation)
     logging.info("Aligning with ball. (Rotate %f degrees, move %f right)", math.degrees(target_rotation), dist)
     if abs(dist) > MOVEMENT_THRESHOLD:
         comms.turn_then_move(target_rotation, dist)
         return utils.defender_turn_delay(target_rotation) + utils.defender_move_delay(dist)
     else:
         comms.turn(target_rotation)
         return utils.defender_turn_delay(target_rotation)
Exemple #3
0
 def perform(self, comms):
     rot_angle = utils.defender_get_rotation_to_catch_point(
         Vector(self.robot.x, self.robot.y, self.robot.angle, 0),
         utils.get_defence_point(self.world), 0)[0]
     logging.info("Facing direction to move to defence area. Rotating %f degrees.", math.degrees(rot_angle))
     comms.turn(rot_angle)
     return utils.defender_turn_delay(rot_angle)
    def perform(self, comms):
        x = self.world.ball.x
        y = self.world.ball.y
        angle = utils.get_rotation_to_point(self.robot.vector, Vector(x, y, 0, 0))
        logging.info("Wants to rotate by: " + str(angle))
        comms.turn(angle)

        return utils.defender_turn_delay(angle)
Exemple #5
0
    def perform(self, comms):
        x = self.world.ball.x
        y = self.world.ball.y
        angle = utils.get_rotation_to_point(self.robot.vector, Vector(x, y, 0, 0))
        logging.info("Wants to rotate by: " + str(angle))
        comms.turn(angle)

        return utils.defender_turn_delay(angle)
Exemple #6
0
 def perform(self, comms):
     target_rotation = utils.defender_scan_angle_to_pass_absolute(
         self.world, self.robot)
     logging.info("Passing ball. (Rotate %f degrees, then kick)",
                  math.degrees(target_rotation))
     comms.turn_then_kick(target_rotation)
     self.robot.catcher = 'OPEN'
     return 1 + utils.defender_turn_delay(target_rotation)
Exemple #7
0
    def perform(self, comms):
        angle, side, defend_point = utils.defender_rotation_to_defend_point(
            self.robot.vector, self.world.ball.vector,
            self.world.our_goal.vector, GOAL_RADIUS, self.world.our_side)

        logging.info("Facing defend point: Rotating %f degrees to %f %f" %
                     (math.degrees(angle), defend_point.x, defend_point.y))
        comms.turn(angle)
        return utils.defender_turn_delay(angle)
Exemple #8
0
 def perform(self, comms):
     if self.world.our_side == 'left':
         target_angle = pi / 2
     else:
         target_angle = 3 * pi / 2
     print target_angle
     rot_angle = (target_angle - self.robot.angle + pi) % (2 * pi) - pi
     logging.info("Facing opposite pitch side. Rotating %f degrees.", math.degrees(rot_angle))
     comms.turn(rot_angle)
     return utils.defender_turn_delay(rot_angle)
    def perform(self, comms):
        global ROTATION_THRESHOLD
        logging.info('---- ' + str(ROTATION_THRESHOLD))
        x = self.world.ball.x
        y = self.world.ball.y
        angle = utils.defender_get_rotation_to_catch_point(Vector(self.robot.x, self.robot.y, self.robot.angle, 0), Vector(x, y, 0, 0), self.robot.catch_distance)[0]
        logging.info("Wants to rotate by: " + str(angle))

        comms.turn(angle)

        if ROTATION_THRESHOLD < 0.30:
            ROTATION_THRESHOLD += 0.07

        return utils.defender_turn_delay(angle)
Exemple #10
0
    def perform(self, comms):
        logging.info('---- ' + str(ROTATION_THRESHOLD))
        x = self.world.ball.x
        y = self.world.ball.y
        angle = utils.defender_get_rotation_to_catch_point(Vector(self.robot.x, self.robot.y, self.robot.angle, 0), Vector(x, y, 0, 0), self.robot.catch_distance)[0]
        logging.info("Wants to rotate by: " + str(angle))

        comms.turn(angle)

        global ROTATION_THRESHOLD
        if ROTATION_THRESHOLD < 0.30:
            ROTATION_THRESHOLD += 0.07

        return utils.defender_turn_delay(angle)
 def perform(self, comms):
     target_rotation = utils.defender_scan_angle_to_pass_absolute(self.world, self.robot)
     logging.info("Passing ball. (Rotate %f degrees, then kick)", math.degrees(target_rotation))
     comms.turn_then_kick(target_rotation)
     self.robot.catcher = 'OPEN'
     return 1 + utils.defender_turn_delay(target_rotation)
 def perform(self, comms):
     angle = utils.get_rotation_to_point(self.robot.vector, self.world.ball.vector)
     logging.info("Facing ball: Rotating %f" % angle)
     comms.turn(angle)
     return utils.defender_turn_delay(angle)
    def perform(self, comms):
        angle, side, defend_point = utils.defender_rotation_to_defend_point(self.robot.vector, self.world.ball.vector, self.world.our_goal.vector, GOAL_RADIUS, self.world.our_side)

        logging.info("Facing defend point: Rotating %f degrees to %f %f" % (math.degrees(angle), defend_point.x, defend_point.y))
        comms.turn(angle)
        return utils.defender_turn_delay(angle)
Exemple #14
0
 def perform(self, comms):
     angle = utils.get_rotation_to_point(self.robot.vector,
                                         self.world.ball.vector)
     logging.info("Facing ball: Rotating %f" % angle)
     comms.turn(angle)
     return utils.defender_turn_delay(angle)