Added code to handle sending player ready notifications and to process
them on the server (and start the game). git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@430 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
//
|
||||||
|
// $Id: GameCodes.java,v 1.1 2001/10/11 03:12:38 mdb Exp $
|
||||||
|
|
||||||
|
package com.threerings.parlor.client;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.client.InvocationCodes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains codes used by the game services.
|
||||||
|
*/
|
||||||
|
public interface GameCodes extends InvocationCodes
|
||||||
|
{
|
||||||
|
/** The message identifier for a player ready notification. This is
|
||||||
|
* delivered by the game controller when the client has loaded the
|
||||||
|
* user interface for the game and is ready to play. */
|
||||||
|
public static final String PLAYER_READY_NOTIFICATION = "PlayerReady";
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: GameController.java,v 1.4 2001/10/09 17:20:39 mdb Exp $
|
// $Id: GameController.java,v 1.5 2001/10/11 03:12:38 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.parlor.client;
|
package com.threerings.parlor.client;
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ import com.threerings.parlor.util.ParlorContext;
|
|||||||
* distributed object events.
|
* distributed object events.
|
||||||
*/
|
*/
|
||||||
public abstract class GameController
|
public abstract class GameController
|
||||||
extends PlaceController implements Subscriber
|
extends PlaceController implements Subscriber, GameCodes
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Initializes this game controller with the game configuration that
|
* Initializes this game controller with the game configuration that
|
||||||
@@ -63,6 +63,11 @@ public abstract class GameController
|
|||||||
|
|
||||||
// and add ourselves as a subscriber
|
// and add ourselves as a subscriber
|
||||||
_gobj.addSubscriber(this);
|
_gobj.addSubscriber(this);
|
||||||
|
|
||||||
|
// finally let the game manager know that we're ready to roll
|
||||||
|
MessageEvent mevt = new MessageEvent(
|
||||||
|
_gobj.getOid(), PLAYER_READY_NOTIFICATION, null);
|
||||||
|
_ctx.getDObjectManager().postEvent(mevt);
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
//
|
//
|
||||||
// $Id: GameManager.java,v 1.5 2001/10/09 18:18:07 mdb Exp $
|
// $Id: GameManager.java,v 1.6 2001/10/11 03:12:38 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.parlor.server;
|
package com.threerings.parlor.server;
|
||||||
|
|
||||||
|
import com.threerings.cocktail.cher.dobj.MessageEvent;
|
||||||
|
|
||||||
import com.threerings.cocktail.party.data.BodyObject;
|
import com.threerings.cocktail.party.data.BodyObject;
|
||||||
|
import com.threerings.cocktail.party.data.PlaceObject;
|
||||||
import com.threerings.cocktail.party.server.PlaceManager;
|
import com.threerings.cocktail.party.server.PlaceManager;
|
||||||
import com.threerings.cocktail.party.server.PartyServer;
|
import com.threerings.cocktail.party.server.PartyServer;
|
||||||
|
import com.threerings.cocktail.party.server.PartyServer;
|
||||||
|
|
||||||
import com.threerings.parlor.Log;
|
import com.threerings.parlor.Log;
|
||||||
|
import com.threerings.parlor.client.GameCodes;
|
||||||
import com.threerings.parlor.client.ParlorCodes;
|
import com.threerings.parlor.client.ParlorCodes;
|
||||||
import com.threerings.parlor.data.GameConfig;
|
import com.threerings.parlor.data.GameConfig;
|
||||||
import com.threerings.parlor.data.GameObject;
|
import com.threerings.parlor.data.GameObject;
|
||||||
@@ -22,7 +27,7 @@ import com.threerings.parlor.data.GameObject;
|
|||||||
* bodies in that location.
|
* bodies in that location.
|
||||||
*/
|
*/
|
||||||
public class GameManager
|
public class GameManager
|
||||||
extends PlaceManager implements ParlorCodes
|
extends PlaceManager implements ParlorCodes, GameCodes
|
||||||
{
|
{
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
protected Class getPlaceObjectClass ()
|
protected Class getPlaceObjectClass ()
|
||||||
@@ -37,6 +42,10 @@ public class GameManager
|
|||||||
|
|
||||||
// cast our configuration object (do we need to do this?)
|
// cast our configuration object (do we need to do this?)
|
||||||
_gconfig = (GameConfig)_config;
|
_gconfig = (GameConfig)_config;
|
||||||
|
|
||||||
|
// register our message handlers
|
||||||
|
MessageHandler handler = new PlayerReadyHandler();
|
||||||
|
registerMessageHandler(PLAYER_READY_NOTIFICATION, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,6 +60,9 @@ public class GameManager
|
|||||||
{
|
{
|
||||||
// keep this info for later
|
// keep this info for later
|
||||||
_players = players;
|
_players = players;
|
||||||
|
|
||||||
|
// instantiate a player oid array which we'll fill in later
|
||||||
|
_playerOids = new int[_players.length];
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
@@ -81,6 +93,106 @@ public class GameManager
|
|||||||
// documentation inherited
|
// documentation inherited
|
||||||
protected void bodyLeft (int bodyOid)
|
protected void bodyLeft (int bodyOid)
|
||||||
{
|
{
|
||||||
|
// deal with disappearing players
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called when the game is ready to start (all players
|
||||||
|
* involved have delivered their "am ready" notifications). It calls
|
||||||
|
* {@link #gameWillStart}, sets the necessary wheels in motion and
|
||||||
|
* then calls {@link #gameDidStart}. Derived classes should override
|
||||||
|
* one or both of the calldown functions (rather than this function)
|
||||||
|
* if they need to do things before or after the game starts.
|
||||||
|
*/
|
||||||
|
protected void startGame ()
|
||||||
|
{
|
||||||
|
// let the derived class do its pre-start stuff
|
||||||
|
gameWillStart();
|
||||||
|
|
||||||
|
// transition the game to started
|
||||||
|
_gameobj.setState(GameObject.IN_PLAY);
|
||||||
|
|
||||||
|
// and let the derived class do its post-start stuff
|
||||||
|
gameDidStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the game is about to start, but before the game start
|
||||||
|
* notification has been delivered to the players. Derived classes
|
||||||
|
* should override this if they need to perform some pre-start
|
||||||
|
* activities.
|
||||||
|
*/
|
||||||
|
protected void gameWillStart ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called right after the game start notification was delivered.
|
||||||
|
* Derived classes should override this to perform whatever
|
||||||
|
* machinations are necessary to start the game in motion (if anything
|
||||||
|
* other than issuing the game start notification is necessary).
|
||||||
|
*/
|
||||||
|
protected void gameDidStart ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the game is known to be over. This will call some
|
||||||
|
* calldown functions to determine the winner of the game and then
|
||||||
|
* transition the game to the <code>GAME_OVER</code> state.
|
||||||
|
*/
|
||||||
|
protected void endGame ()
|
||||||
|
{
|
||||||
|
// figure out who won...
|
||||||
|
|
||||||
|
// transition to the game over state
|
||||||
|
_gameobj.setState(GameObject.GAME_OVER);
|
||||||
|
|
||||||
|
// do our post-game stuff
|
||||||
|
gameDidEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called after the game has transitioned to the
|
||||||
|
* <code>GAME_OVER</code> state. Derived classes should override this
|
||||||
|
* to perform any post-game activities.
|
||||||
|
*/
|
||||||
|
protected void gameDidEnd ()
|
||||||
|
{
|
||||||
|
// calculate ratings and all that...
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handles player ready notifications. */
|
||||||
|
protected class PlayerReadyHandler implements MessageHandler
|
||||||
|
{
|
||||||
|
public void handleEvent (MessageEvent event, PlaceObject target)
|
||||||
|
{
|
||||||
|
int cloid = event.getSourceOid();
|
||||||
|
BodyObject body = (BodyObject)
|
||||||
|
PartyServer.omgr.getObject(cloid);
|
||||||
|
if (body == null) {
|
||||||
|
Log.warning("Player sent am ready notification and then " +
|
||||||
|
"disappeared [event=" + event + "].");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make a note of this player's oid and check to see if we're
|
||||||
|
// all set at the same time
|
||||||
|
boolean allSet = true;
|
||||||
|
for (int i = 0; i < _players.length; i++) {
|
||||||
|
if (_players[i].equals(body.username)) {
|
||||||
|
_playerOids[i] = body.getOid();
|
||||||
|
}
|
||||||
|
if (_playerOids[i] == 0) {
|
||||||
|
allSet = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if everyone is now ready to go, start up the game
|
||||||
|
if (allSet) {
|
||||||
|
startGame();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** A reference to our game configuration. */
|
/** A reference to our game configuration. */
|
||||||
@@ -91,4 +203,7 @@ public class GameManager
|
|||||||
|
|
||||||
/** A reference to our game object. */
|
/** A reference to our game object. */
|
||||||
protected GameObject _gameobj;
|
protected GameObject _gameobj;
|
||||||
|
|
||||||
|
/** The oids of our player's body objects. */
|
||||||
|
protected int[] _playerOids;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user