private void FillSurvivalBonusesFromPerks([NotNull, ItemNotNull] ref List <SurvivalStatBonus> bonusList)
        {
            if (EvolutionData == null)
            {
                return;
            }

            var archievedPerks = EvolutionData.GetArchievedPerks();

            foreach (var archievedPerk in archievedPerks)
            {
                var currentLevel       = archievedPerk.CurrentLevel;
                var currentLevelScheme = archievedPerk.Scheme.Levels[currentLevel.Primary];

                if (currentLevelScheme.Rules == null)
                {
                    continue;
                }

                for (var i = 0; i <= currentLevel.Sub; i++)
                {
                    foreach (var rule in currentLevelScheme.Rules)
                    {
                        if (rule.Type == PersonRuleType.Health)
                        {
                            BonusToHealth(rule.Level, PersonRuleDirection.Positive, ref bonusList);
                        }
                    }
                }
            }
        }
        private IEnumerable <IPerk> GetPerksSafe()
        {
            var perks = EvolutionData?.GetArchievedPerks();

            if (perks == null)
            {
                perks = new IPerk[0];
            }

            return(perks);
        }
        /// <summary>
        /// Расчёт бонусов, которые дают перки.
        /// </summary>
        /// <param name="bonusDict"> Текущее состояние бонусов. </param>
        private void CalcPerkBonuses(Dictionary <SkillStatType, float> bonusDict)
        {
            var archievedPerks = EvolutionData.GetArchievedPerks();

            foreach (var archievedPerk in archievedPerks)
            {
                var currentLevel       = archievedPerk.CurrentLevel;
                var currentLevelScheme = archievedPerk.Scheme.Levels[currentLevel.Primary];

                if (currentLevelScheme.Rules == null)
                {
                    continue;
                }

                for (var i = 0; i <= currentLevel.Sub; i++)
                {
                    foreach (var rule in currentLevelScheme.Rules)
                    {
                        CalcRuleBonuses(rule, bonusDict);
                    }
                }
            }
        }