summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/BumpEventTemp.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/BumpEventTemp.java')
-rw-r--r--NET/worlds/scape/BumpEventTemp.java396
1 files changed, 396 insertions, 0 deletions
diff --git a/NET/worlds/scape/BumpEventTemp.java b/NET/worlds/scape/BumpEventTemp.java
new file mode 100644
index 0000000..a7b7153
--- /dev/null
+++ b/NET/worlds/scape/BumpEventTemp.java
@@ -0,0 +1,396 @@
+/* */ package NET.worlds.scape;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public class BumpEventTemp
+/* */ extends Event
+/* */ {
+/* 42 */ private static Recycler recycler = new Recycler();
+/* */ public Point3Temp fullPath;
+/* */ public Point3Temp path;
+/* */ public BoundBoxTemp bound;
+/* */ public float fraction;
+/* */ public Room postBumpRoom;
+/* */
+/* */ public static BumpEventTemp make(int time, WObject mover, Point3Temp motion)
+/* */ {
+/* 51 */ BumpEventTemp t = (BumpEventTemp)recycler.alloc();
+/* */
+/* 53 */ if (t == null) {
+/* 54 */ recycler.recycle(new BumpEventTemp(0, null));
+/* 55 */ t = (BumpEventTemp)recycler.alloc();
+/* */ }
+/* */
+/* */
+/* 59 */ assert (t.source == null);
+/* */
+/* 61 */ t.time = time;
+/* 62 */ t.source = mover;
+/* */
+/* */
+/* */
+/* */
+/* 67 */ t.fullPath = Point3Temp.make(motion);
+/* 68 */ t.path = t.fullPath;
+/* 69 */ t.sourceAt = ((WObject)t.source).getWorldPosition();
+/* 70 */ t.sourceBoxMinus = ((WObject)t.source).getBoundBox();
+/* 71 */ t.sourceBoxMinus.lo.minus(t.sourceAt);
+/* 72 */ t.sourceBoxMinus.hi.minus(t.sourceAt);
+/* */
+/* 74 */ t.setPathFraction(1.0F);
+/* */
+/* */
+/* 77 */ Room r = mover.getRoom();
+/* 78 */ if (r.getBumpable()) {
+/* 79 */ r.detectBump(t);
+/* */ }
+/* 81 */ return t;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void recycle()
+/* */ {
+/* 91 */ this.time = 0;
+/* 92 */ this.source = null;
+/* 93 */ this.target = null;
+/* 94 */ this.receiver = null;
+/* */
+/* 96 */ this.postBumpRoom = null;
+/* 97 */ this.postBumpPath = null;
+/* 98 */ this.postBumpPosition = null;
+/* */ }
+/* */
+/* */ private BumpEventTemp(int time, Object source) {
+/* 102 */ super(time, source, null);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Transform postBumpPosition;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Point3Temp postBumpPath;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Point3Temp sourceAt;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public BoundBoxTemp sourceBoxMinus;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Point3Temp bumpNormal;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void setPathFraction(float fraction)
+/* */ {
+/* 164 */ this.fraction = fraction;
+/* 165 */ this.path = Point3Temp.make(this.path).times(fraction);
+/* */
+/* 167 */ this.bound = BoundBoxTemp.make(this.sourceAt, Point3Temp.make(this.sourceAt)
+/* 168 */ .plus(this.path));
+/* 169 */ this.bound.lo.plus(this.sourceBoxMinus.lo);
+/* 170 */ this.bound.hi.plus(this.sourceBoxMinus.hi);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public float isCollision(Point3Temp left, Point3Temp d, Point3Temp start, Point3Temp motion)
+/* */ {
+/* 198 */ double D = motion.x * -d.y + motion.y * d.x;
+/* */
+/* */
+/* 201 */ if (D > 0.0D) {
+/* 202 */ Point3Temp C = Point3Temp.make(start).minus(left);
+/* */
+/* 204 */ double betaNum = C.x * d.y - C.y * d.x;
+/* */
+/* 206 */ double alphaNum = C.x * motion.y - motion.x * C.y;
+/* */
+/* 208 */ if ((alphaNum >= 0.0D) && (alphaNum <= D) && (betaNum >= 0.0D) &&
+/* 209 */ (betaNum <= D)) {
+/* 210 */ return (float)(betaNum / D);
+/* */ }
+/* */
+/* 213 */ return -2.0F;
+/* */ }
+/* */
+/* 216 */ return -1.0F;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public float hitPlane(WObject o, Point3Temp left, Point3Temp d)
+/* */ {
+/* 227 */ float dist = isCollision(left, d, this.sourceAt, this.path);
+/* 228 */ if (dist >= 0.0F) {
+/* 229 */ this.target = o;
+/* */
+/* 231 */ setPathFraction(dist);
+/* 232 */ this.bumpNormal = Point3Temp.make(d.y, -d.x, 0.0F).normalize();
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 250 */ this.path.plus(Point3Temp.make(this.path).normalize().times(0.2F));
+/* */ }
+/* */
+/* 253 */ return dist;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean hitRegion(WObject o, Point3Temp left, Point3Temp d, Point3Temp extent)
+/* */ {
+/* 275 */ float dist = hitPlane(o, left, d);
+/* 276 */ if (dist >= 0.0F) {
+/* 277 */ return true;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 284 */ if (dist == -1.0F) {
+/* 285 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 293 */ Point3Temp right = Point3Temp.make(left).plus(d);
+/* 294 */ Point3Temp minusD = Point3Temp.make().minus(d);
+/* 295 */ Point3Temp minusExtent = Point3Temp.make().minus(extent);
+/* 296 */ if ((dist = isCollision(right, minusD, this.sourceAt, minusExtent)) > 0.0F) {
+/* 297 */ this.target = o;
+/* */
+/* 299 */ setPathFraction(0.0F);
+/* 300 */ this.bumpNormal = minusExtent;
+/* 301 */ return true;
+/* */ }
+/* */
+/* 304 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean hitTriRegion(WObject o, Point3Temp left, Point3Temp d, Point3Temp extent)
+/* */ {
+/* 323 */ float dist = hitPlane(o, left, d);
+/* 324 */ if (dist >= 0.0F) {
+/* 325 */ return true;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 332 */ if (dist == -1.0F) {
+/* 333 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 340 */ Point3Temp right = Point3Temp.make(left).plus(d);
+/* 341 */ Point3Temp minusD = Point3Temp.make().minus(d);
+/* 342 */ Point3Temp minusExtent = Point3Temp.make().minus(extent);
+/* 343 */ if ((dist = isCollision(right, minusD, this.sourceAt, minusExtent)) > 0.0F)
+/* */ {
+/* */
+/* */
+/* */
+/* 348 */ float dx = this.sourceAt.x - (left.x + d.x / 2.0F);
+/* 349 */ float dy = this.sourceAt.y - (left.y + d.y / 2.0F);
+/* 350 */ float squaredDistFromMid = dx * dx + dy * dy;
+/* */
+/* 352 */ dx = this.sourceAt.x - (left.x + extent.x);
+/* 353 */ dy = this.sourceAt.y - (left.y + extent.y);
+/* 354 */ float squaredDistFromA = dx * dx + dy * dy;
+/* 355 */ if (squaredDistFromA < squaredDistFromMid) {
+/* 356 */ return false;
+/* */ }
+/* 358 */ dx = this.sourceAt.x - (right.x + extent.x);
+/* 359 */ dy = this.sourceAt.y - (right.y + extent.y);
+/* 360 */ float squaredDistFromB = dx * dx + dy * dy;
+/* 361 */ if (squaredDistFromB < squaredDistFromMid) {
+/* 362 */ return false;
+/* */ }
+/* 364 */ this.target = o;
+/* */
+/* 366 */ setPathFraction(0.0F);
+/* 367 */ this.bumpNormal = minusExtent;
+/* 368 */ return true;
+/* */ }
+/* */
+/* 371 */ return false;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean deliver(Object o)
+/* */ {
+/* 382 */ if ((o instanceof BumpHandler)) {
+/* 383 */ return ((BumpHandler)o).handle(this);
+/* */ }
+/* */
+/* */
+/* */
+/* 388 */ return false;
+/* */ }
+/* */ }
+
+
+/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\BumpEventTemp.class
+ * Java compiler version: 6 (50.0)
+ * JD-Core Version: 0.7.1
+ */ \ No newline at end of file