summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/RollingAttribute.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/RollingAttribute.java')
-rw-r--r--NET/worlds/scape/RollingAttribute.java301
1 files changed, 301 insertions, 0 deletions
diff --git a/NET/worlds/scape/RollingAttribute.java b/NET/worlds/scape/RollingAttribute.java
new file mode 100644
index 0000000..0ff6d82
--- /dev/null
+++ b/NET/worlds/scape/RollingAttribute.java
@@ -0,0 +1,301 @@
+/* */ package NET.worlds.scape;
+/* */
+/* */ import java.io.DataInputStream;
+/* */ import java.io.DataOutputStream;
+/* */ import java.io.IOException;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public class RollingAttribute
+/* */ extends Attribute
+/* */ {
+/* 26 */ RollBehavior rb = new RollBehavior();
+/* */
+/* */
+/* */
+/* */
+/* 31 */ public float initialKickVel = 200.0F;
+/* */
+/* */ public RollingAttribute(int attrID) {
+/* 34 */ super(attrID);
+/* 35 */ this.rb.linearDamp = 0.95F;
+/* 36 */ this.rb.rollFactor = 1.0F;
+/* 37 */ this.rb.setNotifyAttribute(this);
+/* */ }
+/* */
+/* */ public RollingAttribute()
+/* */ {
+/* 42 */ this.rb.linearDamp = 0.8F;
+/* 43 */ this.rb.setNotifyAttribute(this);
+/* */ }
+/* */
+/* */
+/* 47 */ private Point3 kp = new Point3();
+/* 48 */ private float kv = 0.0F;
+/* 49 */ private Point3 kd = new Point3();
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void set(Point3Temp p, float v, Point3Temp d)
+/* */ {
+/* 59 */ if ((this.kp.x == p.x) && (this.kp.y == p.y) && (this.kp.x == p.z)) {
+/* 60 */ return;
+/* */ }
+/* 62 */ this.kp.x = p.x;
+/* 63 */ this.kp.y = p.y;
+/* 64 */ this.kp.z = p.z;
+/* 65 */ this.kv = v;
+/* 66 */ this.kd.x = d.x;
+/* 67 */ this.kd.y = d.y;
+/* 68 */ this.kd.z = d.z;
+/* */
+/* 70 */ ((WObject)getOwner().getOwner()).moveTo(this.kp);
+/* 71 */ this.rb.linearVel = this.kv;
+/* 72 */ this.rb.setDir(this.kd);
+/* */
+/* 74 */ noteChange();
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void notifyStopped()
+/* */ {
+/* 84 */ WObject ball = (WObject)((Sharer)getOwner()).getOwner();
+/* 85 */ Point3Temp pos = ball.getPosition();
+/* */
+/* 87 */ set(pos, 0.0F, Point3Temp.make(0.0F, 0.0F, 0.0F));
+/* */ }
+/* */
+/* */
+/* */
+/* */ public void get(Point3Temp p, float v, Point3Temp d)
+/* */ {
+/* 94 */ p.x = this.kp.x;
+/* 95 */ p.y = this.kp.y;
+/* 96 */ p.z = this.kp.z;
+/* 97 */ v = this.kv;
+/* 98 */ d.x = this.kd.x;
+/* 99 */ d.y = this.kd.y;
+/* 100 */ d.z = this.kd.z;
+/* */ }
+/* */
+/* */ protected void noteAddingTo(SuperRoot owner)
+/* */ {
+/* 105 */ WObject parent = (WObject)owner.getOwner();
+/* 106 */ parent.addHandler(this.rb);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean handle(BumpEventTemp b)
+/* */ {
+/* 130 */ if ((b.target != b.receiver) ||
+/* 131 */ (this.rb.linearVel > 0.0F))
+/* */ {
+/* */
+/* 134 */ if ((b.target instanceof Camera))
+/* */ {
+/* */
+/* 137 */ double dx = this.rb.dir.x;
+/* 138 */ double dy = this.rb.dir.y;
+/* 139 */ Math.atan2(dx, dy);
+/* */
+/* 141 */ double theta = dy + 60.0D * Math.random() - 30.0D;
+/* 142 */ double r = dx;
+/* 143 */ dx = r * Math.cos(theta * 3.141592653589793D / 180.0D);
+/* 144 */ dy = r * Math.sin(theta * 3.141592653589793D / 180.0D);
+/* */
+/* 146 */ this.rb.dir.x = ((float)dx);
+/* 147 */ this.rb.dir.y = ((float)dy);
+/* */ }
+/* 149 */ this.rb.processBumpEvent(b);
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 156 */ if (((b.target instanceof Camera)) || ((b.source instanceof Camera))) {
+/* 157 */ Point3Temp pos = ((WObject)((Sharer)getOwner()).getOwner())
+/* 158 */ .getWorldPosition();
+/* 159 */ set(pos, this.rb.linearVel, this.rb.dir);
+/* */ }
+/* */ }
+/* 162 */ else if (this.rb.linearVel == 0.0F)
+/* */ {
+/* */
+/* 165 */ Point3Temp pos = b.target.getWorldPosition();
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 175 */ WObject kicker = (WObject)b.source;
+/* 176 */ float alpha = kicker.getYaw();
+/* 177 */ Point3Temp kpos = kicker.getWorldPosition();
+/* 178 */ double dx = kpos.x - pos.x;
+/* 179 */ double dy = kpos.y - pos.y;
+/* 180 */ Math.atan2(dx, dy);
+/* */
+/* */
+/* */
+/* 184 */ float kickang = (float)((360.0F - alpha + 90.0F) * 3.141592653589793D / 180.0D);
+/* */
+/* 186 */ Point3Temp kickdir = Point3Temp.make((float)Math.cos(kickang),
+/* 187 */ (float)Math.sin(kickang), 0.0F);
+/* */
+/* */
+/* */
+/* 191 */ pos.x += kickdir.x;
+/* 192 */ pos.y += kickdir.y;
+/* */
+/* */
+/* 195 */ set(pos, this.initialKickVel, kickdir);
+/* */ }
+/* */
+/* 198 */ return true;
+/* */ }
+/* */
+/* */ public void generateNetData(DataOutputStream s) throws IOException
+/* */ {
+/* 203 */ s.writeFloat(this.kp.x);
+/* 204 */ s.writeFloat(this.kp.y);
+/* 205 */ s.writeFloat(this.kp.z);
+/* 206 */ s.writeFloat(this.kv);
+/* 207 */ s.writeFloat(this.kd.x);
+/* 208 */ s.writeFloat(this.kd.y);
+/* 209 */ s.writeFloat(this.kd.z);
+/* */ }
+/* */
+/* */ public void setFromNetData(DataInputStream ds, int len) throws IOException
+/* */ {
+/* 214 */ Point3Temp pos = Point3Temp.make();
+/* 215 */ float vel = 0.0F;
+/* 216 */ Point3Temp dir = Point3Temp.make();
+/* */
+/* 218 */ pos.x = ds.readFloat();
+/* 219 */ pos.y = ds.readFloat();
+/* 220 */ pos.z = ds.readFloat();
+/* 221 */ vel = ds.readFloat();
+/* 222 */ dir.x = ds.readFloat();
+/* 223 */ dir.y = ds.readFloat();
+/* 224 */ dir.z = ds.readFloat();
+/* 225 */ set(pos, vel, dir);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public Object properties(int index, int offset, int mode, Object value)
+/* */ throws NoSuchPropertyException
+/* */ {
+/* 234 */ Object ret = null;
+/* 235 */ switch (index - offset) {
+/* */ case 0:
+/* 237 */ if (mode == 0) {
+/* 238 */ ret = FloatPropertyEditor.make(new Property(this, index,
+/* 239 */ "Roll Factor"));
+/* 240 */ } else if (mode == 1) {
+/* 241 */ ret = new Float(this.rb.rollFactor);
+/* 242 */ } else if (mode == 2)
+/* 243 */ this.rb.rollFactor = ((Float)value).floatValue();
+/* 244 */ break;
+/* */ case 1:
+/* 246 */ if (mode == 0) {
+/* 247 */ ret = FloatPropertyEditor.make(new Property(this, index,
+/* 248 */ "Initial Kick Velocity"));
+/* 249 */ } else if (mode == 1) {
+/* 250 */ ret = new Float(this.initialKickVel);
+/* 251 */ } else if (mode == 2)
+/* 252 */ this.initialKickVel = ((Float)value).floatValue();
+/* 253 */ break;
+/* */ default:
+/* 255 */ ret = super.properties(index, offset + 2, mode, value);
+/* */ }
+/* 257 */ return ret;
+/* */ }
+/* */
+/* */
+/* 261 */ private static Object classCookie = new Object();
+/* */
+/* */ public void saveState(Saver s) throws IOException
+/* */ {
+/* 265 */ s.saveVersion(1, classCookie);
+/* 266 */ super.saveState(s);
+/* */
+/* 268 */ s.saveFloat(this.initialKickVel);
+/* 269 */ s.saveFloat(this.rb.rollFactor);
+/* */ }
+/* */
+/* */ public void restoreState(Restorer r) throws IOException, TooNewException {
+/* */ float threshold;
+/* 274 */ switch (r.restoreVersion(classCookie)) {
+/* */ case 0:
+/* 276 */ super.restoreState(r);
+/* 277 */ this.initialKickVel = r.restoreFloat();
+/* 278 */ threshold = r.restoreFloat();
+/* 279 */ break;
+/* */ case 1:
+/* 281 */ super.restoreState(r);
+/* 282 */ this.initialKickVel = r.restoreFloat();
+/* 283 */ this.rb.rollFactor = r.restoreFloat();
+/* 284 */ break;
+/* */ default:
+/* 286 */ throw new TooNewException();
+/* */ }
+/* */ }
+/* */
+/* */ public String toString()
+/* */ {
+/* 292 */ return
+/* 293 */ super.toString() + " [From " + this.kp + " with velocity " + this.kv + " toward " + this.kd + "] ";
+/* */ }
+/* */ }
+
+
+/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\RollingAttribute.class
+ * Java compiler version: 6 (50.0)
+ * JD-Core Version: 0.7.1
+ */ \ No newline at end of file