public async void GeneratePacks(object sender, EventArgs args) { bool valid = Int32.TryParse(this.PackNumEntry.Text, out int packNum); if (!valid || packNum < 0) { await this.DisplayAlert("Invalid Pack Number", $"'{this.PackNumEntry.Text}' is not a valid number", "Okay"); return; } CubeParser parser; try { parser = new CubeParser(this.CubeDefEditor.Text, ConfigurationManager.ActiveDeck); } catch (Exception exc) { await this.DisplayAlert("Failed to Compile", $"Error: ${exc.Message}", "Okay"); return; } List <List <PackCard> > cards = new List <List <PackCard> >(); try { for (int i = 0; i < packNum; i++) { List <PackCard> pack = parser.MakePack(); cards.Add(pack); } } catch (Exception exc) { await this.DisplayAlert("Failed to Exectue", $"Error: ${exc.Message}", "Okay"); return; } Deck generated = new Deck(false) { Name = "Generated Packs" }; for (int i = 0; i < cards.Count; i++) { foreach (PackCard card in cards[i]) { generated.AddCard(card.Card, Deck.MASTER, !card.Foil); generated.AddCard(card.Card, $"Pack {i+1}", !card.Foil); } } generated.RemoveBoard("Mainboard"); generated.RemoveBoard("Sideboard"); foreach (Deck.BoardInfo info in generated.BoardInfos) { info.Editable = info.Viewable = info.Name != Deck.MASTER; } await Navigation.PushAsync(new DeckPage(generated, false)); }