public void Add(Card card)
        {
            if (!CanHoldAdditionalCards) {
                return;
            }

            if (stack.Children.Contains(card)) {
                return;
            }

            double offset = 0;

            bool shouldOffsetCard = false;

            if (IsLimitingShownCards) {
                if (HoldsMoreCardsThanShown || StackCount == MaxShownCards) {
                    card.Visibility = Visibility.Collapsed;
                } else {
                    shouldOffsetCard = true;
                }
            } else {
                shouldOffsetCard = true;
            }

            if (shouldOffsetCard) {
                offset = StackVerticalOffset;
            }

            ((card.RenderTransform as TransformGroup).Children[0] as TranslateTransform).Y = offset;
            ((card.RenderTransform as TransformGroup).Children[1] as RotateTransform).Angle = 0;

            if (card.Parent is Panel) {
                (card.Parent as Panel).Children.Remove(card);
            }

            card.IsHitTestVisible = false;

            if (FlipsCardsWhenAdded) {
                card.Flip();
            }

            stack.Children.Add(card);
        }
        void ConvertStackToSword(CardSlot slot)
        {
            Card sword = new Card();

            CardViewModel swordCardContext = sword.DataContext as CardViewModel;

            swordCardContext.Type = CardType.Sword;
            swordCardContext.Value = slot.StackCount;

            slot.Add(sword);

            sword.Flip();
            sword.PlaceInSlot(weaponSlot, TimeSpan.FromSeconds(1));
        }