package ufo;

/*******************************************************************************
 * Třída RotUFO_11c 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_11c extends RotUFO_11b
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== 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_11c(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 ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================

    /***************************************************************************
     * Nastaví nové souřadnice instance tak,
     * že k současné hodnotě souřadnic přičte aktuální rychlost.
     * Je-li nastavené nenulové zrychlení (tah motorů), musí nejprve
     * připočíst k rychlosti aktuální zrychlení a tak nastavit
     * její aktuální velikost. Teprve tu může přičíst k hodnotě souřadnic.
     * <p>
     * Při připočítávání zrychlení k rychlosti a rychlosti k pozici je třeba
     * počítat s tím, že Dispčer volá tuto metodu mnohokrát za sekundu.
     * Proto předává jako parametr počet volání za sekundu, aby program věděl,
     * čím má nastavenou velikost zrychlení či rychlosti podělit,
     * aby získal správnou velikost opakovaného přírůstku.
     */
    public void popojeď( int frekvence )
    {
        super.popojeď( frekvence );

        if( Math.abs(xRychlost) > VŠÍŘKA/3 )
            throw new IllegalStateException("\nPříliš velká vodorovná rychlost");

        if( Math.abs(yRychlost) > VVÝŠKA/3 )
            throw new IllegalStateException("\nPříliš velká svislá rychlost");
    }


//== 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_11c()
    {
        System.out.println();
        Dispečer.getDispečer().použijTřídu( RotUFO_11c.class );
    }


}

