"""Jednoduchý základní příklad
- Vytvoříme třídu okno aplikace děděním ze třídy arcade.Window.
- Vtvoříme novou třídu Ball, má atribut jako pozice, barva atd.
- Definujeme novou funkci make_ball, která vytváří instanci míček a vrací ho jako návratovou hodnotu.
- Definujeme novou funkci main, která obsahuje vytvoření instance tříd okno aplikace a voláme případně
  její metodu setup(), nakonec zavoláme hlavní smyčku programu app.run()
- Funkci (správně metodu) main voláme při startu programu
- Jsou ošetřeny události jako on_draw, on_mouse_motion, on_mouse_click atd.
"""

import arcade
import random

# # definuji konstanty, je to praktické
SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 600
SCREEN_TITLE = "Nadpis v liště okna"

class Ball: # nová třída Ball
    
    def __init__(self):
        self.x = 0 # definujeme atributy míčku
        self.y = 0
        self.change_x = 0
        self.change_y = 0
        self.color = None # nebo konstanty barev - arcade.color.blue
        self.size = 0
        
def make_ball():
    micek = Ball()  # vytvořím instanci
    micek.size = random.randrange(10,30)  #náhodná velikost míčku
    micek.x = random.randrange(micek.size,SCREEN_WIDTH-micek.size) # pozice
    micek.y = random.randrange(micek.size,SCREEN_HEIGHT-micek.size)
    micek.change_x = random.randrange(-2,3)  # změna/čas = rychlost
    micek.change_y = random.randrange(-2,3)
    micek.color = (random.randrange(256),random.randrange(256),random.randrange(256))  # náhodná RGB
    return micek

class MyGame(arcade.Window):  # vytvoříme třídu zděděním třídy Window

    def __init__(self):  # inicializátor naší třídy - zavolám init nadřezené třídy a
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) # předám mu argumenty pro vytvoření okna
        self.ball_list = []   # vytvořím prázdný seznam míčků
        ball = make_ball()    # vytvořím míček - návratová hodnota fce
        self.ball_list.append(ball)   # připojím na konec seznamu míčků
    
    def setup(self):   # můžeme volat z progranu - reset hry apod.
        pass    # potom nastavíme seznam spritů, reset score apod.

    def on_draw(self): # vykreslení obrazovky, kód pro vykreslení, 1/60s
        arcade.start_render()  # musí být na začátku
        for mic in self.ball_list:
            arcade.draw_circle_filled(mic.x,mic.y,mic.size,mic.color)# např. vykresli míčky ze seznamu....
            
        #arcade.draw_text("AHOJ", 10, 20, arcade.color.WHITE, 14) # např. text

    def on_update(self, delta_time):  # tady bude logika, např. posun +=1, 
        pass
    
    def on_mouse_motion(self, x, y, dx, dy): # ošetření událostí
        pass

    def on_mouse_press(self, x, y, button, modifiers):   # ošetření událostí
        if button==arcade.MOUSE_BUTTON_LEFT:  # button je int
            micek=make_ball()                 # vytvoříme nový míček
            self.ball_list.append(micek)      # a přidáme do seznamu


def main():   # hlavní fce
    window = MyGame()  # vytvoříme naši instanci MyGame (šlo by i bez)
    window.setup()  # případný reset a nastavení hry nebo nový level
    arcade.run()  # spustí hlavní smyčku prg


if __name__ == "__main__":   # if je to prg, ne modul, volej hlavní fci
    main()