from kivy.uix.widget import Widget
from kivy.graphics import Color, Ellipse
from kivy.core.window import Window
import pygame

class Joystick(Widget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.joystick_radius = 100
        self.inner_radius = 40
        self.center_pos = (200, 200) # Позиция на экране
        self.current_pos = list(self.center_pos)
        self.active = False
        
        with self.canvas:
            # Внешний круг (граница)
            Color(0.5, 0.5, 0.5, 0.5)
            self.outer_circle = Ellipse(pos=(100, 100), size=(200, 200))
            # Внутренний круг (ручка)
            Color(1, 1, 1, 0.8)
            self.inner_circle = Ellipse(pos=(160, 160), size=(80, 80))

    def on_touch_down(self, touch):
        if self.collide_point(*touch.pos):
            self.active = True
            self.update_joystick(touch.pos)
            return True

    def on_touch_move(self, touch):
        if self.active:
            self.update_joystick(touch.pos)
            return True

    def on_touch_up(self, touch):
        if self.active:
            self.active = False
            self.inner_circle.pos = (160, 160)
            # Сбрасываем нажатия в Pygame
            self.send_pygame_event(None)
            return True

    def update_joystick(self, pos):
        self.current_pos = pos # Добавь эту строку!
        self.inner_circle.pos = (pos[0] - 40, pos[1] - 40)
        self.send_pygame_event(pos)


    def send_pygame_event(self, pos):
        # Здесь мы превращаем координаты тача в события нажатия кнопок Pygame
        if not pos:
            # Отпускаем все кнопки
            pygame.event.post(pygame.event.Event(pygame.KEYUP, {'key': pygame.K_UP}))
            return
        
        # Упрощенная логика: если палец выше центра — жмем "Вверх"
        if pos[1] > self.center_pos[1] + 20:
            pygame.event.post(pygame.event.Event(pygame.KEYDOWN, {'key': pygame.K_UP}))
