def drive_to_ball(self):

		self.i = 0

		while self.referee_module.game_status():
			coordinates = self.get_coordinates.get_coordinates()
			ball_coordinates = coordinates["ball"]
			self.mainboard_controller.ping()
			self.mainboard_controller.start_dribbler()  # just in case the dribbler did not start

			if ball_coordinates != -1 or self.mainboard_controller.has_ball():

				if self.mainboard_controller.has_ball():
					print("has ball")
					self.drive_controller.stop()
					self.to_goal.turns_searching = 0
					self.to_goal.turn()
					continue

				yellow_coordinates = coordinates["yellow"]
				blue_coordinates = coordinates["blue"]
				print(blue_coordinates)
				if blue_coordinates != -1:
					print(blue_coordinates[2])

				if (yellow_coordinates != -1 and yellow_coordinates[2] > 400) or (blue_coordinates != -1 and blue_coordinates[2] > 400):
					print("goal too close!")
					self.drive_controller.stop()
					self.turn_around()

				black_coordinates = coordinates["black"]

				if black_coordinates != -1 and black_coordinates[3] > 400 and black_coordinates[2] > 400:
					print("darkness ahead")

				if self.i > 5:
					self.drive_controller.stop()

				self.drive_controller.drive(ball_coordinates)
				self.i = 0

			else:
				# to avoid cases when just losing the blob for one frame
				self.i += 1
				if self.i > 3:
					self.drive_controller.circle()

				if self.i > 15:
					drive_to_goal(self.get_coordinates, self.drive_controller, self.mainboard_controller)
    def turn(self):

        goal_coordinates = self.get_goal_coordinates()

        while goal_coordinates == -1 and self.referee_module.game_status() and self.mainboard_controller.has_ball():
            self.mainboard_controller.ping()
            self.turns_searching += 1
            self.drive_controller.around_ball(-5)
            goal_coordinates = self.get_goal_coordinates()

            # it cannot find gate (might be in the corner)
            if self.turns_searching > 15:
                drive_to_goal(self.get_coordinates, self.drive_controller, self.mainboard_controller)

        self.drive_controller.stop()

        in_this = 0
        while self.referee_module.game_status() and self.mainboard_controller.has_ball():
            self.mainboard_controller.ping()
            in_this += 1
            goal_coordinates = self.get_goal_coordinates()

            if goal_coordinates == -1:
                if in_this < 2:
                    continue
                self.turn()
                break

            if in_this > 5:  # searching for the gate too long already
                print("Searched for too long")
                self.kick()

            opponent_x = goal_coordinates[0]
            width = goal_coordinates[2]

            if opponent_x < 350 - width / 4:
                self.drive_controller.around_ball(2)
            elif opponent_x > 350 + width / 4:
                self.drive_controller.around_ball(-2)
            else:  # facing goal
                print("facing!")
                self.drive_controller.stop()
                self.kick()
                break