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)
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)
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)
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, 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)
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)
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)