Turn/GameManager now supports interface for checking whether a player

is still actively playing the game.  The delegate now uses this when
incrementing turns to skip over players not a part of the game (rather
than needing this same code in the derived classes).


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3390 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ted V
2005-03-10 00:13:25 +00:00
parent bb83bacdab
commit 08cc800694
3 changed files with 22 additions and 2 deletions
@@ -354,6 +354,15 @@ public class GameManager extends PlaceManager
return (_AIs != null && _AIs[pidx] != null);
}
/**
* Returns whether the player at the specified player index is actively
* playing the game
*/
public boolean isActivePlayer (int pidx)
{
return _gameobj.isActivePlayer(pidx);
}
/**
* Returns the unique round identifier for the current round.
*/
@@ -66,6 +66,12 @@ public interface TurnGameManager
*/
public int getPlayerCount ();
/**
* Extending {@link GameManager} should automatically handle
* implementing this method.
*/
public boolean isActivePlayer (int pidx);
/**
* Called when we are about to start the next turn. Implementations
* can do whatever pre-start turn activities need to be done.
@@ -181,12 +181,17 @@ public class TurnGameManagerDelegate extends GameManagerDelegate
return;
}
// find the next occupied player slot
// find the next occupied active player slot
//
// FIXME: This might be a player that has state PLAYER_LEFT_GAME.
// It seems possible to make the GameManager track the active
// player count, not just the player count, and ignore
int size = _turnGame.getPlayers().length;
int oturnIdx = _turnIdx;
do {
_turnIdx = (_turnIdx + 1) % size;
} while (_tgmgr.getPlayerName(_turnIdx) == null);
} while (_tgmgr.getPlayerName(_turnIdx) == null ||
_tgmgr.isActivePlayer(_turnIdx));
}
/** The game manager for which we are delegating. */