import javax.media.j3d.*;
import javax.vecmath.*;

public class PositionTrace extends Behavior {
    private WakeupOnElapsedFrames wakeup_ = new WakeupOnElapsedFrames(1);
    private long lastMillis_              = 0;
    private int curFrames_                = 0;
    private long totalTime_               = 0;
    private long totalFrames_             = 0;
    private TransformGroup tr_            = null;

    public PositionTrace(TransformGroup t) {
        tr_ = t;
        setSchedulingBounds(new BoundingSphere(new Point3d(0,0,0),3000));
        setEnable(true);
    }

    public void initialize() {
        wakeupOn(wakeup_);
    }

    public void processStimulus(java.util.Enumeration critera) {
        long curTime;
        long et;
        if (lastMillis_ == 0) {
            lastMillis_ = System.currentTimeMillis();
            wakeupOn(wakeup_);
            return;
        }
        totalFrames_++;

        curTime = System.currentTimeMillis();
        et = curTime - lastMillis_;
        if (et >= 1000) {
            totalTime_ += et;
            Vector3f vec = new Vector3f();
            Transform3D tr3d = new Transform3D();
            tr_.getTransform(tr3d);
            tr3d.get(vec);
            System.out.println("current position: " + vec);
            lastMillis_ = curTime;
            curFrames_ = 0;
        } else
            curFrames_++;
        wakeupOn(wakeup_);
    }
    
} // CLASS