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