/// <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; } }
/// <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); }