Skeleton of turn-based game services.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@444 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
//
|
||||||
|
// $Id: TurnGameController.java,v 1.1 2001/10/12 00:30:10 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.parlor.turn;
|
||||||
|
|
||||||
|
import com.threerings.presents.dobj.*;
|
||||||
|
|
||||||
|
import com.threerings.parlor.Log;
|
||||||
|
import com.threerings.parlor.game.GameController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends the basic game controller with support for turn-based games.
|
||||||
|
*/
|
||||||
|
public abstract class TurnGameController extends GameController
|
||||||
|
{
|
||||||
|
// documentation inherited
|
||||||
|
public void attributeChanged (AttributeChangedEvent event)
|
||||||
|
{
|
||||||
|
super.attributeChanged(event);
|
||||||
|
|
||||||
|
// handle turn changes
|
||||||
|
if (event.getName().equals(TurnGameObject.TURN_HOLDER)) {
|
||||||
|
turnDidChange((String)event.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the turn changed. This indicates the start of a turn
|
||||||
|
* and the user interface should adjust itself accordingly (activating
|
||||||
|
* controls if it is our turn and deactivating them if it is not).
|
||||||
|
*
|
||||||
|
* @param turnHolder the username of the new holder of the turn.
|
||||||
|
*/
|
||||||
|
protected void turnDidChange (String turnHolder)
|
||||||
|
{
|
||||||
|
Log.info("Turn changed [holder=" + turnHolder + "].");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
//
|
||||||
|
// $Id: TurnGameManager.java,v 1.1 2001/10/12 00:30:10 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.parlor.turn;
|
||||||
|
|
||||||
|
import com.threerings.crowd.data.BodyObject;
|
||||||
|
import com.threerings.crowd.server.CrowdServer;
|
||||||
|
|
||||||
|
import com.threerings.parlor.Log;
|
||||||
|
import com.threerings.parlor.game.GameManager;
|
||||||
|
import com.threerings.parlor.util.MathUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends the basic game manager with support for turn-based games.
|
||||||
|
*/
|
||||||
|
public class TurnGameManager extends GameManager
|
||||||
|
{
|
||||||
|
// documentation inherited
|
||||||
|
protected void didStartup ()
|
||||||
|
{
|
||||||
|
super.didStartup();
|
||||||
|
|
||||||
|
// obtain a casted reference to our turn game object
|
||||||
|
_turnGame = (TurnGameObject)_plobj;
|
||||||
|
}
|
||||||
|
|
||||||
|
// documentation inherited
|
||||||
|
protected void gameDidStart ()
|
||||||
|
{
|
||||||
|
super.gameDidStart();
|
||||||
|
|
||||||
|
// figure out who will be first
|
||||||
|
setFirstTurnHolder();
|
||||||
|
|
||||||
|
// and set the turn indicator accordingly
|
||||||
|
int boid = _playerOids[_turnIdx];
|
||||||
|
BodyObject body = (BodyObject)CrowdServer.omgr.getObject(boid);
|
||||||
|
if (body != null) {
|
||||||
|
_turnGame.setTurnHolder(body.username);
|
||||||
|
} else {
|
||||||
|
Log.warning("Unable to start game; first player isn't around " +
|
||||||
|
"[boid=" + boid + "].");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called to determine whichi player will take the first
|
||||||
|
* turn. The default implementation chooses a player at random.
|
||||||
|
*/
|
||||||
|
protected void setFirstTurnHolder ()
|
||||||
|
{
|
||||||
|
// TODO: sort out a better random number generator and make it
|
||||||
|
// available via the parlor services
|
||||||
|
_turnIdx = MathUtil.random(_playerOids.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called to determine which player will next hold the turn.
|
||||||
|
* The default implementation simply rotates through the players in
|
||||||
|
* order, but some games may need to mess with the turn from time to
|
||||||
|
* time. This should update the <code>_turnIdx</code> field, not set
|
||||||
|
* the turn holder field in the game object directly.
|
||||||
|
*/
|
||||||
|
protected void setNextTurnHolder ()
|
||||||
|
{
|
||||||
|
// next!
|
||||||
|
_turnIdx = (_turnIdx + 1) % _playerOids.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** A reference to our game object. */
|
||||||
|
protected TurnGameObject _turnGame;
|
||||||
|
|
||||||
|
/** The offset into the _playerOids array of the current turn holder
|
||||||
|
* or -1 if it's no one's turn. */
|
||||||
|
protected int _turnIdx = -1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// $Id: TurnGameObject.dobj,v 1.1 2001/10/12 00:30:10 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.parlor.turn;
|
||||||
|
|
||||||
|
import com.threerings.parlor.game.GameObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends the basic game object with support for turn-based games.
|
||||||
|
*/
|
||||||
|
public class TurnGameObject extends GameObject
|
||||||
|
{
|
||||||
|
/** The field name of the <code>turnHolder</code> field. */
|
||||||
|
public static final String TURN_HOLDER = "turnHolder";
|
||||||
|
|
||||||
|
/** The username of the player who is currently taking their turn in
|
||||||
|
* this turn-based game or null if no user currently holds the
|
||||||
|
* turn. */
|
||||||
|
public String turnHolder;
|
||||||
|
|
||||||
|
/** Requests that the <code>turnHolder</code> field be set to the
|
||||||
|
* specified value. */
|
||||||
|
public void setTurnHolder (String turnHolder)
|
||||||
|
{
|
||||||
|
requestAttributeChange(TURN_HOLDER, turnHolder);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user