From d8af7154984cbb72224dec74e09e2ce576cfbda2 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 20 Sep 2002 00:54:06 +0000 Subject: [PATCH] Keep the sceneId of the currently occupied scene in the body object. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1718 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../whirled/data/ScenedBodyObject.java | 21 +++++++++++++++++++ .../whirled/server/SceneProvider.java | 7 ++++++- .../whirled/zone/data/ZonedBodyObject.java | 6 ++++-- .../whirled/zone/server/ZoneProvider.java | 15 +++++++++---- 4 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 src/java/com/threerings/whirled/data/ScenedBodyObject.java diff --git a/src/java/com/threerings/whirled/data/ScenedBodyObject.java b/src/java/com/threerings/whirled/data/ScenedBodyObject.java new file mode 100644 index 000000000..5cf2bc9e1 --- /dev/null +++ b/src/java/com/threerings/whirled/data/ScenedBodyObject.java @@ -0,0 +1,21 @@ +// +// $Id: ScenedBodyObject.java,v 1.1 2002/09/20 00:54:06 mdb Exp $ + +package com.threerings.whirled.data; + +/** + * A system that uses the whirled services must provide a body object + * extension that implements this interface. + */ +public interface ScenedBodyObject +{ + /** + * Returns the scene id currently occupied by this body. + */ + public int getSceneId (); + + /** + * Sets the scene id currently occupied by this body. + */ + public void setSceneId (int sceneId); +} diff --git a/src/java/com/threerings/whirled/server/SceneProvider.java b/src/java/com/threerings/whirled/server/SceneProvider.java index 2d12ea26b..44b859930 100644 --- a/src/java/com/threerings/whirled/server/SceneProvider.java +++ b/src/java/com/threerings/whirled/server/SceneProvider.java @@ -1,5 +1,5 @@ // -// $Id: SceneProvider.java,v 1.11 2002/08/14 19:07:57 mdb Exp $ +// $Id: SceneProvider.java,v 1.12 2002/09/20 00:54:06 mdb Exp $ package com.threerings.whirled.server; @@ -16,6 +16,7 @@ import com.threerings.whirled.Log; import com.threerings.whirled.client.SceneService.SceneMoveListener; import com.threerings.whirled.data.SceneCodes; import com.threerings.whirled.data.SceneModel; +import com.threerings.whirled.data.ScenedBodyObject; /** * The scene provider handles the server side of the scene related @@ -83,6 +84,10 @@ public class SceneProvider // try doing the actual move PlaceConfig config = _locprov.moveTo(source, ploid); + // now that we've finally moved, we can update the user object + // with the new scene id + ((ScenedBodyObject)source).setSceneId(scmgr.getScene().getId()); + // check to see if they need a newer version of the scene data SceneModel model = scmgr.getSceneModel(); if (sceneVersion < model.version) { diff --git a/src/java/com/threerings/whirled/zone/data/ZonedBodyObject.java b/src/java/com/threerings/whirled/zone/data/ZonedBodyObject.java index 9c0dbb605..5a969a949 100644 --- a/src/java/com/threerings/whirled/zone/data/ZonedBodyObject.java +++ b/src/java/com/threerings/whirled/zone/data/ZonedBodyObject.java @@ -1,13 +1,15 @@ // -// $Id: ZonedBodyObject.java,v 1.1 2001/12/04 00:31:58 mdb Exp $ +// $Id: ZonedBodyObject.java,v 1.2 2002/09/20 00:54:06 mdb Exp $ package com.threerings.whirled.zone.data; +import com.threerings.whirled.data.ScenedBodyObject; + /** * A system that uses the zone services must provide a body object * extension that implements this interface. */ -public interface ZonedBodyObject +public interface ZonedBodyObject extends ScenedBodyObject { /** * Returns the zone id currently occupied by this body. diff --git a/src/java/com/threerings/whirled/zone/server/ZoneProvider.java b/src/java/com/threerings/whirled/zone/server/ZoneProvider.java index e3a8d2555..5accf8f90 100644 --- a/src/java/com/threerings/whirled/zone/server/ZoneProvider.java +++ b/src/java/com/threerings/whirled/zone/server/ZoneProvider.java @@ -1,5 +1,5 @@ // -// $Id: ZoneProvider.java,v 1.10 2002/08/14 19:07:58 mdb Exp $ +// $Id: ZoneProvider.java,v 1.11 2002/09/20 00:54:06 mdb Exp $ package com.threerings.whirled.zone.server; @@ -13,8 +13,9 @@ import com.threerings.crowd.data.PlaceObject; import com.threerings.crowd.server.LocationProvider; import com.threerings.whirled.data.SceneModel; -import com.threerings.whirled.server.SceneRegistry; +import com.threerings.whirled.data.ScenedBodyObject; import com.threerings.whirled.server.SceneManager; +import com.threerings.whirled.server.SceneRegistry; import com.threerings.whirled.zone.Log; import com.threerings.whirled.zone.client.ZoneService.ZoneMoveListener; @@ -150,8 +151,14 @@ public class ZoneProvider PlaceConfig config = _locprov.moveTo(source, ploid); // now that we've finally moved, we can update the user object - // with the new zone id - ((ZonedBodyObject)source).setZoneId(summary.zoneId); + // with the new scene and zone ids + try { + source.startTransaction(); + ((ScenedBodyObject)source).setSceneId(scmgr.getScene().getId()); + ((ZonedBodyObject)source).setZoneId(summary.zoneId); + } finally { + source.commitTransaction(); + } // check to see if they need a newer version of the scene data SceneModel model = scmgr.getSceneModel();