/* */ package NET.worlds.scape; /* */ /* */ import java.io.IOException; /* */ import java.util.Enumeration; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class PitchDriver /* */ extends SwitchableBehavior /* */ implements KeyUpHandler, KeyDownHandler, FrameHandler, Persister, MomentumBehavior /* */ { /* */ protected float pitch_force; /* */ protected float pitch_vel; /* */ protected int lastTime; /* 40 */ protected float maxdvpitch = 166.0F; /* */ /* */ /* */ /* */ /* */ /* 46 */ protected float pitch_damp = -5.0F; /* */ /* */ /* */ /* */ /* */ /* 52 */ protected float minpitch_vel = 3.0F; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void applyFrameForce(Event e) /* */ { /* 63 */ if (!(e.receiver instanceof Pilot)) { /* 64 */ return; /* */ } /* 66 */ Camera cam = ((Pilot)e.receiver).getMainCamera(); /* */ /* */ /* 69 */ int now = e.time; /* 70 */ float dt = (now - this.lastTime) / 1000.0F; /* */ /* */ /* */ /* 74 */ if (dt <= 0.0F) { /* 75 */ return; /* */ } /* 77 */ this.lastTime = now; /* */ /* */ /* */ /* 81 */ float dTheta = this.pitch_vel * dt; /* */ /* */ /* 84 */ float dv = 0.0F; /* */ /* 86 */ if (this.pitch_force != 0.0F) /* */ { /* 88 */ dv += this.pitch_force * dt; /* */ /* */ /* */ /* */ /* 93 */ dv = this.maxdvpitch * (float)Math.atan(dv / this.maxdvpitch); /* */ /* 95 */ this.pitch_vel += dv; /* 96 */ dTheta += dv * dt; /* */ } /* */ /* 99 */ if (dTheta != 0.0F) { /* 100 */ Point3Temp axis = Point3Temp.make(); /* 101 */ float angle = cam.lookAround.getSpin(axis); /* 102 */ if (axis.x < 0.0F) /* 103 */ angle = -angle; /* 104 */ if (angle + dTheta > 90.0F) { /* 105 */ dTheta = 90.0F - angle; /* 106 */ } else if (angle + dTheta < -90.0F) /* 107 */ dTheta = -90.0F - angle; /* 108 */ cam.lookAround.spin(1.0F, 0.0F, 0.0F, dTheta); /* */ } /* */ /* 111 */ this.pitch_vel = ((float)(this.pitch_vel * Math.exp(this.pitch_damp * dt))); /* 112 */ if (Math.abs(this.pitch_vel) < this.minpitch_vel) { /* 113 */ this.pitch_vel = 0.0F; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public boolean handle(FrameEvent e) /* */ { /* 122 */ applyFrameForce(e); /* 123 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ public void resetPitch(Event e) /* */ { /* 131 */ Camera cam = ((Pilot)e.receiver).getMainCamera(); /* */ /* 133 */ cam.lookAround.makeIdentity(); /* */ } /* */ /* */ /* 137 */ protected float pitch_key = 500.0F; /* */ /* */ /* */ /* */ public boolean handle(KeyDownEvent e) /* */ { /* */ float pitch; /* */ /* 145 */ if (e.getKey() == 58145) { /* 146 */ pitch = this.pitch_key; } else { float pitch; /* 147 */ if (e.getKey() == 58146) { /* 148 */ pitch = -this.pitch_key; /* */ } else { /* 150 */ if (e.getKey() == 58148) { /* 151 */ resetPitch(e); /* */ } /* 153 */ return true; } } /* */ float pitch; /* 155 */ applyFrameForce(e); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 164 */ this.pitch_force = pitch; /* 165 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public boolean handle(KeyUpEvent e) /* */ { /* 174 */ if ((e.getKey() == 58145) || (e.getKey() == 58146)) /* */ { /* 176 */ applyFrameForce(e); /* 177 */ this.pitch_force = 0.0F; /* */ } /* 179 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ public Object properties(int index, int offset, int mode, Object value) /* */ throws NoSuchPropertyException /* */ { /* 188 */ Object ret = null; /* 189 */ switch (index - offset) { /* */ case 0: /* 191 */ if (mode == 0) { /* 192 */ ret = FloatPropertyEditor.make( /* 193 */ new Property(this, index, "Pitch max acceleration")); /* 194 */ } else if (mode == 1) { /* 195 */ ret = new Float(this.maxdvpitch); /* 196 */ } else if (mode == 2) /* 197 */ this.maxdvpitch = ((Float)value).intValue(); /* 198 */ break; /* */ case 1: /* 200 */ if (mode == 0) { /* 201 */ ret = FloatPropertyEditor.make( /* 202 */ new Property(this, index, "Pitch rate damping")); /* 203 */ } else if (mode == 1) { /* 204 */ ret = new Float(this.pitch_damp); /* 205 */ } else if (mode == 2) /* 206 */ this.pitch_damp = ((Float)value).intValue(); /* 207 */ break; /* */ case 2: /* 209 */ if (mode == 0) { /* 210 */ ret = FloatPropertyEditor.make( /* 211 */ new Property(this, index, "Pitch min rate")); /* 212 */ } else if (mode == 1) { /* 213 */ ret = new Float(this.minpitch_vel); /* 214 */ } else if (mode == 2) /* 215 */ this.minpitch_vel = ((Float)value).intValue(); /* 216 */ break; /* */ case 3: /* 218 */ if (mode == 0) { /* 219 */ ret = FloatPropertyEditor.make( /* 220 */ new Property(this, index, /* 221 */ "Pitch rate increment for up/down arrow keys")); /* 222 */ } else if (mode == 1) { /* 223 */ ret = new Float(this.pitch_key); /* 224 */ } else if (mode == 2) /* 225 */ this.pitch_key = ((Float)value).intValue(); /* 226 */ break; /* */ default: /* 228 */ ret = super.properties(index, offset + 12, mode, value); /* */ } /* 230 */ return ret; /* */ } /* */ /* */ /* 234 */ private static Object cookie = new Object(); /* */ /* */ public void saveState(Saver s) throws IOException /* */ { /* 238 */ s.saveVersion(1, cookie); /* 239 */ super.saveState(s); /* 240 */ s.saveFloat(this.pitch_vel); /* 241 */ s.saveFloat(this.maxdvpitch); /* 242 */ s.saveFloat(this.pitch_damp); /* 243 */ s.saveFloat(this.minpitch_vel); /* 244 */ s.saveFloat(this.pitch_key); /* */ } /* */ /* */ public void restoreState(Restorer r) throws IOException, TooNewException /* */ { /* 249 */ switch (r.restoreVersion(cookie)) { /* */ case 0: /* 251 */ r.setOldFlag(); /* 252 */ super.restoreState(r); /* 253 */ r.restoreFloat(); /* 254 */ this.pitch_vel = r.restoreFloat(); /* 255 */ this.maxdvpitch = r.restoreFloat(); /* 256 */ this.pitch_damp = r.restoreFloat(); /* 257 */ this.minpitch_vel = r.restoreFloat(); /* 258 */ this.pitch_key = r.restoreFloat(); /* 259 */ break; /* */ case 1: /* 261 */ super.restoreState(r); /* 262 */ this.pitch_vel = r.restoreFloat(); /* 263 */ this.maxdvpitch = r.restoreFloat(); /* 264 */ this.pitch_damp = r.restoreFloat(); /* 265 */ this.minpitch_vel = r.restoreFloat(); /* 266 */ this.pitch_key = r.restoreFloat(); /* 267 */ break; /* */ default: /* 269 */ throw new TooNewException(); /* */ } /* */ /* */ } /* */ /* */ public void transferFrom(Enumeration oldMBs) /* */ { /* 276 */ while (oldMBs.hasMoreElements()) { /* 277 */ SuperRoot sr = (SuperRoot)oldMBs.nextElement(); /* 278 */ if ((sr instanceof PitchDriver)) { /* 279 */ PitchDriver pd = (PitchDriver)sr; /* 280 */ this.pitch_vel = pd.pitch_vel; /* 281 */ this.pitch_force = pd.pitch_force; /* 282 */ this.lastTime = pd.lastTime; /* 283 */ break; /* */ } /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\PitchDriver.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */