diff options
Diffstat (limited to 'NET/worlds/scape/Portal.java')
| -rw-r--r-- | NET/worlds/scape/Portal.java | 1334 |
1 files changed, 1334 insertions, 0 deletions
diff --git a/NET/worlds/scape/Portal.java b/NET/worlds/scape/Portal.java new file mode 100644 index 0000000..32ffe91 --- /dev/null +++ b/NET/worlds/scape/Portal.java @@ -0,0 +1,1334 @@ +/* */ package NET.worlds.scape; +/* */ +/* */ import NET.worlds.console.Console; +/* */ import NET.worlds.console.Main; +/* */ import NET.worlds.console.MainCallback; +/* */ import NET.worlds.network.NetUpdate; +/* */ import NET.worlds.network.URL; +/* */ import java.awt.Color; +/* */ import java.io.IOException; +/* */ import java.io.PrintStream; +/* */ import java.text.MessageFormat; +/* */ import java.util.Vector; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public class Portal +/* */ extends Rect +/* */ implements BumpHandler, Prerenderable, Postrenderable, Properties, Persister, LoadedURLSelf +/* */ { +/* */ static final int UNCONNECTED = -1; +/* */ static final int INITIAL = 0; +/* */ static final int DOWNLOADING = 1; +/* */ static final int DONE = 2; +/* 186 */ private int _state = -1; +/* */ +/* */ +/* 189 */ private Portal _farSidePortal = null; +/* */ +/* */ +/* 192 */ String _farSidePortalName = null; +/* */ +/* */ +/* 195 */ private boolean _farSideIsPortal = true; +/* */ +/* 197 */ private boolean _allowDownload = true; +/* */ +/* */ +/* */ +/* */ +/* */ +/* 203 */ String _farSideRoomName = null; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* 210 */ private URL _farSideWorld = null; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* 219 */ private Room _farSideRoom = null; +/* */ +/* 221 */ protected Room getFarSideRoom() { return this._farSideRoom; } +/* */ +/* */ +/* */ +/* */ private float _farx; +/* */ +/* */ +/* */ private float _fary; +/* */ +/* */ +/* */ private float _farz; +/* */ +/* */ +/* */ private float _fartheta; +/* */ +/* */ +/* */ private float _userFarx; +/* */ +/* */ +/* */ private float _userFary; +/* */ +/* */ private float _userFarz; +/* */ +/* */ private float _userFartheta; +/* */ +/* */ private boolean frozeFrameEvents; +/* */ +/* */ public Portal(float w, float h) +/* */ { +/* 250 */ super(w, h, null); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal(float llx, float lly, float llz, float urx, float ury, float urz) +/* */ { +/* 261 */ super(llx, lly, llz, urx, ury, urz, null); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void setFarSideInfo(URL world, String room, String portal) +/* */ { +/* 275 */ this._farSideWorld = world; +/* 276 */ this._farSideRoomName = room; +/* 277 */ this._farSidePortalName = portal; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal(Point3Temp llc, Point3Temp urc) +/* */ { +/* 286 */ super(llc, urc, null); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public static Portal findByName(Room r, String portalName) +/* */ { +/* 296 */ SuperRoot sr = SuperRoot.nameSearch( +/* 297 */ r.getDeepOwned(), +/* 298 */ portalName); +/* 299 */ if ((sr != null) && ((sr instanceof Portal))) +/* 300 */ return (Portal)sr; +/* 301 */ return null; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal connectTo(Portal far) +/* */ { +/* 311 */ assert (this._state == -1); +/* 312 */ this._farSideIsPortal = true; +/* 313 */ this._farSidePortal = far; +/* 314 */ newFarSide(); +/* 315 */ return this; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal connectTo(URL farworld, String farroom, Point3Temp llc, Point3Temp urc) +/* */ { +/* 327 */ return connectTo(farworld, farroom, llc.x, llc.y, llc.z, +/* 328 */ urc.x, urc.y, urc.z); +/* */ } +/* */ +/* */ +/* */ public Portal connectTo(Room r, Point3Temp llc, Point3Temp urc) +/* */ { +/* 334 */ System.out.println("Warning! Old style Portal.connectTo called!"); +/* 335 */ Thread.dumpStack(); +/* */ +/* 337 */ assert (this._state == -1); +/* 338 */ this._farSideWorld = r.getWorld().getSourceURL(); +/* 339 */ this._farSideRoomName = r.getName(); +/* 340 */ setFarSideRoom(r); +/* 341 */ this._farx = (this._userFarx = urc.x); +/* 342 */ this._fary = (this._userFary = urc.y); +/* 343 */ this._farz = (this._userFarz = llc.z); +/* 344 */ this._userFartheta = +/* 345 */ ((float)(Math.atan2(llc.y - urc.y, llc.x - urc.x) * 180.0D / 3.141592653589793D)); +/* 346 */ this._fartheta = this._userFartheta; +/* 347 */ this._state = 2; +/* 348 */ this._farSideIsPortal = false; +/* */ +/* 350 */ setTransform(); +/* 351 */ updateVisible(); +/* 352 */ return this; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal connectTo(URL farworld, String farroom, float llx, float lly, float llz, float urx, float ury, float urz) +/* */ { +/* 365 */ float theta = (float)(Math.atan2(lly - ury, llx - urx) * 180.0D / 3.141592653589793D); +/* 366 */ return connectTo(farworld, farroom, urx, ury, llz, theta); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal connectTo(URL farworld, String farroom, float x, float y, float z, float theta) +/* */ { +/* 384 */ assert (this._state == -1); +/* 385 */ this._farSideWorld = farworld; +/* 386 */ this._farSideRoomName = farroom; +/* 387 */ this._farx = (this._userFarx = x); +/* 388 */ this._fary = (this._userFary = y); +/* 389 */ this._farz = (this._userFarz = z); +/* 390 */ this._fartheta = (this._userFartheta = theta); +/* 391 */ this._farSideIsPortal = false; +/* 392 */ reset(); +/* 393 */ return this; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal remotify() +/* */ { +/* 403 */ RPAction rpa = new RPAction(); +/* 404 */ addAction(rpa); +/* 405 */ addHandler(new SameRoomSensor(rpa)); +/* 406 */ return this; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ private void findFarSidePortal(boolean showmessage) +/* */ { +/* 414 */ if (this._farSideIsPortal) { +/* 415 */ if (this._farSidePortalName == null) { +/* 416 */ this._state = -1; +/* */ } else { +/* 418 */ this._farSidePortal = null; +/* */ +/* 420 */ Vector<Portal> portals = this._farSideRoom.getOutgoingPortals(); +/* 421 */ int len = portals.size(); +/* 422 */ for (int i = 0; i < len; i++) { +/* 423 */ Portal p = (Portal)portals.elementAt(i); +/* 424 */ if (p.getName().equals(this._farSidePortalName)) { +/* 425 */ this._farSidePortal = p; +/* 426 */ break; +/* */ } +/* */ } +/* */ +/* 430 */ if (this._farSidePortal == null) { +/* 431 */ if (showmessage) { +/* 432 */ Object[] arguments = { new String(getName()), +/* 433 */ new String(this._farSideWorld), +/* 434 */ new String(this._farSideRoomName), +/* 435 */ new String(this._farSidePortalName) }; +/* 436 */ Console.println(MessageFormat.format( +/* 437 */ Console.message("Portal-doesnt"), arguments)); +/* */ } +/* 439 */ this._state = -1; +/* */ } +/* */ } +/* */ +/* 443 */ if (this._farSidePortal != null) +/* 444 */ newFarSide(); +/* */ } else { +/* 446 */ this._farSidePortal = null; +/* 447 */ this._farx = this._userFarx; +/* 448 */ this._fary = this._userFary; +/* 449 */ this._farz = this._userFarz; +/* 450 */ this._fartheta = this._userFartheta; +/* 451 */ this._p2pxform = null; +/* */ } +/* */ } +/* */ +/* */ +/* */ public void reset() +/* */ { +/* 458 */ reset(true); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void reset(boolean showmessage) +/* */ { +/* 477 */ setFarSideRoom(null); +/* 478 */ if ((this._farSideRoomName != null) && ((this.flags & 0x40000) == 0)) { +/* 479 */ if (this._farSideWorld == null) { +/* 480 */ Room r = getRoom(); +/* 481 */ if (r != null) { +/* 482 */ World w = r.getWorld(); +/* 483 */ if (w != null) { +/* 484 */ setFarSideRoom(w.getRoom(this._farSideRoomName)); +/* */ } +/* */ } +/* 487 */ if (this._farSideRoom != null) { +/* 488 */ findFarSidePortal(showmessage); +/* */ } else { +/* 490 */ this._state = -1; +/* 491 */ this._farSidePortal = null; +/* 492 */ if (showmessage) { +/* 493 */ Object[] arguments = { new String(getName()), +/* 494 */ new String(getRoom()), +/* 495 */ new String(this._farSideRoomName), +/* 496 */ new String(this._farSidePortalName) }; +/* 497 */ Console.println(MessageFormat.format( +/* 498 */ Console.message("Room-doesnt"), arguments)); +/* */ } +/* */ } +/* */ } +/* */ else { +/* 503 */ if (this._farSidePortalName == null) +/* 504 */ this._farSidePortal = null; +/* 505 */ this._state = 0; +/* */ } +/* */ } +/* */ else { +/* 509 */ this._state = -1; +/* */ } +/* 511 */ setTransform(); +/* 512 */ updateVisible(); +/* */ } +/* */ +/* */ public void discard() { +/* 516 */ Portal far = this._farSidePortal; +/* 517 */ setFarSideRoom(null); +/* */ +/* */ +/* 520 */ this._state = 0; +/* */ +/* 522 */ super.discard(); +/* */ +/* 524 */ if ((far != null) && (far.getRoom() != null) && (this._farSideWorld != null)) { +/* 525 */ far.reset(); +/* */ } +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ private void recomputeFarPosition() +/* */ { +/* 535 */ setFarSideRoom(this._farSidePortal.getRoom()); +/* 536 */ if (this._farSideRoom != null) +/* 537 */ this._farSideRoomName = this._farSideRoom.getName(); +/* 538 */ this._farSidePortalName = this._farSidePortal.getName(); +/* 539 */ Point3Temp farext = Point3Temp.make(1.0F, 0.0F, 1.0F) +/* 540 */ .vectorTimes(this._farSidePortal); +/* 541 */ Point3Temp farlrc = this._farSidePortal.getPosition(); +/* 542 */ if ((this.flags & 0x4) == 0) { +/* 543 */ farlrc.x += farext.x; +/* 544 */ farlrc.y += farext.y; +/* */ } +/* */ +/* 547 */ this._farx = farlrc.x; +/* 548 */ this._fary = farlrc.y; +/* 549 */ this._farz = farlrc.z; +/* */ +/* */ +/* */ +/* 553 */ this._fartheta = ((-this._farSidePortal.getYaw() + 180.0F) % 360.0F); +/* */ +/* 555 */ this._farChangeNum = this._farSidePortal._changeNum; +/* */ +/* 557 */ this._p2pxform = null; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public Portal biconnect(Portal far) +/* */ { +/* 565 */ connectTo(far); +/* 566 */ far.connectTo(this); +/* 567 */ return this; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void disconnect() +/* */ { +/* 576 */ this._farSideWorld = null; +/* 577 */ this._farSideRoomName = null; +/* 578 */ setFarSideRoom(null); +/* 579 */ this._farSidePortal = null; +/* 580 */ this._farSideIsPortal = true; +/* 581 */ this._farSidePortalName = null; +/* 582 */ this._state = -1; +/* 583 */ updateVisible(); +/* 584 */ discardTransform(); +/* */ } +/* */ +/* */ +/* */ public void bidisconnect() +/* */ { +/* 590 */ this._farSidePortal.disconnect(); +/* 591 */ disconnect(); +/* */ } +/* */ +/* */ +/* */ public boolean connected() +/* */ { +/* 597 */ return (this._farSidePortal != null) || ( +/* 598 */ (this._farSideRoomName != null) && (!this._farSideIsPortal)); +/* */ } +/* */ +/* */ public boolean active() +/* */ { +/* 603 */ return this._state == 2; +/* */ } +/* */ +/* */ public boolean unconnected() +/* */ { +/* 608 */ return this._state == -1; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public boolean remote() +/* */ { +/* 616 */ return this._farSideWorld != null; +/* */ } +/* */ +/* */ public Portal farSide() +/* */ { +/* 621 */ return this._farSideIsPortal ? this._farSidePortal : null; +/* */ } +/* */ +/* */ public Room farSideRoom() +/* */ { +/* 626 */ return this._farSideRoom; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* 632 */ private void setFarSideRoom(Room far) { this._farSideRoom = far; } +/* */ +/* */ protected void noteAddingTo(SuperRoot s) { +/* 635 */ addToRoom(s); +/* 636 */ super.noteAddingTo(s); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ private void addToRoom(SuperRoot s) +/* */ { +/* 644 */ if ((s instanceof WObject)) { +/* 645 */ Room r = ((WObject)s).getRoom(); +/* 646 */ if (r != null) +/* 647 */ r.addOutgoingPortal(this); +/* */ } +/* */ } +/* */ +/* */ public void detach() { +/* 652 */ Room r = getRoom(); +/* 653 */ if (r != null) +/* 654 */ r.removeOutgoingPortal(this); +/* 655 */ super.detach(); +/* */ } +/* */ +/* */ public String farRoom() +/* */ { +/* 660 */ return this._farSideRoomName; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public URL farWorld() +/* */ { +/* 669 */ return this._farSideWorld; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Transform p2pXform() +/* */ { +/* 682 */ return this._p2pxform; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* 689 */ private Transform _p2pxform = null; +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ protected void addRwChildren(WObject parent) +/* */ { +/* 700 */ if ((this._farSidePortal != null) && ((this._farSidePortal instanceof TwoWayPortal)) && +/* 701 */ (!this._farSidePortal.isActive())) +/* */ { +/* */ +/* */ +/* 705 */ Main.register(new MainCallback() { +/* */ public void mainCallback() { +/* 707 */ Portal.this.detach(); +/* 708 */ Main.unregister(this); +/* */ } +/* */ }); +/* */ } +/* */ +/* 713 */ super.addRwChildren(parent); +/* */ +/* 715 */ updateVisible(); +/* 716 */ setTransform(); +/* */ +/* */ +/* 719 */ getRoom().prependPrerenderHandler(this); +/* 720 */ getRoom().prependPostrenderHandler(this); +/* */ } +/* */ +/* */ +/* */ protected void markVoid() +/* */ { +/* 726 */ getRoom().removePrerenderHandler(this); +/* 727 */ getRoom().removePostrenderHandler(this); +/* */ +/* 729 */ super.markVoid(); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* 738 */ private int _changeNum = 0; +/* 739 */ private int _farChangeNum = -1; +/* */ +/* */ static BumpCalc standardPassthroughBumpCalc; +/* */ +/* */ +/* */ protected void noteTransformChange() +/* */ { +/* 746 */ this._changeNum += 1; +/* 747 */ super.noteTransformChange(); +/* 748 */ discardTransform(); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void discardTransform() +/* */ { +/* 772 */ if (this._p2pxform != null) +/* */ { +/* 774 */ this._p2pxform = null; +/* 775 */ if (this._farSidePortal != null) { +/* 776 */ this._farSidePortal.discardTransform(); +/* */ } +/* */ } +/* */ } +/* */ +/* */ static +/* */ { +/* 753 */ nativeInit(); +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* 791 */ standardPassthroughBumpCalc = new PassthroughBumpCalc(); +/* */ +/* */ +/* 794 */ standardPassthroughBumpCalc.setName("defaultPassthroughBumpCalc"); +/* */ } +/* */ +/* */ +/* */ public BumpCalc getBumpCalc(BumpEventTemp b) +/* */ { +/* 800 */ if ((this._farSidePortal != null) && +/* 801 */ ((b.source instanceof Camera)) && ( +/* 802 */ ((this.flags & 0x4) != 0) || +/* 803 */ (!this._farSidePortal.active()) || +/* 804 */ (this._farSidePortal._p2pxform == null) || +/* 805 */ (!this._farSidePortal.getVisible()))) { +/* 806 */ return super.getBumpCalc(b); +/* */ } +/* 808 */ if (this.bumpCalc == null) { +/* 809 */ if (this._farSideRoomName == null) { +/* 810 */ return standardPassthroughBumpCalc; +/* */ } +/* 812 */ if ((connected()) && ((this.flags & 0x40000) == 0)) { +/* 813 */ if ((this._farSideRoom == null) && +/* 814 */ (this._farSideIsPortal) && +/* 815 */ (this._farSidePortal != null)) { +/* 816 */ setFarSideRoom(this._farSidePortal.getRoom()); +/* */ } +/* 818 */ if ((this._farSideRoom != null) && (this._farSideRoom.isActive())) { +/* 819 */ return standardPassthroughBumpCalc; +/* */ } +/* */ } +/* 822 */ return super.getBumpCalc(b); +/* */ } +/* */ +/* 825 */ return this.bumpCalc; +/* */ } +/* */ +/* */ +/* */ +/* */ public boolean handle(BumpEventTemp b) +/* */ { +/* 832 */ if ((this._farSidePortal != null) && +/* 833 */ ((b.source instanceof Camera)) && ( +/* 834 */ ((this.flags & 0x4) != 0) || +/* 835 */ (!this._farSidePortal.active()) || +/* 836 */ (this._farSidePortal._p2pxform == null) || +/* 837 */ (!this._farSidePortal.getVisible()))) { +/* 838 */ return true; +/* */ } +/* 840 */ portalBumpHandler(b); +/* 841 */ return true; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public void portalBumpHandler(BumpEventTemp b) +/* */ { +/* 851 */ if ((b.target != this) || (this._state != 2)) { +/* 852 */ if ((this._state == 1) && (this._farSideWorld != null) && +/* 853 */ (!this._farSideWorld.isRemote()) && (!this.frozeFrameEvents)) { +/* 854 */ this.frozeFrameEvents = true; +/* 855 */ Console.setFreezeFrameEvents(true); +/* */ } +/* */ +/* 858 */ return; +/* */ } +/* */ +/* */ +/* 862 */ if ((this._farSideRoom == null) && +/* 863 */ (this._farSideIsPortal) && (this._farSidePortal != null)) +/* 864 */ setFarSideRoom(this._farSidePortal.getRoom()); +/* 865 */ if ((this._farSideRoom == null) || (!this._farSideRoom.isActive())) { +/* 866 */ return; +/* */ } +/* */ +/* */ +/* 870 */ if (this._p2pxform == null) { +/* 871 */ setTransform(); +/* 872 */ if (this._p2pxform == null) { +/* 873 */ return; +/* */ } +/* */ } +/* */ +/* 877 */ b.postBumpRoom = this._farSideRoom; +/* */ +/* 879 */ Transform t = ((WObject)b.source).getObjectToWorldMatrix(); +/* 880 */ b.postBumpPosition.setTransform(t); +/* 881 */ t.recycle(); +/* 882 */ b.postBumpPosition.moveBy(b.path).post(this._p2pxform); +/* */ +/* */ +/* 885 */ b.postBumpPath = new Point3(b.fullPath).times(1.0F - b.fraction) +/* 886 */ .vectorTimes(this._p2pxform); +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ public Object properties(int index, int offset, int mode, Object value) +/* */ throws NoSuchPropertyException +/* */ { +/* 895 */ Object ret = null; +/* 896 */ switch (index - offset) { +/* */ case 0: +/* 898 */ if (mode == 0) { +/* 899 */ ret = URLPropertyEditor.make(new Property(this, index, +/* 900 */ "Destination World URL (null means this world)") +/* 901 */ .allowSetNull(), +/* 902 */ "world"); +/* 903 */ } else if (mode == 1) { +/* 904 */ ret = this._farSideWorld; +/* 905 */ } else if (mode == 2) { +/* 906 */ this._farSideWorld = ((URL)value); +/* */ +/* 908 */ reset(); +/* 909 */ triggerLoad(); +/* */ } +/* 911 */ break; +/* */ case 1: +/* 913 */ if (mode == 0) { +/* 914 */ ret = StringPropertyEditor.make(new Property(this, index, +/* 915 */ "Destination Room Name").allowSetNull()); +/* 916 */ } else if (mode == 1) { +/* 917 */ ret = this._farSideRoomName == null ? "" : this._farSideRoomName; +/* 918 */ } else if (mode == 2) { +/* 919 */ this._farSideRoomName = ((String)value); +/* 920 */ if ("".equals(this._farSideRoomName)) +/* 921 */ this._farSideRoomName = null; +/* 922 */ reset(); +/* 923 */ triggerLoad(); +/* */ } +/* 925 */ break; +/* */ case 2: +/* 927 */ if (mode == 0) { +/* 928 */ ret = BooleanPropertyEditor.make( +/* 929 */ new Property(this, index, +/* 930 */ "Connect to a portal"), +/* 931 */ "Use location and orientation", +/* 932 */ "Use portal"); +/* */ } +/* 934 */ else if (mode == 1) { +/* 935 */ ret = new Boolean(this._farSideIsPortal); +/* 936 */ } else if (mode == 2) { +/* 937 */ boolean tmp = ((Boolean)value).booleanValue(); +/* 938 */ this._farSideIsPortal = tmp; +/* 939 */ reset(); +/* 940 */ triggerLoad(); +/* */ } +/* 942 */ break; +/* */ case 3: +/* 944 */ if (mode == 0) { +/* 945 */ ret = BooleanPropertyEditor.make( +/* 946 */ new Property(this, index, +/* 947 */ "Download if world not present"), +/* 948 */ "Never download", +/* 949 */ "Allow download"); +/* */ } +/* 951 */ else if (mode == 1) { +/* 952 */ ret = new Boolean(this._allowDownload); +/* 953 */ } else if (mode == 2) { +/* 954 */ boolean tmp = ((Boolean)value).booleanValue(); +/* 955 */ this._allowDownload = tmp; +/* */ } +/* 957 */ break; +/* */ case 4: +/* 959 */ if (mode == 0) { +/* 960 */ ret = new Property(this, index, "Destination Portal Name"); +/* 961 */ if (this._farSideIsPortal) { +/* 962 */ ret = StringPropertyEditor.make((Property)ret); +/* */ } +/* 964 */ } else if (mode == 1) { +/* 965 */ ret = this._farSidePortalName == null ? "" : this._farSidePortalName; +/* 966 */ } else if (mode == 2) { +/* 967 */ this._farSidePortalName = ((String)value); +/* 968 */ if ("".equals(this._farSidePortalName)) +/* 969 */ this._farSidePortalName = null; +/* 970 */ reset(); +/* 971 */ triggerLoad(); +/* */ } +/* 973 */ break; +/* */ case 5: +/* 975 */ if (mode == 0) { +/* 976 */ ret = new Property(this, index, "Destination position"); +/* 977 */ if (!this._farSideIsPortal) { +/* 978 */ ret = Point3PropertyEditor.make((Property)ret); +/* */ } +/* 980 */ } else if (mode == 1) { +/* 981 */ ret = new Point3(this._userFarx, this._userFary, this._userFarz); +/* 982 */ } else if (mode == 2) { +/* 983 */ Point3 p = (Point3)value; +/* 984 */ this._farx = (this._userFarx = p.x); +/* 985 */ this._fary = (this._userFary = p.y); +/* 986 */ this._farz = (this._userFarz = p.z); +/* 987 */ reset(); +/* 988 */ triggerLoad(); +/* */ } +/* 990 */ break; +/* */ case 6: +/* 992 */ if (mode == 0) { +/* 993 */ ret = new Property(this, index, +/* 994 */ "Destination orientation (degrees, clockwise from North)"); +/* 995 */ if (!this._farSideIsPortal) { +/* 996 */ ret = FloatPropertyEditor.make((Property)ret, 0.0F, 360.0F); +/* */ } +/* 998 */ } else if (mode == 1) { +/* 999 */ ret = new Float(this._userFartheta); +/* 1000 */ } else if (mode == 2) { +/* 1001 */ this._fartheta = (this._userFartheta = ((Float)value).floatValue()); +/* 1002 */ reset(); +/* 1003 */ triggerLoad(); +/* */ } +/* 1005 */ break; +/* */ case 7: +/* 1007 */ if (mode == 0) { +/* 1008 */ ret = BooleanPropertyEditor.make( +/* 1009 */ new Property(this, index, +/* 1010 */ "Mirrored"), +/* 1011 */ "Normal", +/* 1012 */ "Mirrored"); +/* */ } +/* 1014 */ else if (mode == 1) { +/* 1015 */ ret = new Boolean((this.flags & 0x4) != 0); +/* 1016 */ } else if (mode == 2) { +/* 1017 */ if (((Boolean)value).booleanValue()) { +/* 1018 */ this.flags |= 0x4; +/* */ } else +/* 1020 */ this.flags &= 0xFFFFFFFB; +/* 1021 */ reset(); +/* 1022 */ triggerLoad(); +/* */ } +/* 1024 */ break; +/* */ default: +/* 1026 */ ret = super.properties(index, offset + 8, mode, value); +/* */ } +/* 1028 */ return ret; +/* */ } +/* */ +/* */ +/* */ private void newFarSide() +/* */ { +/* 1034 */ this._farSidePortalName = this._farSidePortal.getName(); +/* 1035 */ if ((this._state == -1) && ((this.flags & 0x40000) == 0)) { +/* 1036 */ this._state = 2; +/* */ } +/* 1038 */ recomputeFarPosition(); +/* 1039 */ setTransform(); +/* 1040 */ updateVisible(); +/* */ } +/* */ +/* 1043 */ private static Object classCookie = new Object(); +/* */ +/* */ public void saveState(Saver s) throws IOException +/* */ { +/* 1047 */ Portal tmp = null; +/* 1048 */ if ((this._farSideWorld != null) || ( +/* 1049 */ (this._farSidePortal != null) && ((!this._farSidePortal.isActive()) || +/* 1050 */ ((this._farSidePortal instanceof NonPersister))))) +/* */ { +/* 1052 */ tmp = this._farSidePortal; +/* 1053 */ this._farSidePortal = null; +/* */ } +/* 1055 */ s.saveVersion(9, classCookie); +/* 1056 */ super.saveState(s); +/* 1057 */ s.saveBoolean(this._farSideIsPortal); +/* 1058 */ s.saveBoolean(this._allowDownload); +/* 1059 */ s.saveString(this._farSidePortalName); +/* 1060 */ s.saveMaybeNull(this._farSidePortal); +/* 1061 */ URL.save(s, this._farSideWorld); +/* 1062 */ s.saveString(this._farSideRoomName); +/* 1063 */ s.saveFloat(this._userFarx); +/* 1064 */ s.saveFloat(this._userFary); +/* 1065 */ s.saveFloat(this._userFarz); +/* 1066 */ s.saveFloat(this._userFartheta); +/* 1067 */ if (tmp != null) { +/* 1068 */ this._farSidePortal = tmp; +/* */ } +/* */ } +/* */ +/* */ +/* */ +/* */ public void superRestoreState(Restorer r) +/* */ throws IOException, TooNewException +/* */ { +/* 1077 */ restoreWObjectState(r); +/* 1078 */ setMaterial(new Material(Color.black)); +/* */ } +/* */ +/* */ public void restoreState(Restorer r) +/* */ throws IOException, TooNewException +/* */ { +/* 1084 */ float x = 0.0F;float y = 0.0F;float z = 0.0F; +/* 1085 */ int vers = r.restoreVersion(classCookie); +/* 1086 */ switch (vers) { +/* */ case 0: +/* */ case 1: +/* */ case 2: +/* */ case 3: +/* */ case 4: +/* */ case 5: +/* */ case 6: +/* */ case 7: +/* 1095 */ r.setOldFlag(); +/* 1096 */ superRestoreState(r); +/* */ +/* 1098 */ if (vers < 6) { +/* 1099 */ if (vers == 0) +/* 1100 */ r.restoreInt(); +/* 1101 */ x = r.restoreFloat(); +/* 1102 */ y = r.restoreFloat(); +/* 1103 */ z = r.restoreFloat(); +/* 1104 */ scale(x, 1.0F, z); +/* */ } +/* */ +/* 1107 */ if (r.restoreBoolean()) { +/* 1108 */ this.flags |= 0x4; +/* */ } +/* 1110 */ if (vers >= 4) +/* 1111 */ this._farSidePortalName = r.restoreString(); +/* 1112 */ this._farSidePortal = ((Portal)r.restoreMaybeNull()); +/* */ +/* 1114 */ if (vers == 1) { +/* 1115 */ String n = r.restoreString(); +/* 1116 */ if (!"".equals(n)) +/* 1117 */ setName(n); +/* 1118 */ } else if (vers >= 3) { +/* 1119 */ if (vers >= 7) { +/* 1120 */ this._farSideWorld = URL.restore(r); +/* */ } else +/* 1122 */ this._farSideWorld = URL.restore(r, ".world"); +/* 1123 */ this._farSideRoomName = r.restoreString(); +/* 1124 */ this._farx = r.restoreFloat(); +/* 1125 */ this._fary = r.restoreFloat(); +/* 1126 */ this._farz = r.restoreFloat(); +/* 1127 */ this._fartheta = r.restoreFloat(); +/* */ +/* 1129 */ Material initialCover = Material.restore(r); +/* 1130 */ Material downloadCover = Material.restore(r); +/* 1131 */ if (initialCover != null) { +/* 1132 */ setMaterial(initialCover); +/* */ +/* 1134 */ if ((downloadCover != null) && ( +/* 1135 */ (initialCover.textureName == null) || +/* */ +/* 1137 */ (!initialCover.textureName.equals(downloadCover.textureName)))) { +/* 1138 */ System.out.println( +/* 1139 */ "Both initial and download covers, " + +/* 1140 */ initialCover.textureName + " and " + +/* 1141 */ downloadCover.textureName + ", in " + +/* 1142 */ getName() + " -- using initial."); +/* */ } +/* */ } else { +/* 1145 */ setMaterial(downloadCover); +/* */ } +/* */ +/* 1148 */ if (vers >= 5) +/* 1149 */ this._farSideIsPortal = r.restoreBoolean(); +/* */ } +/* 1151 */ break; +/* */ case 8: +/* */ case 9: +/* 1154 */ super.restoreState(r); +/* 1155 */ this._farSideIsPortal = r.restoreBoolean(); +/* 1156 */ if (vers >= 9) +/* 1157 */ this._allowDownload = r.restoreBoolean(); +/* 1158 */ this._farSidePortalName = r.restoreString(); +/* 1159 */ this._farSidePortal = ((Portal)r.restoreMaybeNull()); +/* 1160 */ this._farSideWorld = URL.restore(r); +/* 1161 */ this._farSideRoomName = r.restoreString(); +/* 1162 */ this._farx = r.restoreFloat(); +/* 1163 */ this._fary = r.restoreFloat(); +/* 1164 */ this._farz = r.restoreFloat(); +/* 1165 */ this._fartheta = r.restoreFloat(); +/* 1166 */ break; +/* */ default: +/* 1168 */ throw new TooNewException(); +/* */ } +/* */ +/* 1171 */ if ((vers <= 4) && (this._farSideRoomName != null) && (this._farSidePortal == null) && +/* 1172 */ (this._farSidePortalName == null)) +/* */ { +/* 1174 */ this._farSideIsPortal = false; +/* */ } +/* */ +/* 1177 */ this._userFarx = this._farx; +/* 1178 */ this._userFary = this._fary; +/* 1179 */ this._userFarz = this._farz; +/* 1180 */ this._userFartheta = this._fartheta; +/* */ } +/* */ +/* */ public void postRestore(int version) +/* */ { +/* 1185 */ super.postRestore(version); +/* 1186 */ if (getOwner() == null) +/* 1187 */ return; +/* 1188 */ addToRoom(getOwner()); +/* */ +/* 1190 */ if (this._farSidePortal == null) { +/* 1191 */ reset(); +/* */ } else +/* 1193 */ newFarSide(); +/* */ } +/* */ +/* */ public String toString() { +/* */ String to; +/* */ String to; +/* 1199 */ if (this._state == -1) { +/* 1200 */ to = "(not connected)"; +/* */ } else { String to; +/* 1202 */ if (this._farSideWorld != null) { +/* 1203 */ to = this._farSideWorld.toString(); +/* */ } else +/* 1205 */ to = ""; +/* 1206 */ if (this._farSideRoom != null) +/* 1207 */ to = to + "#" + this._farSideRoomName; +/* 1208 */ if (this._farSidePortalName != null) +/* 1209 */ to = to + "#" + this._farSidePortalName; +/* */ } +/* 1211 */ return super.toString() + "[Connected To " + to + "]"; +/* */ } +/* */ +/* */ +/* */ +/* */ +/* */ +/* */ public Portal triggerLoad() +/* */ { +/* 1220 */ if ((this._farSideWorld != null) && (this._farSideRoomName != null)) +/* */ { +/* 1222 */ if ((this._farSidePortal != null) && (!this._farSidePortal.isActive())) { +/* 1223 */ reset(); +/* */ } +/* 1225 */ if (this._state == 0) { +/* 1226 */ this._state = 1; +/* 1227 */ World.load(this._farSideWorld, this); +/* */ } +/* */ } +/* 1230 */ return this; +/* */ } +/* */ +/* */ public void loadedURLSelf(URLSelf o, URL url, String err) +/* */ { +/* 1235 */ if (this.frozeFrameEvents) { +/* 1236 */ this.frozeFrameEvents = false; +/* 1237 */ Console.setFreezeFrameEvents(false); +/* */ } +/* */ +/* */ +/* */ +/* 1242 */ if (this._state != 1) { +/* 1243 */ return; +/* */ } +/* 1245 */ if ((err != null) || (!(o instanceof World))) +/* */ { +/* 1247 */ if (err == null) +/* */ { +/* 1249 */ err = "doesn't contain a World"; +/* 1250 */ o.decRef(); +/* */ } +/* */ +/* 1253 */ String readable = TeleportAction.getReadableNameOfWorld(url); +/* 1254 */ this._state = -1; +/* */ +/* 1256 */ if ((this._allowDownload) && (!World.isProscribed(url, false))) { +/* 1257 */ Object[] arguments = { new String(readable) }; +/* 1258 */ Console.println(MessageFormat.format( +/* 1259 */ Console.message("Dont-have-world"), arguments)); +/* */ +/* 1261 */ String packageName = TeleportAction.getPackageNameOfWorld(url); +/* */ +/* */ +/* */ +/* 1265 */ if (packageName != null) { +/* 1266 */ NetUpdate.loadWorld(packageName, false); +/* */ } +/* */ } +/* */ } else { +/* 1270 */ World w = (World)o; +/* 1271 */ setFarSideRoom(w.getRoom(this._farSideRoomName)); +/* 1272 */ if (this._farSideRoom != null) { +/* 1273 */ this._state = 2; +/* 1274 */ findFarSidePortal(true); +/* */ } else { +/* 1276 */ Object[] arguments = { new String(this._farSideRoomName), +/* 1277 */ new String(this._farSideWorld) }; +/* 1278 */ Console.println(MessageFormat.format( +/* 1279 */ Console.message("Cant-find-remote"), arguments)); +/* 1280 */ this._state = -1; +/* */ } +/* */ } +/* */ +/* 1284 */ updateVisible(); +/* */ } +/* */ +/* */ public Portal() {} +/* */ +/* */ public static native void nativeInit(); +/* */ +/* */ protected native void updateVisible(); +/* */ +/* */ native void setTransform(); +/* */ +/* */ public native void prerender(Camera paramCamera); +/* */ +/* */ public native void postrender(Camera paramCamera); +/* */ } + + +/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\Portal.class + * Java compiler version: 6 (50.0) + * JD-Core Version: 0.7.1 + */
\ No newline at end of file |