package letadla;

import rup.česky.tvary.Barva;
import rup.česky.tvary.Směr8;

import rup.česky.tvary.IMultiposuvný;
import rup.česky.tvary.Trojúhelník;
import rup.česky.tvary.APosuvný;
import rup.česky.tvary.Multipřesouvač;
import rup.česky.tvary.Elipsa;
import rup.česky.tvary.Text;


/*******************************************************************************
 * Třída Sbl_Třída slouží k ...
 *
 * @author    Rudolf Pecinovský
 * @version   0.00.000,  0.0.2003
 */
public class Letadlo extends APosuvný implements IMultiposuvný
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
    
    private static final int ŠÍŘKA_TRUPU = 20;
    private static final int ŠÍŘKA_KŘÍDLA = 5 * ŠÍŘKA_TRUPU;
    public  static final int VÝŠKA_OSY = ŠÍŘKA_KŘÍDLA / 2;
    
    private static final Barva BARVA = Barva.MODRÁ;

//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
    
    private final Elipsa trup;
    private final Trojúhelník křídlo;
    private final int rychlost;
    private final int x0;
    
    private final int xPosunKřídla;
    private final int yPosunTrupu;
    
    
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
    
    private int pořadí;
    private Text číslo;
    
    
    
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Implicitní konstruktor třídy Třída
     */
    public Letadlo( int délka, int rychlost, Multipřesouvač mp )
    {
        super( AP.getŠířka() + délka, 0 );
        this.x0 = getX();
        this.xPosunKřídla = délka / 3;
        this.yPosunTrupu  = VÝŠKA_OSY - ŠÍŘKA_TRUPU/2;
        int délkaKřídla = délka / 3;
        
        trup = new Elipsa( x0, yPosunTrupu, délka, ŠÍŘKA_TRUPU, BARVA );
        křídlo = new Trojúhelník( x0+xPosunKřídla, 0, 
                                  délkaKřídla, ŠÍŘKA_KŘÍDLA, 
                                  BARVA, Směr8.ZÁPAD );
        pořadí = 0;
        this.rychlost = rychlost;
        přesunuto();
    }

    

//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
    
    public void setPozice( int x, int y )
    {
        super .setPozice( x, y );
        trup  .setPozice( x,                y + yPosunTrupu );
        křídlo.setPozice( x + xPosunKřídla, y );
        číslo .setPozice( x + xPosunKřídla, y + yPosunTrupu );
    }

    
    public int getŠířka()
    {
        return trup.getŠířka();
    }
    
    
    public void setBarva( Barva barva )
    {
        trup  .setBarva( barva );
        křídlo.setBarva( barva );
    }
    
    
    
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
    
    public void přesunuto()
    {
        this.číslo = new Text( ++pořadí+"", 0, 0, Barva.ŽLUTÁ );
        setBarva( BARVA );
        setPozice( x0, 0 );
        Multipřesouvač mp = Multipřesouvač.getInstance();
        mp.přesuň( this, -trup.getŠířka(), 0, rychlost );
    }
    
    
    
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================

    public void nakresli( rup.česky.tvary.Kreslítko kreslítko )
    {
        trup  .nakresli( kreslítko );
        křídlo.nakresli( kreslítko );
        číslo .nakresli( kreslítko );
    }    

}

