/*
 * Created by IntelliJ IDEA.
 * User: fherinean
 * Date: 26.07.2002
 * Time: 10:24:38
 * To change template for new class use
 * Code Style | Class Templates options (Tools | IDE Options).
 */
package jdraw3d.j3d;

import javax.media.j3d.Behavior;
import javax.media.j3d.WakeupCondition;
import javax.media.j3d.WakeupOnElapsedFrames;
import javax.media.j3d.BoundingSphere;
import javax.swing.JLabel;
import javax.vecmath.Point3d;

import java.util.Enumeration;

public class FPSCounter
    extends Behavior
{
    private int nFrames;
    private long startTime;
    private final WakeupCondition w;
    private static float frameRate;
    private JLabel label = null;

    public FPSCounter()
    {
        this(100);
    }

    public FPSCounter(int nFrames)
    {
        this.nFrames = nFrames;
        w = new WakeupOnElapsedFrames(nFrames);
    }

    public FPSCounter(JLabel label)
    {
        this();
        this.label = label;
    }

    public FPSCounter(int nFrames, JLabel label)
    {
        this(nFrames);
        this.label = label;
    }

    public void initialize()
    {
        setSchedulingBounds(new BoundingSphere(new Point3d(), 1000));
        startTime = System.currentTimeMillis();
        wakeupOn(w);
    }

    public void processStimulus(Enumeration criteria)
    {
        long time = System.currentTimeMillis();
        frameRate = 1000 * (float) nFrames / (float) (time - startTime);
        int fract = (int) (10 * (frameRate - (int) frameRate));
        if (label != null)
        {
            label.setText(" FPS: " + (int) frameRate + "." + fract);
        }
        startTime = System.currentTimeMillis();
        wakeupOn(w);
    }

    public static float getFrameRate()
    {
        return frameRate;
    }
}
