def new_point(self, x, y) -> Point:
     angels = self.get_angels(self.enemy)
     radius = 100
     if not self.validate_near_drone(radius, x, y):
         x += random.choice([-radius, radius])
         y += random.choice([-radius * 2, radius * 2])
     if self.validate_point(x, y):
         point = Point(
             round(
                 int(x +
                     Vector.to_radian(angels[self.drones.index(self)]))),
             round(
                 int(y +
                     Vector.to_radian(angels[self.drones.index(self)]))),
         )
     else:
         point = self.pursue()
     return point
 def determine_point_to_shoot_from_vector(self,
                                          e_coord,
                                          e_vector,
                                          speed_drone=1,
                                          speed_shoot=2):
     time_to_e = self.drone.get_distance_from_points(
         self.drone.point, e_coord) / speed_shoot
     e_dist_while_shooting = time_to_e * speed_drone
     e_angle = Vector.to_radian(e_vector.direction)
     meeting_point_x = e_dist_while_shooting * math.cos(e_angle)
     meeting_point_y = e_dist_while_shooting * math.sin(e_angle)
     meeting_point = Point(e_coord.x + meeting_point_x,
                           e_coord.y + meeting_point_y)
     return meeting_point
 def get_near_point(self,
                    point,
                    distance=80,
                    delta_angle=60,
                    x_distance=0.0,
                    start_point=None):
     if start_point is None:
         start_point = self.coord
     vector_between_points = Vector.from_points(start_point, point)
     angle_to_point = vector_between_points.direction
     if x_distance != 0:
         distance = vector_between_points.module * x_distance
         delta_angle = 0
     new_angle_grad = angle_to_point + delta_angle
     new_angle = Vector.to_radian(int(new_angle_grad))
     new_x = start_point.x + distance * math.cos(new_angle)
     new_y = start_point.y + distance * math.sin(new_angle)
     new_point = Point(new_x, new_y)
     return new_point