private async void RemoveCard(AnimatedCard card, bool fadeOut)
		{
			if(fadeOut)
				await card.FadeOut(card.Card.Count > 0);
			_animatedCards.Remove(card);
			ItemsControl.Items.Remove(card);
		}
		public void Update(List<Hearthstone.Card> cards, bool reset)
		{
			try
			{
				if(reset)
				{
					_animatedCards.Clear();
					ItemsControl.Items.Clear();
				}
				var newCards = new List<Hearthstone.Card>();
				foreach(var card in cards)
				{
					var existing = _animatedCards.FirstOrDefault(x => AreEqualForList(x.Card, card));
					if(existing == null)
						newCards.Add(card);
					else if(existing.Card.Count != card.Count || existing.Card.HighlightInHand != card.HighlightInHand)
					{
						var highlight = existing.Card.Count != card.Count;
						existing.Card.Count = card.Count;
						existing.Card.HighlightInHand = card.HighlightInHand;
						existing.Update(highlight).Forget();
					}
					else if(existing.Card.IsCreated != card.IsCreated)
						existing.Update(false).Forget();
				}
				var toUpdate = new List<AnimatedCard>();
				foreach(var aCard in _animatedCards)
				{
					if(!cards.Any(x => AreEqualForList(x, aCard.Card)))
						toUpdate.Add(aCard);
				}
				var toRemove = new List<Tuple<AnimatedCard, bool>>();
				foreach(var card in toUpdate)
				{
					var newCard = newCards.FirstOrDefault(x => x.Id == card.Card.Id);
					toRemove.Add(new Tuple<AnimatedCard, bool>(card, newCard == null));
					if(newCard != null)
					{
						var newAnimated = new AnimatedCard(newCard);
						_animatedCards.Insert(_animatedCards.IndexOf(card), newAnimated);
						ItemsControl.Items.Insert(_animatedCards.IndexOf(card), newAnimated);
						newAnimated.Update(true).Forget();
						newCards.Remove(newCard);
					}
				}
				foreach(var card in toRemove)
					RemoveCard(card.Item1, card.Item2);
				foreach(var card in newCards)
				{
					var newCard = new AnimatedCard(card);
					_animatedCards.Insert(cards.IndexOf(card), newCard);
					ItemsControl.Items.Insert(cards.IndexOf(card), newCard);
					newCard.FadeIn(!reset).Forget();
				}
			}
			catch(Exception e)
			{
				Log.Error(e);
			}
		}
 private async void RemoveCard(AnimatedCard card, bool fadeOut)
 {
     if (fadeOut)
     {
         await card.FadeOut(card.Card.Count > 0);
     }
     _animatedCards.Remove(card);
     ItemsControl.Items.Remove(card);
 }
 public void Update(List <Hearthstone.Card> cards, bool reset)
 {
     try
     {
         if (reset)
         {
             _animatedCards.Clear();
             ItemsControl.Items.Clear();
         }
         var newCards = new List <Hearthstone.Card>();
         foreach (var card in cards)
         {
             var existing = _animatedCards.FirstOrDefault(x => AreEqualForList(x.Card, card));
             if (existing == null)
             {
                 newCards.Add(card);
             }
             else if (existing.Card.Count != card.Count || existing.Card.HighlightInHand != card.HighlightInHand)
             {
                 var highlight = existing.Card.Count != card.Count;
                 existing.Card.Count           = card.Count;
                 existing.Card.HighlightInHand = card.HighlightInHand;
                 existing.Update(highlight).Forget();
             }
             else if (existing.Card.IsCreated != card.IsCreated)
             {
                 existing.Update(false).Forget();
             }
         }
         var toUpdate = new List <AnimatedCard>();
         foreach (var aCard in _animatedCards)
         {
             if (!cards.Any(x => AreEqualForList(x, aCard.Card)))
             {
                 toUpdate.Add(aCard);
             }
         }
         var toRemove = new List <Tuple <AnimatedCard, bool> >();
         foreach (var card in toUpdate)
         {
             var newCard = newCards.FirstOrDefault(x => x.Id == card.Card.Id);
             toRemove.Add(new Tuple <AnimatedCard, bool>(card, newCard == null));
             if (newCard != null)
             {
                 var newAnimated = new AnimatedCard(newCard);
                 _animatedCards.Insert(_animatedCards.IndexOf(card), newAnimated);
                 ItemsControl.Items.Insert(_animatedCards.IndexOf(card), newAnimated);
                 newAnimated.Update(true).Forget();
                 newCards.Remove(newCard);
             }
         }
         foreach (var card in toRemove)
         {
             RemoveCard(card.Item1, card.Item2);
         }
         foreach (var card in newCards)
         {
             var newCard = new AnimatedCard(card);
             _animatedCards.Insert(cards.IndexOf(card), newCard);
             ItemsControl.Items.Insert(cards.IndexOf(card), newCard);
             newCard.FadeIn(!reset).Forget();
         }
     }
     catch (Exception e)
     {
         Log.Error(e);
     }
 }