/*******************************************************************************
 * Třída Strom obsahuje definice metod z třetí kapitoly učebnice
 * vytvořených do podkapitoly "Definujeme vlastní metodu" včetně.
 * Nejsou zde ještě definovány metody, jejichž vytvoření dostali žádi za úkol
 * a v definici je chyba, která je později v textu vysvětlena a opravena.
 *
 * @author     Rudolf Pecinovský
 * @version    2.01, duben 2004
 */
public class Strom_3a
{
    public  Elipsa   koruna;
    private Obdélník kmen;


    public Strom_3a()
    {
        this( 0, 0 );
    }

    public Strom_3a(int x, int y)
    {
        this( x, y, 100, 150 );
    }

    public Strom_3a(int x, int y, int šířka, int výška)
    {
        koruna = new Elipsa  ( x, y, šířka, 2*výška/3, Barva.ZELENÁ  );
        kmen   = new Obdélník( x+9*šířka/20, y+2*výška/3,
                               šířka/10, výška/3, Barva.HNĚDÁ );
    }

    public void nakresli()
    {
        koruna.nakresli();
        kmen  .nakresli();
    }

    public void smaž()
    {
        koruna.smaž();
        kmen  .smaž();
    }


    public void posunVpravo(int n)
    {
        koruna.posunVpravo( n );
        kmen  .posunVpravo( n );
    }

    public void posunDolů( int n )
    {
        koruna.posunDolů( n );
        kmen  .posunDolů( n );
        koruna.nakresli();
    }

    public void setPozice( int x, int y )
    {
        koruna.setPozice( x, y );
        kmen  .setPozice( x  +  (koruna.getŠířka() - kmen.getŠířka()) / 2,
                          y  +  koruna.getVýška()     );
        koruna.nakresli();
    }

    public void posunVpravo()
    {
        koruna.posunVpravo();
        kmen  .posunVpravo();
    }

    public void posunVlevo()
    {
        koruna.posunVlevo();
        kmen  .posunVlevo();
    }

    public void posunVzhůru()
    {
        koruna.posunVzhůru();
        kmen  .posunVzhůru();
    }

    public void posunDolů()
    {
        koruna.posunDolů();
        kmen  .posunDolů();
    }

    public int getX()
    {
        return koruna.getX();
    }

    public int getVýška()
    {
        return koruna.getVýška() + kmen.getVýška();
    }

    public Barva getBarvaKoruny()
    {
        return koruna.getBarva();
    }

    public void setBarvaKoruny( Barva nová )
    {
        koruna.setBarva( nová );
    }

}

