package ufo;

/*******************************************************************************
 * Třída RotUFO_11b obsahuje vzorové řešení pro třídu UFO, která
 * simuluje dopravní prostředek mimozemšťanů, pomocí nějž se pohybují
 * vesmírem. Úkolem hráče je dopravit všechna UFO ze startovní rampy do
 * hangárů. Cestopu musí dávat pozor, aby nenarazil do planet a jiných UFO.
 * Hráč může ovládat současně tolik UFO, na kolik si troufne.
 * <p>
 * Při první variantě hry žádá hráč o UFO dispečera RDispečer (preferuje
 * přímé ovládání Rychlosti). Úkolem hráče je požádat dispečera postupně
 * o jednotlivá UFO a přímým zadáváním jejich rychlosti prostřednictvím
 * volání metody setRychlost(int,int);
 * <p>
 * Při druhé variantě hry žádá hráč o UFO dispečera ZDispečer (preferue
 * ovládní pohybu přes Zrychlení). Úkolem hráče je opět převzít od dispečera
 * jednotlivá UFO a dopravit je do hangárů, avšak tentokrát ovlivňuje jejich
 * pohyb přímo klávesami. Stiskem kláves ale nenastavuje rychlost UFO,
 * ale tah jeho motorů a tím i velikost jeho zrychlení resp. zpomalení.
 * <p>
 * Druhá varianta lépe simuluje stav ve vesmíru, kde neexistuje žádné tření,
 * takže při zapnutých motorech lod pořád zrychluje či brzdí a naopak
 * při vypnutých motorech si udržuje konstantní rychlost.
 * <p>
 * @author     Rudolf Pecinovský
 * @version    1.00, červen 2004
 */
public class RotUFO_11b extends RotUFO_11a
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Maximální dosažitelný tah motorů. */
    public static final double MAX_TAH = 8;

    /** Počet stupňů, v nichž je možno nastavovat tah.
     *  Tah je možno nastavovat v obou směrech,
     *  takže skutečný počet stupňů je dvojnásobný. */
    public static final int STUPŇŮ = 4;

    /** Změna tahu při posunutí plynu o jeden stupeň
     *  (a také při stisku šipky). */
    public static final double DTAH = MAX_TAH / STUPŇŮ;
    
    

//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

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

    /***************************************************************************
     * Předá konstruktoru talíř tvořící kostru UFO,
     * jeho pořadí v rámci vytvořených UFO
     * a maximálníbtah motorů, který ovlivňuje změny zrychlení instance.
     *
     * @param talíř   Odkaz na talíř tvořící kostru UFO.
     * @param pořadí  Pořadí konstruovaného UFO v rámci již vytvořených.
     * @param tah     Maximální tah motorů udává v jakých přírůstcích
     *                se bude měnit zrychlení.
     */
    public RotUFO_11b(Talíř talíř, int pořadí)
    {
        super( talíř, pořadí );
    }


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

    /***************************************************************************
     * Zvětší vodorovný tah motorů a tím i zrychlení (= přírustek rychlosti)
     * o jeden díl maximálního tahu, tj. o DTAH.
     */
    public void vpravo()
    {
        xTah += DTAH;
        if( xTah > MAX_TAH )
            xTah = MAX_TAH;
    }


    /***************************************************************************
     * Zmenší vodorovný tah motorů a tím i zrychlení (= přírustek rychlosti)
     * o jeden díl maximálního tahu, tj. o DTAH.
     */
    public void vlevo()
    {
        xTah -= DTAH;
        if( xTah < -MAX_TAH )
            xTah = -MAX_TAH;
    }


    /***************************************************************************
     * Zvětší svislý tah motorů a tím i zrychlení (= přírustek rychlosti)
     * o jeden díl maximálního tahu, tj. o DTAH.
     */
    public void dolů()
    {
        yTah += DTAH;
        if( yTah > MAX_TAH )
            yTah = MAX_TAH;
    }


    /***************************************************************************
     * Zmenší svislý tah motorů a tím i zrychlení (= přírustek rychlosti)
     * o jeden díl maximálního tahu, tj. o DTAH.
     */
    public void vzhůru()
    {
        yTah -= DTAH;
        if( yTah < -MAX_TAH )
            yTah = -MAX_TAH;
    }

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

    /***************************************************************************
     * Testovací metoda.
     */
    public static void start_11b()
    {
        Dispečer.getDispečer().použijTřídu( RotUFO_11b.class );
    }


}

