summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/Room.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/Room.java')
-rw-r--r--NET/worlds/scape/Room.java1542
1 files changed, 1542 insertions, 0 deletions
diff --git a/NET/worlds/scape/Room.java b/NET/worlds/scape/Room.java
new file mode 100644
index 0000000..2a915e3
--- /dev/null
+++ b/NET/worlds/scape/Room.java
@@ -0,0 +1,1542 @@
+/* */ package NET.worlds.scape;
+/* */
+/* */ import NET.worlds.console.Console;
+/* */ import NET.worlds.console.Main;
+/* */ import NET.worlds.core.Std;
+/* */ import NET.worlds.network.Galaxy;
+/* */ import NET.worlds.network.NetworkRoom;
+/* */ import NET.worlds.network.URL;
+/* */ import java.awt.Color;
+/* */ import java.io.IOException;
+/* */ import java.io.PrintStream;
+/* */ import java.util.Enumeration;
+/* */ import java.util.Vector;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public class Room
+/* */ extends WObject
+/* */ implements TeleportStatus
+/* */ {
+/* */ public WObject highlightTarget;
+/* */ private int sceneID;
+/* */
+/* */ public Room(World world, String name)
+/* */ {
+/* 203 */ setName(name);
+/* */
+/* 205 */ this.environment = new RoomEnvironment();
+/* 206 */ this.infiniteBackground = new RoomEnvironment();
+/* 207 */ super.add(this.environment);
+/* 208 */ super.add(this.infiniteBackground);
+/* */
+/* 210 */ if (world != null) {
+/* 211 */ world.addRoom(this);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ static
+/* */ {
+/* 222 */ nativeInit();
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void getChildren(DeepEnumeration d)
+/* */ {
+/* 238 */ if (this.infiniteBackground != null)
+/* 239 */ d.addChildElement(this.infiniteBackground);
+/* 240 */ if (this.environment != null)
+/* 241 */ d.addChildElement(this.environment);
+/* 242 */ super.getChildren(d);
+/* */ }
+/* */
+/* */
+/* */ public void setName(String newName)
+/* */ {
+/* 248 */ String oldName = getName();
+/* 249 */ super.setName(newName);
+/* 250 */ World world = getWorld();
+/* 251 */ if (world != null)
+/* 252 */ world.renameRoom(oldName, getName(), this);
+/* 253 */ if (oldName.equals(newName))
+/* 254 */ return;
+/* 255 */ synchronized (this)
+/* */ {
+/* 257 */ if (this._netRoom != null) {
+/* 258 */ this._netRoom.setName(newName);
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */ synchronized void register()
+/* */ {
+/* 267 */ assert (this._netRoom == null);
+/* 268 */ this._netRoom = new NetworkRoom(this);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public void detach()
+/* */ {
+/* 276 */ if (hasClump()) {
+/* 277 */ System.out.println("Detaching clumped room " + getName());
+/* 278 */ markVoid();
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 285 */ assert (this._netRoom != null);
+/* 286 */ boolean subscribed = Pilot.getActive().removeSubscribedRoom(this);
+/* 287 */ if (subscribed) {
+/* 288 */ this._netRoom.unsubscribe();
+/* */ }
+/* */
+/* */
+/* 292 */ synchronized (this) {
+/* 293 */ this._netRoom.detach();
+/* 294 */ this._netRoom = null;
+/* */ }
+/* */
+/* */
+/* 298 */ getWorld().removeRoom(this);
+/* */
+/* 300 */ super.detach();
+/* */ }
+/* */
+/* */ public void discard()
+/* */ {
+/* 305 */ this.environment.discard();
+/* 306 */ this.infiniteBackground.discard();
+/* */
+/* 308 */ super.discard();
+/* */
+/* 310 */ this.frameHandlers.removeAllElements();
+/* 311 */ this.frameHandlerWObjects.removeAllElements();
+/* 312 */ this.outgoingPortals.removeAllElements();
+/* 313 */ this.aFilters.removeAllElements();
+/* 314 */ this.prerenderHandlers.removeAllElements();
+/* 315 */ this.postrenderHandlers.removeAllElements();
+/* */ }
+/* */
+/* */
+/* */ int getSceneID()
+/* */ {
+/* 321 */ return this.sceneID;
+/* */ }
+/* */
+/* 324 */ public Point3 defaultPosition = new Point3(100.0F, 100.0F, 120.0F);
+/* 325 */ public Point3 defaultOrientationAxis = new Point3(0.0F, 0.0F, -1.0F);
+/* 326 */ public float defaultOrientation = 0.0F;
+/* */
+/* */ public Point3Temp getDefaultPosition() {
+/* 329 */ return Point3Temp.make(this.defaultPosition);
+/* */ }
+/* */
+/* */ public Point3Temp getDefaultOrientationAxis() {
+/* 333 */ return Point3Temp.make(this.defaultOrientationAxis);
+/* */ }
+/* */
+/* */ public float getDefaultOrientation() {
+/* 337 */ return this.defaultOrientation;
+/* */ }
+/* */
+/* 340 */ String teleportChain = "home:avatargallery/avatar.world#[email protected],145.0,150.0,89.0";
+/* */
+/* 342 */ int roomLoadTime = 0;
+/* 343 */ int teleportInterval = -1;
+/* 344 */ boolean teleported = false;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ private RoomEnvironment environment;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public RoomEnvironment getEnvironment()
+/* */ {
+/* 362 */ return this.environment;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 369 */ private Vector<Portal> outgoingPortals = new Vector();
+/* */
+/* */
+/* */
+/* */
+/* */ public Vector<Portal> getOutgoingPortals()
+/* */ {
+/* 376 */ return this.outgoingPortals;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void addOutgoingPortal(Portal p)
+/* */ {
+/* 386 */ if (this.outgoingPortals.contains(p)) {
+/* 387 */ return;
+/* */ }
+/* 389 */ this.outgoingPortals.addElement(p);
+/* */
+/* 391 */ for (int index = 0; index < this.aFilters.size(); index++) {
+/* 392 */ ((AudibilityFilter)this.aFilters.elementAt(index)).moveEmitter();
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void removeOutgoingPortal(Portal p)
+/* */ {
+/* 402 */ this.outgoingPortals.removeElement(p);
+/* */
+/* 404 */ Vector<AudibilityFilter> v = getAFilters();
+/* 405 */ for (int v_index = 0; v_index < v.size(); v_index++) {
+/* 406 */ ((AudibilityFilter)v.elementAt(v_index)).moveEmitter();
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 417 */ private Vector<AudibilityFilter> aFilters = new Vector();
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Vector<AudibilityFilter> getAFilters()
+/* */ {
+/* 425 */ return this.aFilters;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public void addAFilter(AudibilityFilter p)
+/* */ {
+/* 432 */ this.aFilters.addElement(p);
+/* */ }
+/* */
+/* */
+/* */
+/* */ public void removeAFilter(AudibilityFilter a)
+/* */ {
+/* 439 */ this.aFilters.removeElement(a);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void move(Room from, Room to)
+/* */ {
+/* 449 */ Vector<AudibilityFilter> v = from.getAFilters();
+/* 450 */ for (int index = 0; index < v.size(); index++) {
+/* 451 */ ((AudibilityFilter)v.elementAt(index)).updateListenerState();
+/* */ }
+/* 453 */ v = to.getAFilters();
+/* 454 */ for (int index = 0; index < v.size(); index++) {
+/* 455 */ ((AudibilityFilter)v.elementAt(index)).updateListenerState();
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ private void setLightPosition(float x, float y, float z)
+/* */ {
+/* 480 */ if (this.lightid != 0)
+/* 481 */ setLightPosition(this.lightid, x, y, z);
+/* 482 */ if (this.lightid2 != 0) {
+/* 483 */ setLightPosition(this.lightid2, -x, -y, -z);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */ private void setLightColor(float red, float green, float blue)
+/* */ {
+/* 491 */ if (this.lightid != 0)
+/* 492 */ setLightColor(this.lightid, red, green, blue);
+/* 493 */ if (this.lightid2 != 0)
+/* 494 */ setLightColor(this.lightid2, red / 2.0F, green / 2.0F, blue / 2.0F);
+/* */ }
+/* */
+/* 497 */ private Point3 lightPosition = new Point3(-1.0F, 1.0F, -1.0F);
+/* 498 */ private Color lightColor = new Color(255, 255, 255);
+/* 499 */ private int lightid = 0;
+/* 500 */ private int lightid2 = 0;
+/* */
+/* */ private int renderStamp;
+/* */
+/* */ public void setLightPosition(Point3Temp p)
+/* */ {
+/* 506 */ this.lightPosition.set(p.x, p.y, p.z);
+/* 507 */ setLightPosition(p.x, p.y, p.z);
+/* 508 */ RoomEnvironment re = getEnvironment();
+/* 509 */ if (re != null)
+/* 510 */ re.setLightPosition(p.x, p.y, p.z);
+/* 511 */ re = getInfiniteBackground();
+/* 512 */ if (re != null) {
+/* 513 */ re.setLightPosition(p.x, p.y, p.z);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */ public void setLightColor(Color c)
+/* */ {
+/* 520 */ this.lightColor = new Color(c.getRGB());
+/* */
+/* 522 */ float r = c.getRed() / 256.0F;
+/* 523 */ float g = c.getGreen() / 256.0F;
+/* 524 */ float b = c.getBlue() / 256.0F;
+/* */
+/* 526 */ setLightColor(r, g, b);
+/* 527 */ RoomEnvironment re = getEnvironment();
+/* 528 */ if (re != null)
+/* 529 */ re.setLightColor(r, g, b);
+/* 530 */ re = getInfiniteBackground();
+/* 531 */ if (re != null)
+/* 532 */ re.setLightColor(r, g, b);
+/* */ }
+/* */
+/* */ public Point3Temp getLightPosition() {
+/* 536 */ return Point3Temp.make(this.lightPosition);
+/* */ }
+/* */
+/* */ public Color getLightColor() {
+/* 540 */ return new Color(this.lightColor.getRGB());
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void noteRef()
+/* */ {
+/* 553 */ this.renderStamp = Std.getRealTime();
+/* */
+/* 555 */ World w = getWorld();
+/* 556 */ if (w != null)
+/* 557 */ w.incRef();
+/* */ }
+/* */
+/* 560 */ private static int timeoutAge = 15000;
+/* */
+/* */
+/* */
+/* */
+/* */ public void discardIfOld()
+/* */ {
+/* 567 */ if (hasClump()) {
+/* 568 */ int age = Std.getFastTime() - this.renderStamp;
+/* 569 */ if (age > timeoutAge) {
+/* 570 */ markVoid();
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 580 */ private Vector<FrameHandler> frameHandlers = new Vector();
+/* 581 */ private Vector<WObject> frameHandlerWObjects = new Vector();
+/* */
+/* */ private Color skyColor;
+/* */
+/* */ private Color groundColor;
+/* */
+/* */ public void generateFrameEvents(FrameEvent f)
+/* */ {
+/* 589 */ noteRef();
+/* */
+/* 591 */ if (Main.profile != 0) {
+/* 592 */ for (int i = 0; i < this.frameHandlers.size(); i++) {
+/* 593 */ FrameHandler fh = (FrameHandler)this.frameHandlers.elementAt(i);
+/* 594 */ WObject fhw = (WObject)this.frameHandlerWObjects.elementAt(i);
+/* 595 */ int start = Std.getRealTime();
+/* 596 */ long startBytes = Runtime.getRuntime().freeMemory();
+/* */
+/* 598 */ f.retargetAndDeliver(fh, fhw);
+/* */
+/* 600 */ int dur = Std.getRealTime() - start;
+/* 601 */ long used = startBytes - Runtime.getRuntime().freeMemory();
+/* 602 */ if (dur > Main.profile) {
+/* 603 */ if ((fh instanceof SuperRoot)) {
+/* 604 */ System.out.println("Took " + dur + "ms and " + used +
+/* 605 */ " bytes to call frameHandler " +
+/* 606 */ ((SuperRoot)fh).getName() + " of " +
+/* 607 */ fhw.getName());
+/* */ } else
+/* 609 */ System.out.println("Took " + dur + "ms and " + used +
+/* 610 */ " bytes to call frameHandler " + fh + " of " +
+/* 611 */ fhw.getName());
+/* */ }
+/* */ }
+/* */ } else {
+/* 615 */ for (int i = 0; i < this.frameHandlers.size(); i++) {
+/* 616 */ f.retargetAndDeliver((FrameHandler)this.frameHandlers.elementAt(i),
+/* 617 */ (WObject)this.frameHandlerWObjects.elementAt(i));
+/* */ }
+/* */ }
+/* 620 */ if ((this.teleportChain != null) && (this.teleportInterval != -1) && (!this.teleported) &&
+/* 621 */ (Std.getSynchronizedTime() % this.teleportInterval == 0)) {
+/* 622 */ this.teleported = true;
+/* */
+/* 624 */ TeleportAction.teleport(this.teleportChain, this);
+/* */ }
+/* */ }
+/* */
+/* */ public void teleportStatus(String err, String dest) {
+/* 629 */ if (err != null) {
+/* 630 */ this.teleported = false;
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ private int findFrameHandler(FrameHandler h, WObject o)
+/* */ {
+/* 640 */ int next = 0;
+/* */ for (;;) {
+/* 642 */ next = this.frameHandlers.indexOf(h, next);
+/* 643 */ if (next == -1)
+/* 644 */ return -1;
+/* 645 */ if (this.frameHandlerWObjects.elementAt(next) == o)
+/* 646 */ return next;
+/* 647 */ next++;
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ void addFrameHandler(FrameHandler h, WObject o)
+/* */ {
+/* 656 */ int i = findFrameHandler(h, o);
+/* 657 */ if (i < 0) {
+/* 658 */ this.frameHandlers.addElement(h);
+/* 659 */ this.frameHandlerWObjects.addElement(o);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ void removeFrameHandler(FrameHandler h, WObject o)
+/* */ {
+/* 668 */ int i = findFrameHandler(h, o);
+/* 669 */ if (i >= 0) {
+/* 670 */ this.frameHandlers.removeElementAt(i);
+/* 671 */ this.frameHandlerWObjects.removeElementAt(i);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ protected void markVoid()
+/* */ {
+/* 686 */ this.infiniteBackground.markVoid();
+/* 687 */ this.environment.markVoid();
+/* */
+/* 689 */ super.markVoid();
+/* */
+/* 691 */ destroyScene();
+/* 692 */ this.lightid = 0;
+/* 693 */ this.lightid2 = 0;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ protected void noteTransformChange()
+/* */ {
+/* 701 */ super.noteTransformChange();
+/* */
+/* 703 */ getInfiniteBackground().setTransform(this);
+/* 704 */ getEnvironment().setTransform(this);
+/* */
+/* */
+/* 707 */ int i = this.outgoingPortals.size();
+/* 708 */ do { ((Portal)this.outgoingPortals.elementAt(i)).discardTransform();i--;
+/* 707 */ } while (i >= 0);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void setSkyColor(Color c)
+/* */ {
+/* 726 */ this.skyColor = c;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public Color getSkyColor()
+/* */ {
+/* 733 */ return this.skyColor;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public void setGroundColor(Color c)
+/* */ {
+/* 741 */ this.groundColor = c;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public Color getGroundColor()
+/* */ {
+/* 748 */ return this.groundColor;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 755 */ private Vector<Prerenderable> prerenderHandlers = new Vector();
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 762 */ private Vector<Postrenderable> postrenderHandlers = new Vector();
+/* */
+/* 764 */ private static int isRendering = 4;
+/* 765 */ private static int isVIPOnly = 262144;
+/* 766 */ private static int isVIPViewOnly = 524288;
+/* */ private NetworkRoom _netRoom;
+/* */
+/* 769 */ public boolean getVIPOnly() { return (this.flags & isVIPOnly) != 0; }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void prerender(Camera cam, float x, float y, float z, float d)
+/* */ {
+/* 793 */ this.flags |= isRendering;
+/* */
+/* 795 */ this.infiniteBackground.prerender();
+/* 796 */ this.environment.prerender();
+/* */
+/* 798 */ Pilot.addVisibleRoom(this, x, y, z, d);
+/* */
+/* 800 */ int end = this.prerenderHandlers.size();
+/* 801 */ for (int i = 0; i < end; i++) {
+/* 802 */ Prerenderable p = (Prerenderable)this.prerenderHandlers.elementAt(i);
+/* 803 */ p.prerender(cam);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public void addPrerenderHandler(Prerenderable o)
+/* */ {
+/* 812 */ assert ((this.flags & isRendering) == 0);
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 818 */ if (!this.prerenderHandlers.contains(o)) {
+/* 819 */ this.prerenderHandlers.addElement(o);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void prependPrerenderHandler(Prerenderable o)
+/* */ {
+/* 833 */ assert ((this.flags & isRendering) == 0);
+/* 834 */ if (!this.prerenderHandlers.contains(o)) {
+/* 835 */ this.prerenderHandlers.insertElementAt(o, 0);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */ public void removePrerenderHandler(Prerenderable o)
+/* */ {
+/* 843 */ assert ((this.flags & isRendering) == 0);
+/* 844 */ this.prerenderHandlers.removeElement(o);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void postrender(Camera cam, float x, float y, float z, float d)
+/* */ {
+/* 855 */ Pilot.addVisibleRoom(this, x, y, z, d);
+/* */
+/* 857 */ int i = this.postrenderHandlers.size();
+/* 858 */ do { Postrenderable p = (Postrenderable)this.postrenderHandlers.elementAt(i);
+/* 859 */ p.postrender(cam);i--;
+/* 857 */ } while (i >= 0);
+/* */
+/* */
+/* */
+/* */
+/* 862 */ this.flags &= (isRendering ^ 0xFFFFFFFF);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public void addPostrenderHandler(Postrenderable o)
+/* */ {
+/* 870 */ assert ((this.flags & isRendering) == 0);
+/* 871 */ if (!this.postrenderHandlers.contains(o)) {
+/* 872 */ this.postrenderHandlers.addElement(o);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void prependPostrenderHandler(Postrenderable o)
+/* */ {
+/* 886 */ assert ((this.flags & isRendering) == 0);
+/* 887 */ if (!this.postrenderHandlers.contains(o)) {
+/* 888 */ this.postrenderHandlers.insertElementAt(o, 0);
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */ public void removePostrenderHandler(Postrenderable o)
+/* */ {
+/* 896 */ assert ((this.flags & isRendering) == 0);
+/* 897 */ this.postrenderHandlers.removeElement(o);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void detectBump(BumpEventTemp b)
+/* */ {
+/* 906 */ if (this.environment.getBumpable())
+/* 907 */ this.environment.detectBump(b);
+/* 908 */ super.detectBump(b);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public BoundBoxTemp getBoundBox()
+/* */ {
+/* 916 */ return BoundBoxTemp.make(Point3Temp.make(), Point3Temp.make());
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public World getWorld()
+/* */ {
+/* 924 */ return (World)getOwner();
+/* */ }
+/* */
+/* */ public Room getRoom()
+/* */ {
+/* 929 */ return this;
+/* */ }
+/* */
+/* */ public Room getRoomFromClump()
+/* */ {
+/* 934 */ return this;
+/* */ }
+/* */
+/* */ public Room getRoomNotFromClump()
+/* */ {
+/* 939 */ return this;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public Galaxy getGalaxy()
+/* */ {
+/* 946 */ World w = getWorld();
+/* 947 */ if (w == null)
+/* 948 */ return null;
+/* 949 */ return w.getConsole().getGalaxy();
+/* */ }
+/* */
+/* */
+/* */
+/* */ public String getURL()
+/* */ {
+/* 956 */ return getWorld().getSourceURL().getAbsolute() + "#" + getName();
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public boolean registerShare(WObject w)
+/* */ {
+/* 982 */ w.notifyRegister(1);
+/* 983 */ return true;
+/* */ }
+/* */
+/* */ private void processPendingRegistrations() {
+/* 987 */ notifyRegister(1);
+/* */ }
+/* */
+/* */
+/* */
+/* */ public NetworkRoom getNetworkRoom()
+/* */ {
+/* 994 */ return this._netRoom;
+/* */ }
+/* */
+/* */
+/* */ void subscribe(RoomSubscribeInfo info)
+/* */ {
+/* 1000 */ assert (this._netRoom != null);
+/* 1001 */ this._netRoom.subscribe(info);
+/* */ }
+/* */
+/* */ void subscribeDist(RoomSubscribeInfo info) {
+/* 1005 */ assert (this._netRoom != null);
+/* 1006 */ this._netRoom.subscribeDist(info);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ void unsubscribe()
+/* */ {
+/* 1014 */ if (this._netRoom != null) {
+/* 1015 */ this._netRoom.unsubscribe();
+/* */
+/* */ }
+/* */ else
+/* */ {
+/* */
+/* 1021 */ System.out.println(this + ": unsubscribing from bad room?");
+/* 1022 */ new Exception().printStackTrace(System.out);
+/* */ }
+/* */ }
+/* */
+/* 1026 */ private static String[] skyOptions = { "Blue Sky" };
+/* 1027 */ private static String[] groundOptions = { "Green Ground" };
+/* */
+/* 1029 */ private boolean allowTeleport = true;
+/* */
+/* */ public boolean getAllowTeleport() {
+/* 1032 */ return this.allowTeleport;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */ public Object properties(int index, int offset, int mode, Object value)
+/* */ throws NoSuchPropertyException
+/* */ {
+/* 1041 */ Object ret = null;
+/* 1042 */ switch (index - offset) {
+/* */ case 0:
+/* 1044 */ if (mode == 0) {
+/* 1045 */ ret = new Property(this, index, "Environment");
+/* 1046 */ } else if (mode == 1)
+/* 1047 */ ret = this.environment;
+/* 1048 */ break;
+/* */ case 1:
+/* 1050 */ if (mode == 0) {
+/* 1051 */ ret = new Property(this, index, "Infinite Background");
+/* 1052 */ } else if (mode == 1)
+/* 1053 */ ret = this.infiniteBackground;
+/* 1054 */ break;
+/* */ case 2:
+/* 1056 */ if (mode == 0) {
+/* 1057 */ ret = ColorPropertyEditor.make(new Property(this, index,
+/* 1058 */ "Sky Color").allowSetNull());
+/* 1059 */ if (getSkyColor() == null) {
+/* 1060 */ ret = MaybeNullPropertyEditor.make((Property)ret,
+/* 1061 */ Color.blue);
+/* */ }
+/* 1063 */ } else if (mode == 1) {
+/* 1064 */ ret = getSkyColor();
+/* 1065 */ } else if (mode == 2) {
+/* 1066 */ setSkyColor((Color)value); }
+/* 1067 */ break;
+/* */ case 3:
+/* 1069 */ if (mode == 0) {
+/* 1070 */ ret = ColorPropertyEditor.make(new Property(this, index,
+/* 1071 */ "Ground Color").allowSetNull());
+/* 1072 */ if (getGroundColor() == null) {
+/* 1073 */ ret = MaybeNullPropertyEditor.make((Property)ret,
+/* 1074 */ Color.green);
+/* */ }
+/* 1076 */ } else if (mode == 1) {
+/* 1077 */ ret = getGroundColor();
+/* 1078 */ } else if (mode == 2) {
+/* 1079 */ setGroundColor((Color)value); }
+/* 1080 */ break;
+/* */ case 4:
+/* 1082 */ if (mode == 0) {
+/* 1083 */ ret = Point3PropertyEditor.make(new Property(this, index,
+/* 1084 */ "Default Position"));
+/* 1085 */ } else if (mode == 1) {
+/* 1086 */ ret = new Point3(getDefaultPosition());
+/* 1087 */ } else if (mode == 2)
+/* 1088 */ this.defaultPosition = ((Point3)value);
+/* 1089 */ break;
+/* */ case 5:
+/* 1091 */ if (mode == 0) {
+/* 1092 */ ret = Point3PropertyEditor.make(new Property(this, index,
+/* 1093 */ "Default Orientation Axis"));
+/* 1094 */ } else if (mode == 1) {
+/* 1095 */ ret = new Point3(getDefaultOrientationAxis());
+/* 1096 */ } else if (mode == 2)
+/* 1097 */ this.defaultOrientationAxis = ((Point3)value);
+/* 1098 */ break;
+/* */ case 6:
+/* 1100 */ if (mode == 0) {
+/* 1101 */ ret = FloatPropertyEditor.make(new Property(this, index,
+/* 1102 */ "Default Orientation Angle"));
+/* 1103 */ } else if (mode == 1) {
+/* 1104 */ ret = new Float(getDefaultOrientation());
+/* 1105 */ } else if (mode == 2)
+/* 1106 */ this.defaultOrientation = ((Float)value).floatValue();
+/* 1107 */ break;
+/* */ case 7:
+/* 1109 */ if (mode == 0) {
+/* 1110 */ ret = BooleanPropertyEditor.make(new Property(this, index,
+/* 1111 */ "VIP only"), "No", "Yes");
+/* 1112 */ } else if (mode == 1) {
+/* 1113 */ ret = new Boolean((this.flags & isVIPOnly) != 0);
+/* 1114 */ } else if (mode == 2) {
+/* 1115 */ if (((Boolean)value).booleanValue()) {
+/* 1116 */ this.flags |= isVIPOnly;
+/* */ } else
+/* 1118 */ this.flags &= (isVIPOnly ^ 0xFFFFFFFF);
+/* */ }
+/* 1120 */ break;
+/* */ case 8:
+/* 1122 */ if (mode == 0) {
+/* 1123 */ ret = BooleanPropertyEditor.make(new Property(this, index,
+/* 1124 */ "Visible to VIP only"), "No", "Yes");
+/* 1125 */ } else if (mode == 1) {
+/* 1126 */ ret = new Boolean((this.flags & isVIPViewOnly) != 0);
+/* 1127 */ } else if (mode == 2) {
+/* 1128 */ if (((Boolean)value).booleanValue()) {
+/* 1129 */ this.flags |= isVIPViewOnly;
+/* */ } else
+/* 1131 */ this.flags &= (isVIPViewOnly ^ 0xFFFFFFFF);
+/* */ }
+/* 1133 */ break;
+/* */ case 9:
+/* 1135 */ if (mode == 0) {
+/* 1136 */ ret = Point3PropertyEditor.make(new Property(this, index,
+/* 1137 */ "Light Source Direction"));
+/* 1138 */ } else if (mode == 1) {
+/* 1139 */ ret = this.lightPosition;
+/* 1140 */ } else if (mode == 2)
+/* 1141 */ setLightPosition((Point3)value);
+/* 1142 */ break;
+/* */ case 10:
+/* 1144 */ if (mode == 0) {
+/* 1145 */ ret = ColorPropertyEditor.make(new Property(this, index,
+/* 1146 */ "Light Color"));
+/* 1147 */ } else if (mode == 1) {
+/* 1148 */ ret = this.lightColor;
+/* 1149 */ } else if (mode == 2)
+/* 1150 */ setLightColor((Color)value);
+/* 1151 */ break;
+/* */ case 11:
+/* 1153 */ if (mode == 0) {
+/* 1154 */ ret = IntegerPropertyEditor.make(new Property(this, index,
+/* 1155 */ "Time To Auto-Teleport (seconds, -1 = never)"));
+/* 1156 */ } else if (mode == 1) {
+/* 1157 */ ret = new Integer(this.teleportInterval);
+/* 1158 */ } else if (mode == 2)
+/* 1159 */ this.teleportInterval = ((Integer)value).intValue();
+/* 1160 */ break;
+/* */ case 12:
+/* 1162 */ if (mode == 0) {
+/* 1163 */ ret = StringPropertyEditor.make(new Property(this, index,
+/* 1164 */ "Auto-Teleport destination"));
+/* 1165 */ } else if (mode == 1) {
+/* 1166 */ ret = this.teleportChain;
+/* 1167 */ } else if (mode == 2)
+/* 1168 */ this.teleportChain = new String((String)value);
+/* 1169 */ break;
+/* */ case 13:
+/* 1171 */ if (mode == 0) {
+/* 1172 */ ret = BooleanPropertyEditor.make(new Property(this, index,
+/* 1173 */ "Allow Teleporting"), "No", "Yes");
+/* 1174 */ } else if (mode == 1) {
+/* 1175 */ ret = new Boolean(this.allowTeleport);
+/* 1176 */ } else if (mode == 2)
+/* 1177 */ this.allowTeleport = ((Boolean)value).booleanValue();
+/* 1178 */ break;
+/* */ default:
+/* 1180 */ ret = super.properties(index, offset + 14, mode, value);
+/* */ }
+/* 1182 */ return ret;
+/* */ }
+/* */
+/* 1185 */ private static Object classCookie = new Object();
+/* */ private RoomEnvironment infiniteBackground;
+/* */
+/* */ public void saveState(Saver s) throws IOException {
+/* 1189 */ s.saveVersion(7, classCookie);
+/* 1190 */ super.saveState(s);
+/* 1191 */ if (this.skyColor != null) {
+/* 1192 */ s.saveBoolean(true);
+/* 1193 */ s.saveInt(this.skyColor.getRGB());
+/* */ } else {
+/* 1195 */ s.saveBoolean(false); }
+/* 1196 */ if (this.groundColor != null) {
+/* 1197 */ s.saveBoolean(true);
+/* 1198 */ s.saveInt(this.groundColor.getRGB());
+/* */ } else {
+/* 1200 */ s.saveBoolean(false); }
+/* 1201 */ s.save(this.defaultPosition);
+/* 1202 */ s.save(this.defaultOrientationAxis);
+/* 1203 */ s.saveFloat(this.defaultOrientation);
+/* 1204 */ s.save(this.lightPosition);
+/* 1205 */ s.saveInt(this.lightColor.getRGB());
+/* */
+/* 1207 */ s.save(this.environment);
+/* 1208 */ s.save(this.infiniteBackground);
+/* */
+/* 1210 */ s.saveString(this.teleportChain);
+/* 1211 */ s.saveInt(this.teleportInterval);
+/* */
+/* 1213 */ s.saveBoolean(this.allowTeleport);
+/* */ }
+/* */
+/* */ public void restoreState(Restorer r) throws IOException, TooNewException
+/* */ {
+/* 1218 */ switch (r.restoreVersion(classCookie)) {
+/* */ case 0:
+/* 1220 */ r.setOldFlag();
+/* 1221 */ super.restoreState(r);
+/* 1222 */ setName(r.restoreString());
+/* */
+/* 1224 */ r.restore();
+/* 1225 */ if (r.restoreBoolean())
+/* 1226 */ this.skyColor = new Color(r.restoreInt());
+/* 1227 */ if (r.restoreBoolean())
+/* 1228 */ this.groundColor = new Color(r.restoreInt());
+/* 1229 */ r.restoreMaybeNull();
+/* 1230 */ this.defaultPosition = ((Point3)r.restore());
+/* 1231 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1232 */ this.defaultOrientation = r.restoreFloat();
+/* */
+/* 1234 */ r.restoreVector();
+/* */
+/* 1236 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1237 */ this.infiniteBackground = new RoomEnvironment();
+/* 1238 */ break;
+/* */ case 1:
+/* 1240 */ r.setOldFlag();
+/* 1241 */ super.restoreState(r);
+/* */
+/* 1243 */ r.restore();
+/* 1244 */ if (r.restoreBoolean())
+/* 1245 */ this.skyColor = new Color(r.restoreInt());
+/* 1246 */ if (r.restoreBoolean())
+/* 1247 */ this.groundColor = new Color(r.restoreInt());
+/* 1248 */ r.restoreMaybeNull();
+/* 1249 */ this.defaultPosition = ((Point3)r.restore());
+/* 1250 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1251 */ this.defaultOrientation = r.restoreFloat();
+/* */
+/* 1253 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1254 */ this.infiniteBackground = new RoomEnvironment();
+/* 1255 */ break;
+/* */ case 2:
+/* 1257 */ r.setOldFlag();
+/* 1258 */ super.restoreState(r);
+/* */
+/* 1260 */ if (r.restoreBoolean())
+/* 1261 */ this.skyColor = new Color(r.restoreInt());
+/* 1262 */ if (r.restoreBoolean())
+/* 1263 */ this.groundColor = new Color(r.restoreInt());
+/* 1264 */ r.restoreMaybeNull();
+/* 1265 */ this.defaultPosition = ((Point3)r.restore());
+/* 1266 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1267 */ this.defaultOrientation = r.restoreFloat();
+/* */
+/* 1269 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1270 */ this.infiniteBackground = new RoomEnvironment();
+/* 1271 */ break;
+/* */ case 3:
+/* 1273 */ r.setOldFlag();
+/* 1274 */ super.restoreState(r);
+/* */
+/* 1276 */ if (r.restoreBoolean())
+/* 1277 */ this.skyColor = new Color(r.restoreInt());
+/* 1278 */ if (r.restoreBoolean())
+/* 1279 */ this.groundColor = new Color(r.restoreInt());
+/* 1280 */ r.restoreMaybeNull();
+/* 1281 */ this.defaultPosition = ((Point3)r.restore());
+/* 1282 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1283 */ this.defaultOrientation = r.restoreFloat();
+/* */
+/* 1285 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1286 */ this.infiniteBackground = ((RoomEnvironment)r.restore());
+/* 1287 */ break;
+/* */ case 4:
+/* 1289 */ r.setOldFlag();
+/* 1290 */ super.restoreState(r);
+/* */
+/* 1292 */ if (r.restoreBoolean())
+/* 1293 */ this.skyColor = new Color(r.restoreInt());
+/* 1294 */ if (r.restoreBoolean())
+/* 1295 */ this.groundColor = new Color(r.restoreInt());
+/* 1296 */ this.defaultPosition = ((Point3)r.restore());
+/* 1297 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1298 */ this.defaultOrientation = r.restoreFloat();
+/* */
+/* 1300 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1301 */ this.infiniteBackground = ((RoomEnvironment)r.restore());
+/* 1302 */ break;
+/* */ case 5:
+/* 1304 */ super.restoreState(r);
+/* */
+/* 1306 */ if (r.restoreBoolean())
+/* 1307 */ this.skyColor = new Color(r.restoreInt());
+/* 1308 */ if (r.restoreBoolean())
+/* 1309 */ this.groundColor = new Color(r.restoreInt());
+/* 1310 */ this.defaultPosition = ((Point3)r.restore());
+/* 1311 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1312 */ this.defaultOrientation = r.restoreFloat();
+/* 1313 */ setLightPosition((Point3)r.restore());
+/* 1314 */ setLightColor(new Color(r.restoreInt()));
+/* */
+/* 1316 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1317 */ this.infiniteBackground = ((RoomEnvironment)r.restore());
+/* 1318 */ break;
+/* */ case 6:
+/* 1320 */ super.restoreState(r);
+/* */
+/* 1322 */ if (r.restoreBoolean())
+/* 1323 */ this.skyColor = new Color(r.restoreInt());
+/* 1324 */ if (r.restoreBoolean())
+/* 1325 */ this.groundColor = new Color(r.restoreInt());
+/* 1326 */ this.defaultPosition = ((Point3)r.restore());
+/* 1327 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1328 */ this.defaultOrientation = r.restoreFloat();
+/* 1329 */ setLightPosition((Point3)r.restore());
+/* 1330 */ setLightColor(new Color(r.restoreInt()));
+/* */
+/* 1332 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1333 */ this.infiniteBackground = ((RoomEnvironment)r.restore());
+/* */
+/* 1335 */ this.teleportChain = r.restoreString();
+/* 1336 */ this.teleportInterval = r.restoreInt();
+/* 1337 */ this.roomLoadTime = (Std.getFastTime() / 1000);
+/* */
+/* 1339 */ break;
+/* */ case 7:
+/* 1341 */ super.restoreState(r);
+/* */
+/* 1343 */ if (r.restoreBoolean())
+/* 1344 */ this.skyColor = new Color(r.restoreInt());
+/* 1345 */ if (r.restoreBoolean())
+/* 1346 */ this.groundColor = new Color(r.restoreInt());
+/* 1347 */ this.defaultPosition = ((Point3)r.restore());
+/* 1348 */ this.defaultOrientationAxis = ((Point3)r.restore());
+/* 1349 */ this.defaultOrientation = r.restoreFloat();
+/* 1350 */ setLightPosition((Point3)r.restore());
+/* 1351 */ setLightColor(new Color(r.restoreInt()));
+/* */
+/* 1353 */ this.environment = ((RoomEnvironment)r.restore());
+/* 1354 */ this.infiniteBackground = ((RoomEnvironment)r.restore());
+/* */
+/* 1356 */ this.teleportChain = r.restoreString();
+/* 1357 */ this.teleportInterval = r.restoreInt();
+/* 1358 */ this.roomLoadTime = (Std.getFastTime() / 1000);
+/* 1359 */ this.allowTeleport = r.restoreBoolean();
+/* 1360 */ break;
+/* */ default:
+/* 1362 */ throw new TooNewException();
+/* */ }
+/* */
+/* 1365 */ super.add(this.environment);
+/* 1366 */ super.add(this.infiniteBackground);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public void aboutToDraw()
+/* */ {
+/* 1375 */ if ((!hasClump()) && ((getOwner() instanceof World))) {
+/* 1376 */ recursiveAddRwChildren(null);
+/* */ }
+/* */ }
+/* */
+/* */ protected void addRwChildren(WObject parent) {
+/* 1381 */ assert (parent == null);
+/* */
+/* 1383 */ createClump();
+/* 1384 */ createScene();
+/* */
+/* 1386 */ newRwChildHelper();
+/* */
+/* 1388 */ float red = this.lightColor.getRed() / 256.0F;
+/* 1389 */ float green = this.lightColor.getGreen() / 256.0F;
+/* 1390 */ float blue = this.lightColor.getBlue() / 256.0F;
+/* */
+/* 1392 */ this.lightid = addLight(this.sceneID, this.lightPosition.x, this.lightPosition.y,
+/* 1393 */ this.lightPosition.z, red, green, blue);
+/* */
+/* 1395 */ this.lightid2 = addLight(this.sceneID, -this.lightPosition.x, -this.lightPosition.y,
+/* 1396 */ -this.lightPosition.z, red * 0.5F, green * 0.5F, blue * 0.5F);
+/* */ }
+/* */
+/* */ public void recursiveAddRwChildren(WObject parent)
+/* */ {
+/* 1401 */ super.recursiveAddRwChildren(parent);
+/* 1402 */ this.environment.recursiveAddRwChildren(this);
+/* 1403 */ this.infiniteBackground.recursiveAddRwChildren(this);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public final float floorHeight(float x, float y)
+/* */ {
+/* 1412 */ return floorHeight(x, y, 120.0F);
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public float floorHeight(float x, float y, float z)
+/* */ {
+/* 1430 */ Transform inverse = getObjectToWorldMatrix().invert();
+/* 1431 */ Point3Temp p = Point3Temp.make(x, y, z).times(inverse);
+/* 1432 */ inverse.recycle();
+/* 1433 */ x = p.x;
+/* 1434 */ y = p.y;
+/* 1435 */ z = p.z;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 1442 */ float height = 0.0F;
+/* 1443 */ boolean patchFound = false;
+/* 1444 */ for (Enumeration<WObject> e = getContents(); e.hasMoreElements();) {
+/* 1445 */ Object o = e.nextElement();
+/* 1446 */ if (((o instanceof FloorPatch)) &&
+/* 1447 */ (((FloorPatch)o).inPatch(x, y))) {
+/* 1448 */ float patchHeight = ((FloorPatch)o).floorHeight(x, y);
+/* */
+/* */
+/* 1451 */ if ((patchHeight <= z) && (
+/* 1452 */ (patchHeight > height) || (!patchFound))) {
+/* 1453 */ patchFound = true;
+/* 1454 */ height = ((FloorPatch)o).floorHeight(x, y);
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* 1461 */ return height;
+/* */ }
+/* */
+/* */
+/* */
+/* */ public Point3 surfaceNormal(float x, float y, float z)
+/* */ {
+/* 1468 */ Point3 normal = new Point3(0.0F, 0.0F, 1.0F);
+/* */
+/* 1470 */ FloorPatch patch = null;
+/* */
+/* 1472 */ float height = 0.0F;
+/* 1473 */ boolean patchFound = false;
+/* 1474 */ for (Enumeration<WObject> e = getContents(); e.hasMoreElements();) {
+/* 1475 */ Object o = e.nextElement();
+/* 1476 */ if (((o instanceof FloorPatch)) &&
+/* 1477 */ (((FloorPatch)o).inPatch(x, y))) {
+/* 1478 */ float patchHeight = ((FloorPatch)o).floorHeight(x, y);
+/* */
+/* */
+/* 1481 */ if ((patchHeight <= z) && (
+/* 1482 */ (patchHeight > height) || (!patchFound))) {
+/* 1483 */ patchFound = true;
+/* 1484 */ height = ((FloorPatch)o).floorHeight(x, y);
+/* 1485 */ patch = (FloorPatch)o;
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* */
+/* 1491 */ if (patch != null) {
+/* 1492 */ normal = patch.surfaceNormal(x, y);
+/* */ }
+/* */
+/* 1495 */ normal.vectorTimes(getObjectToWorldMatrix());
+/* */
+/* 1497 */ return normal;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public RoomEnvironment getInfiniteBackground()
+/* */ {
+/* 1508 */ return this.infiniteBackground;
+/* */ }
+/* */
+/* */ public String toString()
+/* */ {
+/* 1513 */ return getWorld() + "#" + getName();
+/* */ }
+/* */
+/* */ public Room() {}
+/* */
+/* */ public static native void nativeInit();
+/* */
+/* */ protected final void noteAddingTo(SuperRoot s) {}
+/* */
+/* */ static native int addLight(int paramInt, float paramFloat1, float paramFloat2, float paramFloat3, float paramFloat4, float paramFloat5, float paramFloat6);
+/* */
+/* */ static native void setLightPosition(int paramInt, float paramFloat1, float paramFloat2, float paramFloat3);
+/* */
+/* */ static native void setLightColor(int paramInt, float paramFloat1, float paramFloat2, float paramFloat3);
+/* */
+/* */ native void createScene();
+/* */
+/* */ native void destroyScene();
+/* */ }
+
+
+/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\Room.class
+ * Java compiler version: 6 (50.0)
+ * JD-Core Version: 0.7.1
+ */ \ No newline at end of file