package šipky;

import rup.česky.tvary.AktivníPlátno;
import rup.česky.tvary.Barva;
import rup.česky.tvary.Kreslítko;
import rup.česky.tvary.Směr8;
import rup.česky.tvary.Trojúhelník;
import rup.česky.tvary.Obdélník;


/*******************************************************************************
 * Třída JŠipka definuje šipku otočenou na jih.
 *
 * @author     Rudolf Pecinovský
 * @version    0.00.000,  0.0.2003
 */
public class JŠipka implements IŠipka
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
    
    private static final AktivníPlátno AP = AktivníPlátno.getPlátno();
    
    
    
//== ATRIBUTY TŘÍDY ============================================================
    
    private static int krok = AP.getKrok();

        
        
//== ATRIBUTY INSTANCÍ =========================================================
    
    private Trojúhelník špička;
    private Obdélník    tělo;
    private int xPole, yPole;
    
    

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

    /***************************************************************************
     * Vytvoří na zadaných souřadnicích novou, na jih otočenou šipku
     * zadané barvy.
     *
     * @param x  x-ová políčková souřadnice
     * @param y  y-ová políčková souřadnice
     * @param barva  barva šipky
     */
    public JŠipka(int xPole, int yPole, Barva barva)
    {
        this.xPole = xPole;
        this.yPole = yPole;
        int  k2    = krok/2;
        špička = new Trojúhelník( xPole*krok, yPole*krok + k2, 
                                  krok, k2, barva, Směr8.JIH );
        tělo   = new Obdélník( xPole*krok + krok/4, yPole*krok, 
                               k2, k2, barva );
    }

    

//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí vodorovnou souřadnici šipky.
     *
     * @return  x-ová souřadnice šipky
     */
    public int getXPole()
    {
        return xPole;
    }
    
    
    /***************************************************************************
     * Vrátí svislou souřadnici šipky.
     *
     * @return  y-ová souřadnice šipky
     */
    public int getYPole()
    {
        return yPole;
    }
    
    

//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================

    /***************************************************************************
     * Vrátí šipku, která je na stejné pozici, pouze je otočená o 90° vlevo.
     *
     * @return Šipka natočená do nového směru.
     */
    public IŠipka doleva()
    {
        return new VŠipka( xPole, yPole, špička.getBarva() );
    }
    

    /***************************************************************************
     * Posune šipku na další políčko ve směru, do kterého je natočena.
     */
    public void vpřed()
    {
        AP.nekresli();
            špička.posunDolů( krok );
            tělo  .posunDolů( krok );
        AP.vraťKresli();
        yPole += 1;
    }
    

    /***************************************************************************
     * Nakreslí šipku zadaným kreslítkem.
     *
     * @param g Kreslítko (objekt typu Graphics2D), kterým se šipka nakreslí.
     */
    public void nakresli(Kreslítko g)
    {
        špička.nakresli( g );
        tělo.  nakresli( g );
    }



//== 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 =======================================================
}

