package posuvné_šipky;

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


/*******************************************************************************
 * Třída VŠipka definuje šipku otočenou na východ.
 *
 * @author     Rudolf Pecinovský
 * @version    0.00.000,  0.0.2003
 */
public class VŠipka extends AŠipka
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================

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

    /***************************************************************************
     * Vytvoří na zadaných souřadnicích novou, na východ 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 VŠipka( int x, int y, Barva barva )
    {
        int krok = AP.getKrok();
        int k2   = krok/2;
        špička = new Trojúhelník( x*krok + k2, y*krok, k2, krok, barva, 
                                  Směr8.VÝCHOD );
        tělo   = new Obdélník   ( x*krok, y*krok + krok/4, k2, k2, barva );
    }

    

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

    /***************************************************************************
     * Vrátí vodorovnou souřadnici šipky.
     *
     * @return  x-ová souřadnice šipky
     */
    public int getX()
    {
        return tělo.getX();
    }
    
    
    /***************************************************************************
     * Vrátí svislou souřadnici šipky.
     *
     * @return  y-ová souřadnice šipky
     */
    public int getY()
    {
        return špička.getY();
    }
    
    
    /***************************************************************************
     * Nastaví vodorovnou a svislou souřadnici šipky.
     *
     * @param x  Zadávaná x-ová souřadnice
     * @param y  Zadávaná y-ová souřadnice
     */
    public void setPozice(int x, int y)
    {
        int krok = AP.getKrok();
        špička.setPozice( x + krok/2, y );
        tělo  .setPozice( x,          y + krok/4 );
    }
    
    

//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================

    /***************************************************************************
     * 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 AŠipka doleva()
    {
        int krok = AP.getKrok();
        return new SŠipka( getX()/krok, getY()/krok, špička.getBarva() );
    }
    
    

    /***************************************************************************
     * Posune šipku na další políčko ve směru, do kterého je natočena.
     */
    public void vpřed()
    {
        přes.přesunNa( this, getX()+AP.getKrok(),  getY(), false );
    }
    
    
    
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

