예제 #1
0
        private void CreateDraftDecks()
        {
            var draftScreen = Ui.Dialogs.DraftScreen.Create(_players);

            Ui.Shell.ChangeScreen(draftScreen);

            var runner  = new DraftRunner(draftScreen);
            var results = runner.Run(_players.Count, _p.BoosterPacks, _cardRatings);

            if (draftScreen.PlayerLeftDraft)
            {
                Stop();
                return;
            }

            var nonHumanPlayers   = NonHumanPlayers.ToList();
            var nonHumanLibraries = results.Libraries.Skip(1).ToList();

            _humanLibrary = results.Libraries[0];

            AggregateException exception = null;

            Task.Factory.StartNew(() =>
            {
                for (var count = 0; count < nonHumanPlayers.Count; count++)
                {
                    var player  = nonHumanPlayers[count];
                    var library = nonHumanLibraries[count];
                    var deck    = DeckBuilder.BuildDeck(library, _cardRatings);
                    player.Deck = deck;

                    Ui.Publisher.Publish(new DeckGenerationStatus
                    {
                        PercentCompleted = (int)Math.Round((100 * (count + 1.0)) / nonHumanPlayers.Count)
                    });

                    if (_shouldStop)
                    {
                        break;
                    }
                }
            })
            .ContinueWith(t =>
            {
                exception = t.Exception;
                Ui.Publisher.Publish(new DeckGenerationError());
            }, TaskContinuationOptions.OnlyOnFaulted);


            CreateHumanDeck();

            if (exception != null)
            {
                throw new AggregateException(exception.InnerExceptions);
            }
        }
예제 #2
0
        private void CreateDraftDecks()
        {
            var draftScreen = Ui.Dialogs.DraftScreen.Create(_players);
              Ui.Shell.ChangeScreen(draftScreen);

              var runner = new DraftRunner(draftScreen);
              var results = runner.Run(_players.Count, _p.BoosterPacks, _cardRatings);

              if (draftScreen.PlayerLeftDraft)
              {
            Stop();
            return;
              }

              var nonHumanPlayers = NonHumanPlayers.ToList();
              var nonHumanLibraries = results.Libraries.Skip(1).ToList();
              _humanLibrary = results.Libraries[0];

              AggregateException exception = null;

              Task.Factory.StartNew(() =>
            {
              for (var count = 0; count < nonHumanPlayers.Count; count++)
              {
            var player = nonHumanPlayers[count];
            var library = nonHumanLibraries[count];
            var deck = DeckBuilder.BuildDeck(library, _cardRatings);
            player.Deck = deck;

            Ui.Publisher.Publish(new DeckGenerationStatus
              {
                PercentCompleted = (int) Math.Round((100*(count + 1.0))/nonHumanPlayers.Count)
              });

            if (_shouldStop)
            {
              break;
            }
              }
            })
            .ContinueWith(t =>
              {
            exception = t.Exception;
            Ui.Publisher.Publish(new DeckGenerationError());
              }, TaskContinuationOptions.OnlyOnFaulted);

              CreateHumanDeck();

              if (exception != null)
            throw new AggregateException(exception.InnerExceptions);
        }