/// <summary> /// Updated the whole UI using a deck code /// </summary> /// <param name="deckCode"></param> /// <returns></returns> private async Task Update(string deckCode) { //Decode the string into a deck. See if it's valid DecodedDeck decodedDeck = await m_client.DecodeDeckAsync(deckCode); if (decodedDeck == null) { Console.WriteLine("Unable to get deck. DeckCode is invald"); return; } g_Loading.Visibility = Visibility.Visible; /*Reset all UI holder*/ if (img_HeroOne.Source != null) { img_HeroOne.Source = null; } if (img_HeroTwo.Source != null) { img_HeroTwo.Source = null; } if (img_HeroThree.Source != null) { img_HeroThree.Source = null; } if (img_HeroFour.Source != null) { img_HeroFour.Source = null; } if (img_HeroFive.Source != null) { img_HeroFive.Source = null; } await SetFocusedCard(-1, ArtType.Ingame, Enums.Language.English); t_totalCards.Text = null; t_totalItems.Text = null; t_TCSpell.Text = null; t_TCCreep.Text = null; t_TCImprovement.Text = null; t_TIarmor.Text = null; t_TIweapon.Text = null; t_TIhealth.Text = null; t_TIconsumable.Text = null; /*End of resetting UI holders*/ //Set the deck name title tb_DeckName.Text = decodedDeck.Name; //Decode the deck to the complete deck Deck deck = await m_client.GetCardsFromDecodedDeckAsync(decodedDeck); //Populate the hero UI List <System.Windows.Controls.Image> heroImageHolders = new List <System.Windows.Controls.Image>() { img_HeroOne, img_HeroTwo, img_HeroThree, img_HeroFour, img_HeroFive }; for (int i = 0; i < deck.Heroes.Count; i++) { int additional = 0; int turn = deck.Heroes[i].Turn; if (turn > 1) { turn += 2; //Add 2 because of heroImageHolders elements 0-2 } //If the hero turn is 1, but already added a hero, then increase additional counter while (heroImageHolders[turn - 1 + additional].Source != null) { additional++; } System.Windows.Controls.Image img = heroImageHolders[turn - 1 + additional]; img.Source = GetImageFromUrl(deck.Heroes[i].IngameImage.Default); img.DataContext = deck.Heroes[i]; //Set context for click event finding card art } //Sort cards by mana cost & set UI List <GenericCard> sortedList = deck.Cards.OrderBy(x => x.ManaCost).ToList(); ic_genericCardsList.ItemsSource = sortedList; //Total cards excludes items, hence the separate total items UI int totalGeneric = deck.Cards.Sum(x => x is GenericCard && x.Type == CardType.Item ? ((GenericCard)x).Count : 0); t_totalCards.Text = $"{totalGeneric} CARDS"; t_totalItems.Text = $"{deck.Cards.Sum(x => x.Type == CardType.Item ? x.Count : 0)} ITEMS"; //Find out both colors of deck and get stats for each color CardColor colorOne = GetOtherColor(deck.Cards, CardColor.None); CardColor colorTwo = GetOtherColor(deck.Cards, colorOne | CardColor.None); ManaDeckInfoDto deckManaInfo = new ManaDeckInfoDto() { OneManaCards = GetManaAmount(deck.Cards, 1), TwoManaCards = GetManaAmount(deck.Cards, 2), ThreeManaCards = GetManaAmount(deck.Cards, 3), FourManaCards = GetManaAmount(deck.Cards, 4), FiveManaCards = GetManaAmount(deck.Cards, 5), SixManaCards = GetManaAmount(deck.Cards, 6), SevenManaCards = GetManaAmount(deck.Cards, 7), EightPlusManaCards = deck.Cards.Sum(x => x.ManaCost >= 8 ? x.Count : 0), ColorOneBrush = FactionColorToBrush(colorOne), ColorTwoBrush = FactionColorToBrush(colorTwo), ColorOneTotalCardCount = deck.Cards.Sum(x => x.FactionColor == colorOne ? x.Count : 0), ColorTwoTotalCardCount = deck.Cards.Sum(x => x.FactionColor == colorTwo ? x.Count : 0), }; deckManaInfo.MaxManaCardCount = GetMaxMana(deckManaInfo.OneManaCards, deckManaInfo.TwoManaCards, deckManaInfo.ThreeManaCards, deckManaInfo.FourManaCards, deckManaInfo.FiveManaCards, deckManaInfo.SixManaCards, deckManaInfo.SevenManaCards, deckManaInfo.EightPlusManaCards); ic_deckStats.ItemsSource = new List <ManaDeckInfoDto>() { deckManaInfo }; //Set relevant stat information for deck t_TCSpell.Text = deck.Cards.Sum(x => x.Type == CardType.Spell ? x.Count : 0).ToString(); t_TCCreep.Text = deck.Cards.Sum(x => x.Type == CardType.Creep ? x.Count : 0).ToString(); t_TCImprovement.Text = deck.Cards.Sum(x => (x.Type == CardType.Improvement) ? x.Count : 0).ToString(); t_TIarmor.Text = deck.Cards.Sum(x => x.Type == CardType.Item && x.SubType == CardType.Armor ? x.Count : 0).ToString(); t_TIweapon.Text = deck.Cards.Sum(x => x.Type == CardType.Item && x.SubType == CardType.Weapon ? x.Count : 0).ToString(); t_TIhealth.Text = deck.Cards.Sum(x => x.Type == CardType.Item && x.SubType == CardType.Accessory ? x.Count : 0).ToString(); t_TIconsumable.Text = deck.Cards.Sum(x => x.Type == CardType.Item && x.SubType == CardType.Consumable ? x.Count : 0).ToString(); g_Loading.Visibility = Visibility.Collapsed; }