/*
 *  MouseRotationBehavior.java (adapted from SimpleBehavior.java of sun microsystems
 */

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

import java.awt.event.*;
import java.util.Enumeration;

//  This behavior rotates the object under control when a mouse is clicked.


public class MouseRotationBehavior extends Behavior{

    protected WakeupCriterion[] mouseEvents;
    protected WakeupOr mouseCriterion;
	private TransformGroup targetTG;
	private Transform3D rotation = new Transform3D();
    private double angle = 0.0;

    // create SimpleBehavior
    MouseRotationBehavior(TransformGroup targetTG){
      this.targetTG = targetTG;
    }

    // initialize the Behavior
    //     set initial wakeup condition
    //     called when behavior beacomes live
    public void initialize(){
     // set initial wakeup condition

	  mouseEvents = new WakeupCriterion[1]; //can create a larger array and add more events
      mouseEvents[0] = new WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED); 
      mouseCriterion = new WakeupOr(mouseEvents);
      wakeupOn (mouseCriterion);
    }

     // behavior
     // called by Java 3D when appropriate stimulus occures
     public void processStimulus(Enumeration criteria){
            
		// decode event

        // do what is necessary
        angle += 0.1;
        rotation.rotY(angle);
        targetTG.setTransform(rotation);
        this.wakeupOn(mouseCriterion);
     }

} // end of class MouseRotationBehavior

  