View Javadoc
1   /*
2    * Created on 2004-12-10
3    *
4    * TODO To change the template for this generated file go to
5    * Window - Preferences - Java - Code Style - Code Templates
6    */
7   package org.sourceforge.jvb3d.Model;
8   
9   import java.io.IOException;
10  import java.io.ObjectInput;
11  import java.io.ObjectOutput;
12  
13  import javax.media.j3d.Appearance;
14  import javax.media.j3d.ColoringAttributes;
15  import javax.media.j3d.Transform3D;
16  import javax.media.j3d.TransformGroup;
17  import javax.vecmath.Color3f;
18  import javax.vecmath.Vector3f;
19  
20  import com.sun.j3d.utils.universe.*;
21  import javax.media.j3d.*;
22  import com.sun.j3d.utils.geometry.*;
23  
24  
25  /***
26   * @author spootnick
27   *
28   * Klasa reprezentująca obiety swiata, które mogą być sterowane lokalnie
29   * Na razie są to lokalne postacie zwiedzających
30   */
31  public class ControlableObject extends MovableObject implements IPlayerControl {
32  	
33  	protected float vRotation=0;
34  	protected TransformGroup viewTransformGroup=null;
35  	//public String name="";
36  	//private SimpleUniverse simpleUniverse=null;
37  	public ControlableObject(){
38  		super();
39  		//isLocal=true;
40  	}
41  
42  	/***
43  	 * Ustawia transformację kamery, która po ustawieniu będzie aktualizowana zgodnie z położeniem tego obiektu
44  	 * @param tg
45  	 */
46  	public void setViewTransform(TransformGroup tg){
47  		this.viewTransformGroup=tg;
48  	}
49  
50  	/***
51  	 *  
52  	 * @see org.sourceforge.jvb3d.Model.IPlayerControl#turnLeftRight(float) 
53  	 */
54  	public synchronized void turnLeftRight(float angle){
55  		rotation=rotation+angle;
56  		tmpTransform.rotY(rotation);
57  		forward.x=baseForward.x;
58  		forward.y=baseForward.y;
59  		forward.z=baseForward.z;
60  		tmpTransform.transform(forward);
61  		left.x=baseLeft.x;
62  		left.y=baseLeft.y;
63  		left.z=baseLeft.z;
64  		tmpTransform.transform(left);
65  		//applyTransform();
66  	}
67  	/***
68  	 *  
69  	 * @see org.sourceforge.jvb3d.Model.IPlayerControl#moveForwardBackward(float)
70  	 */
71  	public synchronized void moveForwardBackward(float speed){
72  		this.speed=speed;
73  	}
74  	/***
75  	 * @see org.sourceforge.jvb3d.Model.IPlayerControl#moveLeftRight(float)
76  	 */
77  	public synchronized void moveLeftRight(float speed){
78  		strafeSpeed=speed;
79  	
80  	}
81  	/***
82  	 * @see org.sourceforge.jvb3d.Model.IPlayerControl#turnUpDown(float)
83  	 */
84  	public synchronized void turnUpDown(float angle){
85  		vRotation+=angle;
86  		if(vRotation>Math.PI/2)
87  			vRotation=(float)Math.PI/2;
88  		else if(vRotation<-Math.PI/2)
89  			vRotation=-(float)Math.PI/2;
90  
91  	}
92  	/***
93  	 * @see java.io.Externalizable#readExternal(java.io.ObjectOutput)
94  	 */
95  	public synchronized void writeExternal(ObjectOutput arg0) throws IOException {
96  	
97  		super.writeExternal(arg0);
98  	}
99  
100 	/***
101 	 * @see java.io.Externalizable#readExternal(java.io.ObjectInput)
102 	 */
103 	public synchronized void readExternal(ObjectInput arg0) throws IOException,
104 			ClassNotFoundException {
105 		super.readExternal(arg0);
106 	}
107  
108 	/***
109 	 * Dodatkowo aktualizuje transformację kamery
110 	 */
111 	protected synchronized void applyTransform(){
112 		transform.set(translation);
113 		tmpTransform.rotY(rotation);
114 		transform.mul(tmpTransform);
115 		tmpTransform.rotX(vRotation);
116 		transform.mul(tmpTransform);
117 		//System.out.println("setTransform: "+Thread.currentThread().getName()+" at: "+System.currentTimeMillis());
118 		this.transformGroup.setTransform(transform);
119 		if(viewTransformGroup!=null)
120 			viewTransformGroup.setTransform(transform);
121 	}
122 }