package fullwindowcanvas3d;

import java.awt.AWTEvent;
import java.awt.event.*;
import java.util.Enumeration;
import javax.media.j3d.*;
import javax.vecmath.*;

import com.sun.j3d.utils.universe.*;

public class DisparityBehavior extends Behavior
{
  private WakeupCondition keyCriterion;
  private int leftKey = KeyEvent.VK_SPACE;
  private int rightKey = KeyEvent.VK_BACK_SPACE;
  PhysicalBody body;

  public DisparityBehavior(PhysicalBody body)
  {
    this.body = body;
  }

  public void initialize()
  {
    WakeupCriterion[] keyEvents = new WakeupCriterion[2];
    keyEvents[0] = new WakeupOnAWTEvent( KeyEvent.KEY_PRESSED );
    keyEvents[1] = new WakeupOnAWTEvent( KeyEvent.KEY_RELEASED );
    keyCriterion = new WakeupOr( keyEvents );
    wakeupOn( keyCriterion );
  }

  public void processStimulus( Enumeration criteria )
  {
    WakeupCriterion wakeup;
    AWTEvent[] event;
    while( criteria.hasMoreElements() )
    {
      wakeup = (WakeupCriterion) criteria.nextElement();
      if( !(wakeup instanceof WakeupOnAWTEvent) )
        continue;

      event = ((WakeupOnAWTEvent)wakeup).getAWTEvent();
      for( int i = 0; i < event.length; i++ )
      {
        if( event[i].getID() == KeyEvent.KEY_PRESSED )
        {
          processKeyEvent((KeyEvent)event[i]);
        }
      }
    }
    wakeupOn( keyCriterion );
  }

  protected void processKeyEvent(KeyEvent event)
  {
    int keycode = event.getKeyCode();

    Point3d currentLEyePos = new Point3d();
    body.getLeftEyePosition(currentLEyePos);

    Point3d currentREyePos = new Point3d();
    body.getRightEyePosition(currentREyePos);
    if(keycode == leftKey)
    {
     body.setLeftEyePosition(new Point3d(currentLEyePos.x-.001,currentLEyePos.y, currentLEyePos.z));
     body.setRightEyePosition(new Point3d(currentREyePos.x+.001,currentREyePos.y, currentREyePos.z));
    }
    else if (keycode == rightKey)
    {
     body.setLeftEyePosition(new Point3d(currentLEyePos.x+.001,currentLEyePos.y, currentLEyePos.z));
     body.setRightEyePosition(new Point3d(currentREyePos.x-.001,currentREyePos.y, currentREyePos.z));
    }
  }
  //moves forward backward or rotates left right
}
