diff --git a/src/java/com/threerings/parlor/game/server/GameManager.java b/src/java/com/threerings/parlor/game/server/GameManager.java index f5b76600d..e77506ed7 100644 --- a/src/java/com/threerings/parlor/game/server/GameManager.java +++ b/src/java/com/threerings/parlor/game/server/GameManager.java @@ -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. */ diff --git a/src/java/com/threerings/parlor/turn/server/TurnGameManager.java b/src/java/com/threerings/parlor/turn/server/TurnGameManager.java index 969863f58..12b28be22 100644 --- a/src/java/com/threerings/parlor/turn/server/TurnGameManager.java +++ b/src/java/com/threerings/parlor/turn/server/TurnGameManager.java @@ -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. diff --git a/src/java/com/threerings/parlor/turn/server/TurnGameManagerDelegate.java b/src/java/com/threerings/parlor/turn/server/TurnGameManagerDelegate.java index b4178c47e..5a8b04d2e 100644 --- a/src/java/com/threerings/parlor/turn/server/TurnGameManagerDelegate.java +++ b/src/java/com/threerings/parlor/turn/server/TurnGameManagerDelegate.java @@ -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. */