package molekuly;

import rup.česky.tvary.AktivníPlátno;

import java.util.Timer;
import java.util.TimerTask;

/*******************************************************************************
 * Třída AnimátorMolekul_13b definuje objekt, který zabezpečí
 * animaci molekul uložených ve statickém atributu <code>molekuly</code> 
 * třídy </code>Molekula_13b</code>.
 * Animátor by měl správně být buď jedináček, nebo alespoň kontrolovat,
 * že se druhý nespustí dříve, než první doběhne. 
 * Vzhledem k tomu, že je určen pouze pro testovací účely a bude jej
 * používat pouze třída <code>Molekula_13b</code>, dopustíme se malého hříchu
 * a tyto kontroly do kódu nezahrneme. 
 *
 * @author    Rudolf Pecinovský
 * @version   0.00.000,  0.0.2003
 */
//==============================================================================

class AnimátorMolekul_13b extends TimerTask
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** AP od třídy Molekula_13d je nedosažitelné, protože ta je dědí od 
     *  rodičovské třídy třída APosuvný, jež je deklarovala jako protected. */
    AktivníPlátno AP = AktivníPlátno.getPlátno();
    

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

    /***************************************************************************
     * Vytvoří nový animátor molekul, který bude s frekvencí zadanou ve třídě 
     * Molekula_13b žádat moelkuly o aktulizaci jejich pozice 
     * a následně nechávat překreslit plátno.
     */     
    public AnimátorMolekul_13b()
    {
        new Timer().schedule( this, 0, 1000 / Molekula_13b.FREKVENCE );
    }

    

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

    /***************************************************************************
     * Metoda požadovaná třídou TimerTask. Bude spouštěna časovačem
     * s požadovanou frekvencí. Tato metoda má na starosti vlastní animaci.
     */     
    public void run()
    {
        AP.nekresli();
            for( Molekula_13b m : Molekula_13b.molekuly )
            {
                m.popojeď();
            }
        AP.vraťKresli();
    }



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

