Ensure that all players are ready before we allow a game to be started.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1660 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: GameManager.java,v 1.38 2002/08/14 19:07:53 mdb Exp $
|
// $Id: GameManager.java,v 1.39 2002/08/21 05:22:41 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.parlor.game;
|
package com.threerings.parlor.game;
|
||||||
|
|
||||||
@@ -255,14 +255,25 @@ public class GameManager extends PlaceManager
|
|||||||
* then calls {@link #gameDidStart}. Derived classes should override
|
* then calls {@link #gameDidStart}. Derived classes should override
|
||||||
* one or both of the calldown functions (rather than this function)
|
* one or both of the calldown functions (rather than this function)
|
||||||
* if they need to do things before or after the game starts.
|
* if they need to do things before or after the game starts.
|
||||||
|
*
|
||||||
|
* @return true if the game was started, false if it could not be
|
||||||
|
* started because it was already in play or because all players have
|
||||||
|
* not yet reported in.
|
||||||
*/
|
*/
|
||||||
public void startGame ()
|
public boolean startGame ()
|
||||||
{
|
{
|
||||||
// complain if we're already started
|
// complain if we're already started
|
||||||
if (_gameobj.state == GameObject.IN_PLAY) {
|
if (_gameobj.state == GameObject.IN_PLAY) {
|
||||||
Log.warning("Requested to start an already in-play game " +
|
Log.warning("Requested to start an already in-play game " +
|
||||||
"[game=" + _gameobj + "].");
|
"[game=" + _gameobj + "].");
|
||||||
return;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure everyone has turned up
|
||||||
|
if (!allPlayersReady()) {
|
||||||
|
Log.warning("Requested to start a game that is still " +
|
||||||
|
"awaiting players [game=" + _gameobj + "].");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// let the derived class do its pre-start stuff
|
// let the derived class do its pre-start stuff
|
||||||
@@ -273,6 +284,8 @@ public class GameManager extends PlaceManager
|
|||||||
|
|
||||||
// do post-start processing
|
// do post-start processing
|
||||||
gameDidStart();
|
gameDidStart();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -455,19 +468,25 @@ public class GameManager extends PlaceManager
|
|||||||
}
|
}
|
||||||
_playerOids[pidx] = plobj.getOid();
|
_playerOids[pidx] = plobj.getOid();
|
||||||
|
|
||||||
// and check to see if we're all set
|
// if everyone is now ready to go, get things underway
|
||||||
boolean allSet = true;
|
if (allPlayersReady()) {
|
||||||
|
playersAllHere();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if all (non-AI) players have delivered their {@link
|
||||||
|
* #playerReady} notifications, false if they have not.
|
||||||
|
*/
|
||||||
|
protected boolean allPlayersReady ()
|
||||||
|
{
|
||||||
for (int ii = 0; ii < _players.length; ii++) {
|
for (int ii = 0; ii < _players.length; ii++) {
|
||||||
if ((_playerOids[ii] == 0) &&
|
if ((_playerOids[ii] == 0) &&
|
||||||
((_AIs == null) || (_AIs[ii] == -1))) {
|
((_AIs == null) || (_AIs[ii] == -1))) {
|
||||||
allSet = false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
// if everyone is now ready to go, make a note of it
|
|
||||||
if (allSet) {
|
|
||||||
playersAllHere();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
|
|||||||
Reference in New Issue
Block a user