I have already managed to do this with the code for the behaviour as
below
The values for the buttons can be found in the java.awt.event.KeyEvent
class
public class ViewMovement extends Behavior {
private TransformGroup yrot;
private TransformGroup xrot;
private Transform3D yTransform;
private Transform3D xTransform;
private Vector3d vec;
private Vector3d addition;
private WakeupCondition conditions;
private double turnY=0;
private double turnX=0;
public ViewMovement(TransformGroup ynode,TransformGroup xnode)
{
yrot=ynode;xrot=xnode;
WakeupCriterion wakeUp[]={
new WakeupOnElapsedFrames(0),new WakeupOnAWTEvent(Event.KEY_PRESS)};
conditions=new WakeupOr(wakeUp);
}
public void initialize()
{
vec=new Vector3d();
yTransform=new Transform3D();
xTransform=new Transform3D();
yrot.getTransform(yTransform);
yTransform.get(vec);
wakeupOn(conditions);
}
public void processKeyEvent(KeyEvent evt)
{
int key;
key=evt.getKeyCode();
if(key==KeyEvent.VK_UP)
{
turnX=turnX+0.1;
xTransform.rotX(turnX);
System.out.println("Up button");
return;
}
else if(key==KeyEvent.VK_DOWN)
{
turnX=turnX-0.1;
xTransform.rotX(turnX);
System.out.println("Down button");
return;
}
else if(key==KeyEvent.VK_LEFT)
{
turnY=turnY-0.1;
yTransform.rotY(turnY);
System.out.println("Left button");
return;
}
else if(key==KeyEvent.VK_RIGHT)
{
turnY=turnY+0.1;
yTransform.rotY(turnY);
System.out.println("Right button");
return;
}
return;
}
public Vector3d calculateNewDistance(double distance, double xrotation,
double yrotation)
{
double xdistance=0;
double ydistance=0;
double zdistance=0;
double ztempdistance=0;
Vector3d newDistance;
// Calaculate two dimensional distances
ydistance= Math.sin(xrotation)*distance;
ztempdistance= Math.cos(xrotation)*distance;
//Calculate 3 dimensional distances
xdistance= Math.sin(yrotation)*ztempdistance;
zdistance= Math.cos(yrotation)*ztempdistance;
newDistance=new Vector3d(xdistance,ydistance,-zdistance);
// System.out.println(""+newDistance);
return newDistance;
}
public void processStimulus(Enumeration criteria)
{
WakeupCriterion wakeupInstance;
AWTEvent[] evt=null;
try{
while(criteria.hasMoreElements())
{
wakeupInstance=(WakeupCriterion)criteria.nextElement();
if(wakeupInstance instanceof WakeupOnElapsedFrames)
{
vec.add(calculateNewDistance(0.1,turnX,turnY));
}
if(wakeupInstance instanceof WakeupOnAWTEvent)
{
System.out.println("Keyboard press detected");
evt=((WakeupOnAWTEvent)wakeupInstance).getAWTEvent();
processKeyEvent((KeyEvent)evt[0]);
}
}
yTransform.set(vec);
yrot.setTransform(yTransform);
xrot.setTransform(xTransform);
wakeupOn(conditions);
}
catch(NullPointerException e1){System.out.println("Null Exception");}
}
}
ViewMovement.java