#! /usr/bin/env python
# -*- coding: Utf-8 -*-

from Tkinter import *
from math import pi, sin, cos

class Canon:
    """Agyugrafika"""
    def __init__(self, boss, x, y, angle=25):
        self.boss = boss            # vaszon hivatkozasa
        self.x1, self.y1 = x, y     # agyu forgastengelye
        # kiindulaskent az agyucsovet vizszintesre rajzolja :
        self.lagyucso = 50               # agyucso hossza
        self.x2, self.y2 = x + self.lagyucso, y
        self.cso = boss.create_line(self.x1, self.y1, self.x2, self.y2,
                                     width =10)
        # utana megrajzoljuk fole azagyu testet :
        r = 15                      # kor sugara
        boss.create_oval(x-r, y-r, x+r, y+r, fill='blue', width =3)
        # lovedeket rajzol (animacio elott egy pontra redukalja) :
        self.lovedek =boss.create_oval(x, y, x, y, fill='red')
        self.anim =False            # animacio megszakitasa
        # meghatarozza a vaszon szelesseget es magassagat :
        self.xMax =int(boss.cget('width'))
        self.yMax =int(boss.cget('height'))
                
    def iranyzas(self, angle):
        "loves szogenek kivalasztasa"
        # rem : a <angle> parametert stringkent fogadja.
        # At kell valos szamma alakitani, majd azt radianna :
        self.angle = float(angle)*2*pi/360      
        self.x2 = self.x1 + self.lagyucso*cos(self.angle)
        self.y2 = self.y1 - self.lagyucso*sin(self.angle)
        self.boss.coords(self.cso, self.x1, self.y1, self.x2, self.y2)
        
    def tuz(self):
        "lövedek inditasa"
        if not self.anim:
            self.anim =True
            # a lovedek indulasi pozicioja (ez az agyu torka) :
            self.boss.coords(self.lovedek, self.x2 -3, self.y2 -3,
                                        self.x2 +3, self.y2 +3)
            v =15              # kezdosebesseg
            # ennek a sebessegnek a fuggoleges es vizszintes komponense :
            self.vy = -v *sin(self.angle)
            self.vx = v *cos(self.angle)
            self.animal_lovedek()
    
    def animal_lovedek(self):
        "lovedek animacioja (ballisztikus palya)"
        if self.anim:
            self.boss.move(self.lovedek, int(self.vx), int(self.vy))
            c = self.boss.coords(self.lovedek)     # eredmeny koordinatak
            xo, yo = c[0] +3, c[1] +3   # lovedek kozeppontjanak koordinatai
            if yo > self.yMax or xo > self.xMax:
                self.anim =False        # animacio leallitasa
            self.vy += .5
            self.boss.after(30, self.animal_lovedek)
        
if __name__ == '__main__':
    # Kod aCanon osztaly tesztelesehez : 
    f = Tk()
    can = Canvas(f,width =250, height =250, bg ='ivory')
    can.pack(padx =10, pady =10)
    c1 = Canon(can, 50, 200)

    s1 =Scale(f, label='Dőlésszög', from_=90, to=0, command=c1.iranyzas)
    s1.pack(side=LEFT, pady =5, padx =20)
    s1.set(25)                          # kezdeti lövesszog

    Button(f, text='Tűz !', command =c1.tuz).pack(side=LEFT)

    f.mainloop()

#lagyucso -> lagyucso
#obus -> lovedek
#animer_lovedek -> animal_lovedek
#buse -> cso
#orienter -> iranyzas
#feu -> tuz