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();
}