public void PlayTurn(PlayerState currentPlayer) { System.Threading.Interlocked.Increment(ref turnTotalCount); currentPlayer.numberOfTurnsPlayed += 1; IPlayerAction currentPlayerAction = currentPlayer.actions; this.gameLog.BeginTurn(currentPlayer); this.gameLog.PushScope(); currentPlayer.InitializeTurn(); ReturnCardsToHandAtStartOfTurn(currentPlayer); DoActionsQueuedFromPreviousTurn(currentPlayer); DoDurationActionsFromPreviousTurn(currentPlayer); DoActionPhase(currentPlayer); DoPlayTreasures(currentPlayer); currentPlayer.RequestPlayerSpendCoinTokensBeforeBuyPhase(this); DoBuyPhase(currentPlayer); DoCleanupPhase(currentPlayer); int cardCountForNextTurn = this.doesCurrentPlayerNeedOutpostTurn ? 3 : 5; currentPlayer.DrawUntilCountInHand(cardCountForNextTurn); currentPlayer.playPhase = PlayPhase.NotMyTurn; this.gameLog.EndTurn(currentPlayer); this.gameLog.PopScope(); }
public void PlayTurn(PlayerState currentPlayer) { System.Threading.Interlocked.Increment(ref turnTotalCount); currentPlayer.numberOfTurnsPlayed += 1; IPlayerAction currentPlayerAction = currentPlayer.actions; this.gameLog.BeginTurn(currentPlayer); this.gameLog.PushScope(); currentPlayer.InitializeTurn(); ReturnCardsToHandAtStartOfTurn(currentPlayer); DoActionsQueuedFromPreviousTurn(currentPlayer); DoDurationActionsFromPreviousTurn(currentPlayer); DoActionPhase(currentPlayer); DoPlayTreasures(currentPlayer); currentPlayer.RequestPlayerSpendCoinTokensBeforeBuyPhase(this); DoBuyPhase(currentPlayer); DoCleanupPhase(currentPlayer); int cardCountForNextTurn = this.doesCurrentPlayerNeedOutpostTurn ? 3 : 5; currentPlayer.EnterPhase(PlayPhase.DrawCards); currentPlayer.DrawUntilCountInHand(cardCountForNextTurn, this); currentPlayer.EnterPhase(PlayPhase.NotMyTurn); this.gameLog.PopScope(); this.gameLog.EndTurn(currentPlayer); // turn counters need to be 0 such that if this player ends up looking at the state while not it's turn // e.g. as reaction or attack, it can make correct choices on current state such as AvailableCoin. currentPlayer.InitializeTurn(); }