from tkinter import *
from canvasball2 import CanvasBall
import time

# Denna lösning har två skillnader jämfört med ballworld.py
#
# 1. Bollen flyttas istället för att övertäckas och ritas ut på nytt.
#
# 2. Flera bollar
#

class BallWorld (object):
    # parametrar för flera bollar
    ballParams = [[100, 100, 18,  2, 4],
                  [ 50,  50, 25, 12, 4]]

    width = 500
    height = 400
    
    def __init__ (self):
        self.root = Tk ()
        self.canvas = Canvas (self.root,
                              bg = 'black',
                              width = BallWorld.width,
                              height = BallWorld.height)
        self.canvas.pack ()
        button = Button (self.root,
                         text = "start",
                         command = self.buttonPressed)
        button.pack ()
        self.balls = []
        for x, y, r, dx, dy in BallWorld.ballParams:
            self.balls.append (CanvasBall (self.canvas,
                                           x,
                                           y,
                                           dx,
                                           dy,
                                           r,
                                           BallWorld.width,
                                           BallWorld.height))

    def buttonPressed (self):
        # Inte idealt att ha animeringsloopen här
        # Bättre att använda trådningsteknik från föreläsning F11
        #
        # Det är heller inte särskilt lyckat att flytta på en boll
        # genom att rita över den gamla och rita ut en ny (som nedan
        # för enkelhets skull) eftersom alla bollar vi ritar ut kommer
        # att ta litet minne.  Se ballworld2.py för en lösning som är
        # bättre i det avseendet!
        #
        while True:
            for ball in self.balls:
                ball.update ()
            self.canvas.update () # uppdatera bilden i canvasen
            time.sleep (0.015)

    def mainloop (self):
        self.root.mainloop ()

world = BallWorld ()
world.mainloop ()
