private LadderImplantGroup(params int[] implantTemplateIndexes)
 {
     LadderImplantTemplates = implantTemplateIndexes
                              .Select(i => ImplantTemplate.ImplantTemplates[i])
                              .ToArray();
     ImplantSlot            = LadderImplantTemplates[0].ImplantSlot;
     RaisedLadderStats      = LadderImplantTemplates[0].RaisedLadderStats;
     RequiredAbilityOptions = LadderImplantTemplates
                              .Select(t => t.RequiredAbility)
                              .ToArray();
 }
        public ImplantTemplate GetBestImplantTemplate(Character character)
        {
            if (LadderImplantTemplates.Count == 1)
            {
                return(LadderImplantTemplates[0]);
            }

            var bestImplantTemplate = LadderImplantTemplates[0];
            int abilityValueForBestImplantTemplate = character.GetAbilityValue(bestImplantTemplate.RequiredAbility);

            foreach (var implantTemplate in LadderImplantTemplates.Skip(1))
            {
                int abilityValueForThisImplantTemplate = character.GetAbilityValue(implantTemplate.RequiredAbility);
                if (abilityValueForThisImplantTemplate > abilityValueForBestImplantTemplate)
                {
                    bestImplantTemplate = implantTemplate;
                    abilityValueForBestImplantTemplate = abilityValueForThisImplantTemplate;
                }
            }

            return(bestImplantTemplate);
        }