private object CreateCombatCalculatorCombatModeViewModel()
        {
            var vm = new CombatCalculatorCombatModeViewModel();

            vm.InMemoryManager = InMemoryManagerInstance;
            return(vm);
        }
        private static void RightFuryChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CombatCalculatorCombatModeViewModel vm = (CombatCalculatorCombatModeViewModel)d;

            vm.PreviewRound.Execute(null);

            if (vm.OnRightUsedFuryChanged != null)
            {
                vm.OnRightUsedFuryChanged(d, e);
            }
        }
        private static void RightSelectedCardChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CombatCalculatorCombatModeViewModel vm = (CombatCalculatorCombatModeViewModel)d;

            if (e.NewValue == null)
            {
                vm.RightUsedPillz = null;
            }

            vm.PreviewRound.Execute(null);

            if (vm.OnRightSelectedCardChanged != null)
            {
                vm.OnRightSelectedCardChanged(d, e);
            }
        }
        private static object CoerceRightUsedPillz(DependencyObject d, object baseValue)
        {
            CombatCalculatorCombatModeViewModel vm = (CombatCalculatorCombatModeViewModel)d;

            if (vm.RightSelectedCard == null || baseValue == null)
            {
                return(null);
            }
            if ((int)baseValue < 0)
            {
                return(0);
            }

            int usedPillz       = (int)baseValue;
            int maxAllowedPillz = vm.Combat.RightPlayerStatus.Pillz - (vm.RightUsedFury ? 3 : 0);

            Debug.Assert(maxAllowedPillz >= 0);
            return(Math.Min(usedPillz, maxAllowedPillz));
        }
        private static void LeftUsedPillzChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            CombatCalculatorCombatModeViewModel vm = (CombatCalculatorCombatModeViewModel)d;

            if (e.NewValue == null)
            {
                vm.LeftUsedFury = false;
            }
            else if ((int)e.NewValue < 0)
            {
                vm.LeftUsedPillz = null;
            }

            vm.PreviewRound.Execute(null);

            if (vm.OnLeftUsedPillzChanged != null)
            {
                vm.OnLeftUsedPillzChanged(d, e);
            }
        }
        private static object CoerceRightUsedFury(DependencyObject d, object baseValue)
        {
            if ((bool)baseValue == false)
            {
                return(false);
            }

            CombatCalculatorCombatModeViewModel vm = (CombatCalculatorCombatModeViewModel)d;

            if (vm.RightUsedPillz == null)
            {
                return(false);
            }

            int usedPillz      = (int)vm.RightUsedPillz;
            int remainingPillz = vm.Combat.RightPlayerStatus.Pillz;

            if (remainingPillz - usedPillz < 3)
            {
                return(false);
            }

            return(true);
        }