def move(self):
     distance = ml.distance_to_point(self.rect.center, ml.player.rect.center)
     if distance < self.homing_distance:
         angle = ml.angle_to_point(self.rect.center, ml.player.rect.center)
         self.x, self.y, _ = ml.move_point(self, ml.player.rect.center,
                                           self.homing_speed, angle, 5)
     elif self.moving_from_spawn:
         if self.x == self.target_point[0] and self.y == self.target_point[1]:
             self.moving_from_spawn = False
         else:
             self.x, self.y, _ = ml.move_point(self, self.target_point,
                                               self.from_spawn_speed, 0, 360)
     else:
         self.y += self.falling_speed
    def phase4(self):
        # Scale speed with distance
        # move_speed_scale reduces the effect of distance, causing acceleration sooner
        distance = ml.distance_to_point(self.rect.center,
                                        ml.player.rect.center)
        try:
            self.move_speed = self.move_speed_scale / distance
        except ZeroDivisionError:
            pass
        if self.move_speed > self.max_move_speed:
            self.move_speed = self.max_move_speed
        elif self.move_speed < self.min_move_speed:
            self.move_speed = self.min_move_speed
        # Scale turning_rate with move_speed
        self.base_turning_rate = 4
        self.turning_rate = self.base_turning_rate * \
            (self.min_move_speed / self.move_speed)

        # Drop mines
        self.mine_timer = self.shoot(self.mine_timer, self.mine_bd,
                                     self.mine_fd)

        # Move
        self.move()