diff --git a/src/java/com/threerings/miso/server/RuntimeMisoScene.java b/src/java/com/threerings/miso/server/RuntimeMisoScene.java new file mode 100644 index 000000000..b85777a98 --- /dev/null +++ b/src/java/com/threerings/miso/server/RuntimeMisoScene.java @@ -0,0 +1,20 @@ +// +// $Id: RuntimeMisoScene.java,v 1.1 2002/12/11 23:07:21 shaper Exp $ + +package com.threerings.miso.server; + +import java.util.Iterator; + +import com.threerings.miso.scene.SceneObject; + +/** + * The Miso scene interface used by the server to deal with scenes. + */ +public interface RuntimeMisoScene +{ + /** + * Iterates over the {@link RuntimeSceneObject} instances representing + * all available objects in the scene. + */ + public Iterator enumerateSceneObjects (); +} diff --git a/src/java/com/threerings/miso/server/RuntimeMisoSceneImpl.java b/src/java/com/threerings/miso/server/RuntimeMisoSceneImpl.java new file mode 100644 index 000000000..69baa7ebb --- /dev/null +++ b/src/java/com/threerings/miso/server/RuntimeMisoSceneImpl.java @@ -0,0 +1,58 @@ +// +// $Id: RuntimeMisoSceneImpl.java,v 1.1 2002/12/11 23:07:21 shaper Exp $ + +package com.threerings.miso.server; + +import java.util.ArrayList; +import java.util.Iterator; + +import com.threerings.miso.scene.MisoSceneModel; +import com.threerings.miso.scene.SceneObject; + +/** + * A basic implementation of the {@link RuntimeMisoScene} interface which + * is used by default if no extended implementation is desired. + */ +public class RuntimeMisoSceneImpl + implements RuntimeMisoScene +{ + /** + * Creates an instance that will obtain data from the supplied scene + * model and place config. + */ + public RuntimeMisoSceneImpl (MisoSceneModel model) + { + // keep a casted reference to our scene model around + _model = model; + + // build a list of all objects in the scene + populateSceneObjects(); + } + + /** + * Gathers and stores information about all objects in the scene. + */ + protected void populateSceneObjects () + { + int ocount = _model.objectTileIds.length; + for (int ii = 0; ii < ocount; ii += 3) { + RuntimeSceneObject scobj = new RuntimeSceneObject(); + scobj.x = _model.objectTileIds[ii]; + scobj.y = _model.objectTileIds[ii+1]; + scobj.action = _model.objectActions[ii/3]; + _objects.add(scobj); + } + } + + // documentation inherited + public Iterator enumerateSceneObjects () + { + return _objects.iterator(); + } + + /** A casted reference to our scene model. */ + protected MisoSceneModel _model; + + /** The scene object records. */ + protected ArrayList _objects = new ArrayList(); +} diff --git a/src/java/com/threerings/miso/server/RuntimeSceneObject.java b/src/java/com/threerings/miso/server/RuntimeSceneObject.java new file mode 100644 index 000000000..862ed1066 --- /dev/null +++ b/src/java/com/threerings/miso/server/RuntimeSceneObject.java @@ -0,0 +1,46 @@ +// +// $Id: RuntimeSceneObject.java,v 1.1 2002/12/11 23:07:21 shaper Exp $ + +package com.threerings.miso.server; + +import com.samskivert.util.StringUtil; + +/** + * Used to track server-side information about an object in a miso scene. + */ +public class RuntimeSceneObject +{ + /** The x and y tile coordinates of the object. */ + public int x = -1, y = -1; + + /** The action associated with this object or null if it has no + * action. */ + public String action; + + // documentation inherited + public boolean equals (Object other) + { + if (other instanceof RuntimeSceneObject) { + RuntimeSceneObject oso = (RuntimeSceneObject)other; + // TODO: we should probably check the tile type as well, but + // for now we only differentiate runtime miso scene objects by + // their coordinates within the scene since we don't bother + // keeping around tile information server-side + return (x == oso.x && y == oso.y); + } else { + return false; + } + } + + // documentation inherited + public int hashCode () + { + return x ^ y; + } + + /** Generates a string representation of this instance. */ + public String toString () + { + return StringUtil.fieldsToString(this); + } +}