public static AbilityScores UpdateAbilityScores(AbilityScores abilityScores)
        {
            AbilityScoreManager abilityScoreRules = new AbilityScoreManager();

            abilityScores.Strength     = abilityScoreRules.SetStrength(abilityScores.Strength.Value);
            abilityScores.Dexterity    = abilityScoreRules.SetDexterity(abilityScores.Dexterity.Value);
            abilityScores.Constitution = abilityScoreRules.SetConstitution(abilityScores.Constitution.Value);
            abilityScores.Intelligence = abilityScoreRules.SetIntelligence(abilityScores.Intelligence.Value);
            abilityScores.Wisdom       = abilityScoreRules.SetWisdom(abilityScores.Wisdom.Value);
            abilityScores.Charisma     = abilityScoreRules.SetCharisma(abilityScores.Charisma.Value);
            return(abilityScores);
        }
        public static AbilityScores RandomizeAbilityScores(AbilityScores abilityScores, IClass _char = null)
        {
            AbilityScoreManager abilityScoreRules = new AbilityScoreManager();

            List <int> allRolls = new List <int>();

            allRolls.Add(DiceManager.FourDSixDropTheLowest());
            allRolls.Add(DiceManager.FourDSixDropTheLowest());
            allRolls.Add(DiceManager.FourDSixDropTheLowest());
            allRolls.Add(DiceManager.FourDSixDropTheLowest());
            allRolls.Add(DiceManager.FourDSixDropTheLowest());
            allRolls.Add(DiceManager.FourDSixDropTheLowest());

            var orderedList = allRolls.OrderByDescending(x => x);

            List <AbilityScoreType> primeAdded = new List <AbilityScoreType>();

            int orderedI = 0;

            foreach (var minIndi in _char.MinimumAbilityScoreRequirements)
            {
                var thisRoll = orderedList.ElementAt(orderedI);
                switch (minIndi.Key)
                {
                case AbilityScoreType.Strength:
                    abilityScores.Strength = abilityScoreRules.SetStrength(thisRoll);
                    primeAdded.Add(AbilityScoreType.Strength);
                    ++orderedI;
                    break;

                case AbilityScoreType.Dextarity:
                    abilityScores.Dexterity = abilityScoreRules.SetDexterity(thisRoll);
                    primeAdded.Add(AbilityScoreType.Strength);
                    ++orderedI;
                    break;

                case AbilityScoreType.Constitution:
                    abilityScores.Constitution = abilityScoreRules.SetConstitution(thisRoll);
                    primeAdded.Add(AbilityScoreType.Strength);
                    ++orderedI;
                    break;

                case AbilityScoreType.Intelligence:
                    abilityScores.Intelligence = abilityScoreRules.SetIntelligence(thisRoll);
                    primeAdded.Add(AbilityScoreType.Intelligence);
                    ++orderedI;
                    break;

                case AbilityScoreType.Wisdom:
                    abilityScores.Wisdom = abilityScoreRules.SetWisdom(thisRoll);
                    primeAdded.Add(AbilityScoreType.Wisdom);
                    ++orderedI;
                    break;

                case AbilityScoreType.Charisma:
                    abilityScores.Charisma = abilityScoreRules.SetCharisma(thisRoll);
                    primeAdded.Add(AbilityScoreType.Charisma);
                    ++orderedI;
                    break;
                }
            }

            List <AbilityScoreType> AllAbilityScores = new List <AbilityScoreType>
            {
                AbilityScoreType.Strength,
                AbilityScoreType.Dextarity,
                AbilityScoreType.Constitution,
                AbilityScoreType.Intelligence,
                AbilityScoreType.Wisdom,
                AbilityScoreType.Charisma
            };

            foreach (var this_ability in AllAbilityScores)
            {
                var thisRoll = orderedList.ElementAt(orderedI);
                if (!primeAdded.Contains(this_ability))
                {
                    switch (this_ability)
                    {
                    case AbilityScoreType.Strength:
                        abilityScores.Strength = abilityScoreRules.SetStrength(thisRoll);
                        ++orderedI;
                        break;

                    case AbilityScoreType.Dextarity:
                        abilityScores.Dexterity = abilityScoreRules.SetDexterity(thisRoll);
                        ++orderedI;
                        break;

                    case AbilityScoreType.Constitution:
                        abilityScores.Constitution = abilityScoreRules.SetConstitution(thisRoll);
                        ++orderedI;
                        break;

                    case AbilityScoreType.Intelligence:
                        abilityScores.Intelligence = abilityScoreRules.SetIntelligence(thisRoll);
                        ++orderedI;
                        break;

                    case AbilityScoreType.Wisdom:
                        abilityScores.Wisdom = abilityScoreRules.SetWisdom(thisRoll);
                        ++orderedI;
                        break;

                    case AbilityScoreType.Charisma:
                        abilityScores.Charisma = abilityScoreRules.SetCharisma(thisRoll);
                        ++orderedI;
                        break;
                    }
                }
            }

            return(abilityScores);
        }