import java.applet.*;
import java.awt.*;
import Cercle;

public class AnimCircle extends Applet implements Runnable {
    Thread threadDeApplet;
    Cercle cercle;

    public void init() {
        // Creation d'un cercle
        cercle = new Cercle(100, 100, 10, 200, 200);
    }

    public void start(){
        System.out.println("Je starte");
       // Si le thread de l'applet vaut null, 
       // on le crée d'un Thread à partir de l'applet et on le lance
        if(threadDeApplet == null) {
             threadDeApplet = new Thread(this);
             threadDeApplet.start();
        } 
        else {
            // Le thread existe déjà, on le réveille (il était forcément endormi)
            System.out.println("Je reveille le thread applet");
            threadDeApplet.resume();
        }

	// On reveille le cercle
	cercle.resume();
    }

    public void stop() {
        // On suspend tous les threads : celui de l'applet et les cercles
        System.out.println("Je stoppe");
        threadDeApplet.suspend();

        // maintenant pour le cercle
            cercle.suspend();
        
    }


    /** Tache de fond executee par le Thread. Effectue l'animation du cercle en
        modifiant ses coordonnees et en invoquant repaint(), ce qui provoque l'execution
        de paint(). Notez que run() doit impérativement contenir une boucle afin de ne pas
        rendre la main tout de suite.
    */
    public void run() {

        while(true) {
            // On demande à redessiner le cercle
            repaint();

            // On "dort" entre 0 et 1/100 de seconde, aléatoirement
            try {
                threadDeApplet.sleep((long) (10 * Math.random()));
            } catch(InterruptedException e) {
                System.out.println("Erreur dans le sleep(1000 * Math.random());");
                e.printStackTrace();
            }
        }
    }

    public void paint(Graphics gc) {
        // appelé automatiquement par l'AWT, ou sur demande par repaint()

        gc.drawOval(cercle.getX() - cercle.getRayon(),
                    cercle.getY() - cercle.getRayon(),
                   2 * cercle.getRayon(),
                   2 * cercle.getRayon());
    }
}
