Example #1
0
        /// <summary>
        /// Помещает в список бонус на ХП.
        /// </summary>
        /// <param name="level"> Уровень бонуса. </param>
        /// <param name="direction"> Направление бонуса. </param>
        /// <param name="bonuses">
        /// Аккумулирующий список бонусов.
        /// Отмечен ref, чтобы показать, что изменяется внутри метода.
        /// </param>
        private void BonusToHealth(PersonRuleLevel level, PersonRuleDirection direction,
                                   ref List <SurvivalStatBonus> bonuses)
        {
            const SurvivalStatType HP_STAT_TYPE = SurvivalStatType.Health;
            var hpStat = Stats.SingleOrDefault(x => x.Type == HP_STAT_TYPE);

            if (hpStat != null)
            {
                var bonus = 0;
                bonus = GetBonusByLevel(level);

                if (direction == PersonRuleDirection.Negative)
                {
                    bonus *= -1;
                }

                var currentBonus = bonuses.SingleOrDefault(x => x.SurvivalStatType == HP_STAT_TYPE);
                if (currentBonus == null)
                {
                    currentBonus = new SurvivalStatBonus(HP_STAT_TYPE);
                    bonuses.Add(currentBonus);
                }

                currentBonus.ValueBonus += bonus;
            }
        }
Example #2
0
        /// <summary>
        /// Помещает в список бонус на ХП.
        /// </summary>
        /// <param name="level"> Уровень бонуса. </param>
        /// <param name="direction"> Направление бонуса. </param>
        /// <param name="bonuses">
        /// Аккумулирующий список бонусов.
        /// Отмечен ref, чтобы показать, что изменяется внутри метода.
        /// </param>
        private void BonusToHealth(PersonRuleLevel level, PersonRuleDirection direction,
                                   ref List <SurvivalStatBonus> bonuses)
        {
            const SurvivalStatType HP_STAT_TYPE = SurvivalStatType.Health;
            var hpStat = Stats.SingleOrDefault(x => x.Type == HP_STAT_TYPE);

            if (hpStat != null)
            {
                var bonus = 0;
                switch (level)
                {
                case PersonRuleLevel.Lesser:
                    bonus = 1;
                    break;

                case PersonRuleLevel.Normal:
                    bonus = 3;
                    break;

                case PersonRuleLevel.Grand:
                    bonus = 5;
                    break;

                case PersonRuleLevel.Absolute:
                    bonus = 10;
                    break;

                case PersonRuleLevel.None:
                    throw new InvalidOperationException("Неопределённое правило.");

                default:
                    throw new InvalidOperationException($"Правило {level} не обрабатывается.");
                }

                if (direction == PersonRuleDirection.Negative)
                {
                    bonus *= -1;
                }

                var currentBonus = bonuses.SingleOrDefault(x => x.SurvivalStatType == HP_STAT_TYPE);
                if (currentBonus == null)
                {
                    currentBonus = new SurvivalStatBonus(HP_STAT_TYPE);
                    bonuses.Add(currentBonus);
                }

                currentBonus.ValueBonus += bonus;
            }
        }
        private static void BonusToDownPass(
            SurvivalStatType statType,
            PersonRuleLevel level,
            PersonRuleDirection direction,
            ref List <SurvivalStatBonus> bonuses)
        {
            var currentBonusValue = 0;
            var directionQuaff    = direction == PersonRuleDirection.Negative ? -1 : 1;

            switch (level)
            {
            case PersonRuleLevel.Lesser:
                currentBonusValue = 1 * directionQuaff;
                break;

            case PersonRuleLevel.Normal:
                currentBonusValue = 2 * directionQuaff;
                break;

            case PersonRuleLevel.Grand:
                currentBonusValue = 5 * directionQuaff;
                break;

            case PersonRuleLevel.Absolute:
                currentBonusValue = 10 * directionQuaff;
                break;

            case PersonRuleLevel.None:
                Debug.Fail("Предположительно, это ошибка.");
                break;

            default:
                Debug.Fail("Предположительно, это ошибка.");
                break;
            }

            var currentBonus = new SurvivalStatBonus(statType)
            {
                DownPassBonus = currentBonusValue
            };

            bonuses.Add(currentBonus);
        }