UnoTV.Web.Game.GameState.MoveToNextPlayer C# (CSharp) Method

MoveToNextPlayer() private method

private MoveToNextPlayer ( Card card ) : void
card UnoTV.Web.Domain.Card
return void
        private void MoveToNextPlayer(Card card)
        {
            if (CurrentPlayer == null)
                CurrentPlayer = Players.First();

            if (card != null)
                CurrentPlayer.Hand.RemoveCard(card);

            var index = Players.IndexOf(CurrentPlayer);

            index = UpdateIndex(index);

            if (card != null && card.Type == CardType.Skip)
                index = UpdateIndex(index);

            CurrentPlayer = Players[index];

            foreach (var playableCard in CurrentPlayer.Hand.PlayableCards)
            {
                playableCard.PickedUp = false;
            }

            if (card != null)
            {
                if (card.Type == CardType.WildDraw)
                {
                    CurrentPlayer.Hand.PlayableCards.Add(new PlayableCard(PlayedCards.Dequeue(), true));
                    CurrentPlayer.Hand.PlayableCards.Add(new PlayableCard(PlayedCards.Dequeue(), true));
                }

                if (card.Type == CardType.Draw || card.Type == CardType.WildDraw)
                {
                    CurrentPlayer.Hand.PlayableCards.Add(new PlayableCard(PlayedCards.Dequeue(), true));
                    CurrentPlayer.Hand.PlayableCards.Add(new PlayableCard(PlayedCards.Dequeue(), true));
                    index = UpdateIndex(index);
                    CurrentPlayer = Players[index];
                }
            }

            PlayableCards.Process(CurrentPlayer.Hand.PlayableCards, CurrentCard);

            if (CurrentPlayer.Hand.HasPlayableCard == false)
            {
                CurrentPlayer.Hand.PlayableCards.Add(new PlayableCard(PlayedCards.Dequeue(), true)
                {
                    Playable = false
                });
            }
        }