From e1e781bb2135ef78592226f1a3eaba4925702f1f Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 3 May 2021 16:38:41 -0700 Subject: :star: --- NET/worlds/scape/Transform.java | 602 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 602 insertions(+) create mode 100644 NET/worlds/scape/Transform.java (limited to 'NET/worlds/scape/Transform.java') diff --git a/NET/worlds/scape/Transform.java b/NET/worlds/scape/Transform.java new file mode 100644 index 0000000..b01c92c --- /dev/null +++ b/NET/worlds/scape/Transform.java @@ -0,0 +1,602 @@ +/* */ package NET.worlds.scape; +/* */ +/* */ import NET.worlds.console.Console; +/* */ import NET.worlds.console.Main; +/* */ import java.io.IOException; +/* */ import java.io.PrintStream; +/* */ import java.util.Vector; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public class Transform +/* */ extends SuperRoot +/* */ { +/* */ static +/* */ { +/* 82 */ nativeInit(); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* 89 */ private static Vector recycled = new Vector(); +/* */ private int transformID; +/* */ private float xScale; +/* */ private float yScale; +/* */ private float zScale; +/* */ +/* */ public static native void nativeInit(); +/* */ +/* 97 */ public static Transform make() { assert (Main.isMainThread()); +/* */ +/* 99 */ int last = recycled.size() - 1; +/* 100 */ if (last == -1) { +/* 101 */ return new Transform(); +/* */ } +/* 103 */ Transform ret = (Transform)recycled.elementAt(last); +/* 104 */ recycled.removeElementAt(last); +/* */ +/* 106 */ return ret; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void recycle() +/* */ { +/* 117 */ if (recycled.size() < 100) +/* */ { +/* */ +/* 120 */ makeIdentity(); +/* */ +/* 122 */ recycled.addElement(this); +/* */ } +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ protected Transform() +/* */ { +/* 131 */ makeIdentity(); +/* */ } +/* */ +/* */ +/* */ public native float getX(); +/* */ +/* */ +/* */ public native float getY(); +/* */ +/* */ +/* */ public native float getZ(); +/* */ +/* */ public Point3Temp getPosition() +/* */ { +/* 145 */ return Point3Temp.make(getX(), getY(), getZ()); +/* */ } +/* */ +/* */ public void setZ(float z) { +/* 149 */ moveTo(getX(), getY(), z); +/* */ } +/* */ +/* */ public float getScaleX() +/* */ { +/* 154 */ return this.xScale; +/* */ } +/* */ +/* */ public float getScaleY() +/* */ { +/* 159 */ return this.yScale; +/* */ } +/* */ +/* */ public float getScaleZ() +/* */ { +/* 164 */ return this.zScale; +/* */ } +/* */ +/* */ public Point3Temp getScale() +/* */ { +/* 169 */ return Point3Temp.make(getScaleX(), getScaleY(), getScaleZ()); +/* */ } +/* */ +/* */ +/* */ +/* */ public float getTotalScale() +/* */ { +/* 176 */ return (getScaleX() + getScaleY() + getScaleZ()) / 3.0F; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public native float getYaw(); +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public native float getPitch(); +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public native float getSpin(Point3Temp paramPoint3Temp); +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ protected void noteTransformChange() {} +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Transform raise(float z) +/* */ { +/* 225 */ return moveBy(0.0F, 0.0F, z); +/* */ } +/* */ +/* */ public Transform lower(float z) +/* */ { +/* 230 */ return moveBy(0.0F, 0.0F, -z); +/* */ } +/* */ +/* */ public Transform yaw(float a) +/* */ { +/* 235 */ return spin(0.0F, 0.0F, 1.0F, a); +/* */ } +/* */ +/* */ public Transform roll(float a) +/* */ { +/* 240 */ return spin(0.0F, 1.0F, 0.0F, a); +/* */ } +/* */ +/* */ public Transform pitch(float a) +/* */ { +/* 245 */ return spin(1.0F, 0.0F, 0.0F, a); +/* */ } +/* */ +/* */ public Transform scale(float s) +/* */ { +/* 250 */ return scale(s, s, s); +/* */ } +/* */ +/* */ protected void finalize() +/* */ { +/* 255 */ nativeFinalize(); +/* 256 */ super.finalize(); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public native Transform pre(Transform paramTransform); +/* */ +/* */ +/* */ +/* */ +/* */ public Transform post(Transform t) +/* */ { +/* 269 */ Point3Temp v = t.getScale(); +/* */ +/* */ +/* 272 */ if (!checkPostScale(v)) { +/* 273 */ return this; +/* */ } +/* */ +/* 276 */ this.xScale *= v.x; +/* 277 */ this.yScale *= v.y; +/* 278 */ this.zScale *= v.z; +/* */ +/* */ +/* 281 */ return postHelper(t); +/* */ } +/* */ +/* */ private boolean checkPostScale(Point3Temp v) +/* */ { +/* 286 */ if ((getSpin(Point3Temp.make()) == 0.0F) || ((v.x == v.y) && (v.y == v.z))) +/* 287 */ return true; +/* 288 */ Console.println(Console.message("non-uniform")); +/* 289 */ return false; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ private native Transform postHelper(Transform paramTransform); +/* */ +/* */ +/* */ +/* */ +/* */ public native Transform makeIdentity(); +/* */ +/* */ +/* */ +/* */ public Transform moveBy(Point3Temp p) +/* */ { +/* 306 */ return moveBy(p.x, p.y, p.z); +/* */ } +/* */ +/* */ +/* */ +/* */ public native Transform moveBy(float paramFloat1, float paramFloat2, float paramFloat3); +/* */ +/* */ +/* */ +/* */ public Transform moveTo(Point3Temp p) +/* */ { +/* 317 */ return moveTo(p.x, p.y, p.z); +/* */ } +/* */ +/* */ +/* */ +/* */ public native Transform moveTo(float paramFloat1, float paramFloat2, float paramFloat3); +/* */ +/* */ +/* */ +/* */ public native Transform premoveBy(float paramFloat1, float paramFloat2, float paramFloat3); +/* */ +/* */ +/* */ public native Transform scale(float paramFloat1, float paramFloat2, float paramFloat3); +/* */ +/* */ +/* */ public Transform scale(Point3Temp s) +/* */ { +/* 334 */ return scale(s.x, s.y, s.z); +/* */ } +/* */ +/* */ public void setScale(float x, float y, float z) +/* */ { +/* 339 */ scale(x / this.xScale, y / this.yScale, z / this.zScale); +/* */ } +/* */ +/* */ public void setScale(Point3Temp s) +/* */ { +/* 344 */ setScale(s.x, s.y, s.z); +/* */ } +/* */ +/* */ public Transform postscale(float x, float y, float z) +/* */ { +/* 349 */ return postscale(Point3Temp.make(x, y, z)); +/* */ } +/* */ +/* */ +/* */ public Transform postscale(Point3Temp s) +/* */ { +/* 355 */ if (!checkPostScale(s)) { +/* 356 */ return this; +/* */ } +/* */ +/* 359 */ this.xScale *= s.x; +/* 360 */ this.yScale *= s.y; +/* 361 */ this.zScale *= s.z; +/* */ +/* */ +/* */ +/* 365 */ return postscaleHelper(s.x, s.y, s.z); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ private native Transform postscaleHelper(float paramFloat1, float paramFloat2, float paramFloat3); +/* */ +/* */ +/* */ +/* */ +/* */ public Transform worldScale(float x, float y, float z) +/* */ { +/* 378 */ return worldScale(Point3Temp.make(x, y, z)); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Transform worldScale(Point3Temp s) +/* */ { +/* 387 */ if (!checkPostScale(s)) { +/* 388 */ return this; +/* */ } +/* */ +/* */ +/* 392 */ return scale(s); +/* */ } +/* */ +/* */ +/* */ public native Transform spin(float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4); +/* */ +/* */ public Transform spin(Point3Temp p, float a) +/* */ { +/* 400 */ return spin(p.x, p.y, p.z, a); +/* */ } +/* */ +/* */ public Transform postspin(Point3Temp axis, float a) +/* */ { +/* 405 */ return postspin(axis.x, axis.y, axis.z, a); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public native Transform postspin(float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4); +/* */ +/* */ +/* */ +/* */ public Transform worldSpin(float x, float y, float z, float a) +/* */ { +/* 417 */ return spin(worldVecToObjectVec(Point3Temp.make(x, y, z)), a); +/* */ } +/* */ +/* */ +/* */ private native void nativeFinalize(); +/* */ +/* */ public Transform getTransform() +/* */ { +/* 425 */ Transform t = make(); +/* 426 */ t.setTransform(this); +/* 427 */ return t; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public native void setTransform(Transform paramTransform); +/* */ +/* */ +/* */ +/* */ public native Transform invert(); +/* */ +/* */ +/* */ +/* */ public Transform getObjectToWorldMatrix() +/* */ { +/* 443 */ return getTransform(); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ private Point3Temp worldVecToObjectVec(Point3Temp worldVec) +/* */ { +/* 452 */ Transform inv = getObjectToWorldMatrix().invert(); +/* 453 */ Point3Temp p = Point3Temp.make(worldVec).vectorTimes(inv) +/* 454 */ .times(getScale()); +/* 455 */ inv.recycle(); +/* 456 */ return p; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public Object properties(int index, int offset, int mode, Object value) +/* */ throws NoSuchPropertyException +/* */ { +/* 465 */ Object ret = null; +/* 466 */ switch (index - offset) { +/* */ case 0: +/* 468 */ if (mode == 0) { +/* 469 */ ret = TransformPropertyEditor.make(new Property(this, index, +/* 470 */ "Transform")); +/* 471 */ } else if (mode == 1) { +/* 472 */ ret = getTransform(); +/* 473 */ } else if (mode == 2) +/* 474 */ setTransform((Transform)value); +/* 475 */ break; +/* */ default: +/* 477 */ ret = super.properties(index, offset + 1, mode, value); +/* */ } +/* 479 */ return ret; +/* */ } +/* */ +/* 482 */ private static Object classCookie = new Object(); +/* */ +/* */ +/* */ +/* */ +/* */ public void saveState(Saver s) +/* */ throws IOException +/* */ { +/* 490 */ s.saveVersion(2, classCookie); +/* 491 */ super.saveState(s); +/* 492 */ s.saveFloat(this.xScale); +/* 493 */ s.saveFloat(this.yScale); +/* 494 */ s.saveFloat(this.zScale); +/* 495 */ float[] guts = getGuts(); +/* 496 */ for (int i = 0; i < 16; i++) { +/* 497 */ s.saveFloat(guts[i]); +/* */ } +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void restoreState(Restorer r) +/* */ throws IOException, TooNewException +/* */ { +/* 508 */ switch (r.restoreVersion(classCookie)) { +/* */ case 2: +/* 510 */ super.restoreState(r); +/* 511 */ this.xScale = r.restoreFloat(); +/* 512 */ this.yScale = r.restoreFloat(); +/* 513 */ this.zScale = r.restoreFloat(); +/* 514 */ float[] guts = new float[16]; +/* 515 */ for (int i = 0; i < 16; i++) +/* 516 */ guts[i] = r.restoreFloat(); +/* 517 */ setGuts(guts); +/* 518 */ break; +/* */ +/* */ case 1: +/* 521 */ super.restoreState(r); +/* */ case 0: +/* 523 */ this.xScale = (this.yScale = this.zScale = r.restoreFloat()); +/* 524 */ float[] guts = new float[16]; +/* 525 */ for (int i = 0; i < 16; i++) +/* 526 */ guts[i] = r.restoreFloat(); +/* 527 */ setGuts(guts); +/* 528 */ break; +/* */ default: +/* 530 */ throw new TooNewException(); +/* */ } +/* */ +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ private native float[] getGuts(); +/* */ +/* */ +/* */ +/* */ +/* */ public native boolean isTransformEqual(Transform paramTransform); +/* */ +/* */ +/* */ +/* */ +/* */ private native void setGuts(float[] paramArrayOfFloat); +/* */ +/* */ +/* */ +/* */ +/* */ public String toTransformSubstring() +/* */ { +/* 555 */ Point3Temp axis = Point3Temp.make(); +/* 556 */ float angle = getSpin(axis); +/* 557 */ Point3Temp pos = getPosition(); +/* 558 */ if ((angle == 0.0F) && (this.xScale == 1.0F) && (this.yScale == 1.0F) && (this.zScale == 1.0F) && +/* 559 */ (pos.x == 0.0F) && (pos.y == 0.0F) && (pos.z == 0.0F)) +/* 560 */ return "[identity]"; +/* 561 */ return +/* */ +/* */ +/* */ +/* */ +/* 566 */ "[pos (" + pos + "), scale (" + ((this.xScale == this.yScale) && (this.yScale == this.zScale) ? this.xScale : new StringBuilder().append(this.xScale).append(",").append(this.yScale).append(",").append(this.zScale).toString()) + "), rot (" + axis + "@" + angle + ")]"; +/* */ } +/* */ +/* */ public String toString() +/* */ { +/* 571 */ return getName() + toTransformSubstring(); +/* */ } +/* */ +/* */ public Transform printGuts() +/* */ { +/* 576 */ float[] arr = getGuts(); +/* 577 */ assert (arr.length == 16); +/* 578 */ String[] strs = new String[16]; +/* 579 */ int maxStr = 0; +/* 580 */ for (int i = 0; i < 16; i++) { +/* 581 */ strs[i] = Float.toString(arr[i]); +/* 582 */ maxStr = Math.max(maxStr, strs[i].length()); +/* */ } +/* 584 */ for (int j = 0; j < 4; j++) { +/* 585 */ for (int k = 0; k < 4; k++) { +/* 586 */ String s = strs[(j * 4 + k)]; +/* 587 */ int pad = maxStr - s.length() + 1; +/* 588 */ System.out.print(s); +/* 589 */ while (pad-- != 0) +/* 590 */ System.out.print(" "); +/* */ } +/* 592 */ System.out.println(""); +/* */ } +/* 594 */ return this; +/* */ } +/* */ } + + +/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\Transform.class + * Java compiler version: 6 (50.0) + * JD-Core Version: 0.7.1 + */ \ No newline at end of file -- cgit v1.2.3