import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Verwaltet Animationen
 * 
 * @author Marek Parucha 
 * @version 1.0
 */
public class Animation extends Actor
{
    
    /**
     * aktuelles Bild
     */
    GreenfootImage aktImage;
    /**
     * Bilder
     */
    GreenfootImage[] bilder;
    
    boolean act     = false;
    boolean actLoop = false;
    
    int index = 0;
    /**
     * Bilder anzahl
     */
    final int bilderZahl;
    int intervall = 0;
    
    private long lastTime = System.currentTimeMillis();
    
    public Animation( int anzahl , GreenfootImage[] b , int it)
    {
        bilderZahl = anzahl;
        intervall  = it;
        bilder = new GreenfootImage[bilderZahl];
        for(int i  = 0 ; i < bilderZahl ; ++i )
        {
            bilder[i] = b[i];
            
        }
       
        
    }
    public void act() 
    {
        if( act || actLoop )
        {
             if( waitEn(lastTime,intervall) )
             {
                 if(index == bilderZahl)
                 {
                    index = 0;
                    act = false;
                    if( !actLoop )
                    {
                        return;
                    }
                 }
                 
                 aktImage = bilder[index];
                 ++index;
            
                 lastTime = System.currentTimeMillis();
             }
        }
        else
        {
            aktImage = bilder[0];
        }
    }  
    
    private boolean waitEn(long last , int intervall)
    {
        boolean b = false;
        
        if( System.currentTimeMillis() >= (last + intervall) )
        {
            b = true;
        }
        
        return b;
    }
    /**
     * true falls animation läuft
     */
    public boolean isPlaying()
    {
        if( act || actLoop )
        {
            return  true;
        }
        else
        {
            return  false;
        }
    }
     /**
     * startet Animation
     */
    public void start()
    {
        if(bilderZahl != 1)
        {
            act = true;
        }
    }
     /**
     * startet Animations Loop
     */
    public void startLoop()
    {
        if(bilderZahl != 1)
        {
            actLoop = true;
        }
    }
     /**
     * stoppt Animation
     */
    public void stop()
    {
        actLoop = false;
        act     = false;
    }
     /**
     * setzt Bilder fest
     */
    public void setImages( GreenfootImage[] p )
    {
        for( int i = 0 ; i < bilderZahl ; ++i )
        {
            bilder[i] = p[i];
        }
    }
     /**
     * gibt aktuelles Bild aus
     */
    public GreenfootImage getImage()
    {
        return aktImage;
    }
}
