Added leavePlace() for games where you are sometimes not in any "place" at

all.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3638 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2005-06-30 00:02:13 +00:00
parent c1691c3d0a
commit a213847eea
5 changed files with 50 additions and 2 deletions
@@ -188,6 +188,23 @@ public class LocationDirector extends BasicDirector
}
}
/**
* Issues a request to leave our current location.
*
* @return true if we were able to leave, false if we are in the
* middle of moving somewhere and can't yet leave.
*/
public boolean leavePlace ()
{
if (_pendingPlaceId != -1) {
return false;
}
_lservice.leavePlace(_ctx.getClient());
didLeavePlace();
return true;
}
/**
* This can be called by cooperating directors that need to coopt the
* moving process to extend it in some way or other. In such
@@ -1,5 +1,5 @@
//
// $Id: LocationService.java,v 1.9 2004/08/27 02:12:33 mdb Exp $
// $Id$
//
// Narya library - tools for developing networked games
// Copyright (C) 2002-2004 Three Rings Design, Inc., All Rights Reserved
@@ -57,4 +57,9 @@ public interface LocationService extends InvocationService
* failure.
*/
public void moveTo (Client client, int placeId, MoveListener listener);
/**
* Requests that we leave our current place and move to nowhere land.
*/
public void leavePlace (Client client);
}
@@ -68,8 +68,19 @@ public class LocationMarshaller extends InvocationMarshaller
}
}
/** The method id used to dispatch {@link #leavePlace} requests. */
public static final int LEAVE_PLACE = 1;
// documentation inherited from interface
public void leavePlace (Client arg1)
{
sendRequest(arg1, LEAVE_PLACE, new Object[] {
});
}
/** The method id used to dispatch {@link #moveTo} requests. */
public static final int MOVE_TO = 1;
public static final int MOVE_TO = 2;
// documentation inherited from interface
public void moveTo (Client arg1, int arg2, LocationService.MoveListener arg3)
@@ -56,6 +56,12 @@ public class LocationDispatcher extends InvocationDispatcher
throws InvocationException
{
switch (methodId) {
case LocationMarshaller.LEAVE_PLACE:
((LocationProvider)provider).leavePlace(
source
);
return;
case LocationMarshaller.MOVE_TO:
((LocationProvider)provider).moveTo(
source,
@@ -75,6 +75,15 @@ public class LocationProvider
listener.moveSucceeded(moveTo((BodyObject)caller, placeId));
}
/**
* Requests that we leave our current place and move to nowhere land.
*/
public void leavePlace (ClientObject caller)
throws InvocationException
{
leaveOccupiedPlace((BodyObject)caller);
}
/**
* Moves the specified body from whatever location they currently
* occupy to the location identified by the supplied place id.