CardsAgainstIRC3.Game.States.ChoosingCards.Activate C# (CSharp) Method

Activate() public method

public Activate ( ) : void
return void
        public override void Activate()
        {
            foreach (var person in Manager.AllUsers.Where(a => a.WantsToLeave).Select(a => a.Nick).ToArray())
            {
                Manager.UserQuit(person);
            }

            Manager.UpdateCzars();

            var czar = Manager.NextCzar();
            Manager.NewBlackCard();

            if (Manager.AllUsers.Count() < 3)
            {
                Manager.SendToAll("Not enough players, stopping game");
                Manager.Reset();
                return;
            }

            foreach (var person in Manager.AllUsers)
            {
                person.HasChosenCards = person.HasVoted = false;

                if (person.Bot == null && person.CanChooseCards && (person != czar || Manager.Mode == GameManager.GameMode.SovietRussia))
                    WaitingOnUsers.Add(person);
            }

            Manager.Rounds++;

            if (Manager.Mode != GameManager.GameMode.SovietRussia)
                Manager.SendToAll("Round {0}! {1} is czar! {2}, choose your cards!", Manager.Rounds, czar.Nick, string.Join(", ", WaitingOnUsers.Select(a => a.Nick)));
            else
                Manager.SendToAll("Round {0}! {1}, choose your cards!", Manager.Rounds, string.Join(", ", WaitingOnUsers.Select(a => a.Nick)));
            Manager.SendToAll("Current Card: {0}", Manager.CurrentBlackCard.Representation());

            bool outOfCards = false;

            foreach (var user in WaitingOnUsers)
                if (!user.UpdateCards())
                {
                    outOfCards = true;
                    break;
                }

            if (!outOfCards && Manager.CurrentBlackCard.Parts.Length > 3)
                foreach (var user in WaitingOnUsers)
                    if (!user.AddExtraCards(Manager.CurrentBlackCard.Parts.Length - 2))
                    {
                        outOfCards = true;
                        break;
                    }

            foreach (var user in WaitingOnUsers)
                user.SendCards();

            if (outOfCards)
                Manager.SendToAll("WARNING: Not enough cards to continue another round! Continuing, but please add another deck.");

            CheckReady();
        }