1
2
3
4
5
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
36
37 public ControlableObject(){
38 super();
39
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
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
118 this.transformGroup.setTransform(transform);
119 if(viewTransformGroup!=null)
120 viewTransformGroup.setTransform(transform);
121 }
122 }