コード例 #1
0
ファイル: SkillPoint.cs プロジェクト: cabarius/ToyBox
        public static int?GetTotalSkillPoints(UnitDescriptor unit, int nextLevel)
        {
            var intelligenceSkillPoints = LevelUpHelper.GetTotalIntelligenceSkillPoints(unit, nextLevel);
            var classes         = unit.Progression.Classes;
            var split           = classes.GroupBy(cd => unit.IsClassGestalt(cd.CharacterClass));
            var total           = 0;
            var gestaltCount    = 0;
            var baseTotal       = 0;
            var gestaltSumOrMax = 0;

            foreach (var group in split)
            {
                if (group.Key == false)
                {
                    baseTotal += group.ToList().Sum(cd => cd.CalcTotalSkillPointsNonMythic());
                }
                else
                {
                    var gestaltClasses = group.ToList();
                    gestaltCount = gestaltClasses.Count;
                    if (gestaltCount > 0)
                    {
                        switch (Main.settings.multiclassSkillPointPolicy)
                        {
                        case ProgressionPolicy.Largest:
                            gestaltSumOrMax += gestaltClasses.Max(cl => cl.CalcTotalSkillPointsNonMythic());
                            break;

                        case ProgressionPolicy.Average:
                        case ProgressionPolicy.Sum:
                            gestaltSumOrMax += gestaltClasses.Sum(cl => cl.CalcTotalSkillPointsNonMythic());
                            break;

                        default:
                            break;
                        }
                    }
                }
            }
            total = Main.settings.multiclassSkillPointPolicy switch {
                ProgressionPolicy.Largest => Mathf.Max(baseTotal, gestaltSumOrMax),
                ProgressionPolicy.Average => (gestaltSumOrMax + baseTotal) / (gestaltCount + 1),
                ProgressionPolicy.Sum => gestaltSumOrMax + baseTotal,
                _ => baseTotal,
            };
            return(Mathf.Max(intelligenceSkillPoints + total, nextLevel));
        }