Keep track of which locations are portals and don't track users when they
move there and prevent more than one user from occupying a portal. Removed unused method. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1449 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
//
|
//
|
||||||
// $Id: SpotSceneManager.java,v 1.6 2002/04/30 17:27:30 mdb Exp $
|
// $Id: SpotSceneManager.java,v 1.7 2002/06/12 07:05:55 ray Exp $
|
||||||
|
|
||||||
package com.threerings.whirled.spot.server;
|
package com.threerings.whirled.spot.server;
|
||||||
|
|
||||||
import com.samskivert.util.IntIntMap;
|
import com.samskivert.util.IntIntMap;
|
||||||
|
import com.samskivert.util.IntListUtil;
|
||||||
|
|
||||||
import com.threerings.presents.dobj.DObject;
|
import com.threerings.presents.dobj.DObject;
|
||||||
import com.threerings.presents.dobj.Subscriber;
|
import com.threerings.presents.dobj.Subscriber;
|
||||||
@@ -18,6 +19,7 @@ import com.threerings.whirled.server.SceneManager;
|
|||||||
import com.threerings.whirled.spot.Log;
|
import com.threerings.whirled.spot.Log;
|
||||||
import com.threerings.whirled.spot.data.SpotCodes;
|
import com.threerings.whirled.spot.data.SpotCodes;
|
||||||
import com.threerings.whirled.spot.data.SpotOccupantInfo;
|
import com.threerings.whirled.spot.data.SpotOccupantInfo;
|
||||||
|
import com.threerings.whirled.spot.data.SpotSceneModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the movement of bodies between locations in the scene and
|
* Handles the movement of bodies between locations in the scene and
|
||||||
@@ -83,6 +85,13 @@ public class SpotSceneManager extends SceneManager
|
|||||||
// create an array in which to track the occupants of each
|
// create an array in which to track the occupants of each
|
||||||
// location
|
// location
|
||||||
_locationOccs = new int[_sscene.getLocationCount()];
|
_locationOccs = new int[_sscene.getLocationCount()];
|
||||||
|
|
||||||
|
_isPortal = new boolean[_sscene.getLocationCount()];
|
||||||
|
SpotSceneModel model = _sscene.getModel();
|
||||||
|
for (int ii=0; ii < model.locationIds.length; ii++) {
|
||||||
|
_isPortal[ii] = IntListUtil.contains(model.portalIds,
|
||||||
|
model.locationIds[ii]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,8 +161,10 @@ public class SpotSceneManager extends SceneManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// stick our new friend into that location
|
// stick our new friend into that location, if it's not a portal
|
||||||
_locationOccs[locidx] = bodyOid;
|
if (!_isPortal[locidx]) {
|
||||||
|
_locationOccs[locidx] = bodyOid;
|
||||||
|
}
|
||||||
// update their occupant info
|
// update their occupant info
|
||||||
soi.locationId = locationId;
|
soi.locationId = locationId;
|
||||||
// and broadcast the update to the place
|
// and broadcast the update to the place
|
||||||
@@ -218,20 +229,6 @@ public class SpotSceneManager extends SceneManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the location index of the location occupied by the
|
|
||||||
* specified body oid or -1 if they occupy no location.
|
|
||||||
*/
|
|
||||||
protected int getLocationIndex (int bodyOid)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < _locationOccs.length; i++) {
|
|
||||||
if (_locationOccs[i] == bodyOid) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We need our own extended occupant info to keep track of what
|
* We need our own extended occupant info to keep track of what
|
||||||
* location each occupant occupies.
|
* location each occupant occupies.
|
||||||
@@ -250,6 +247,9 @@ public class SpotSceneManager extends SceneManager
|
|||||||
/** Oids of the bodies that occupy each of our locations. */
|
/** Oids of the bodies that occupy each of our locations. */
|
||||||
protected int[] _locationOccs;
|
protected int[] _locationOccs;
|
||||||
|
|
||||||
|
/** Tracks if each location is a portal. */
|
||||||
|
protected boolean[] _isPortal;
|
||||||
|
|
||||||
/** A table of mappings from body oids to entry location ids for
|
/** A table of mappings from body oids to entry location ids for
|
||||||
* bodies that are entering our scene. */
|
* bodies that are entering our scene. */
|
||||||
protected IntIntMap _entering = new IntIntMap();
|
protected IntIntMap _entering = new IntIntMap();
|
||||||
|
|||||||
Reference in New Issue
Block a user