private void ChangeStatInner(SurvivalStat stat, int value) { var oldValue = stat.Value; stat.Value += value; // TODO Это можно вынести в сеттер if (stat.Value >= stat.Range.Max) { stat.Value = stat.Range.Max; } if (stat.Value <= stat.Range.Min) { stat.Value = stat.Range.Min; } var diff = RangeHelper.CreateNormalized <int>(oldValue, stat.Value); foreach (var keyPoint in stat.KeyPoints) { if (diff.Contains(keyPoint.Value)) { DoStatCrossKeyPoint(stat, keyPoint); } } }
/// <summary>Рассчитывает все ключевые точки в указанном диапазоне.</summary> /// <param name="keyPoints">Набор ключевых точек.</param> /// <param name="leftValue">The left value.</param> /// <param name="rightValue">The right value.</param> /// <returns> Возвращает набор точек, значения которых попадает в указанный диапазон. </returns> public static IEnumerable <SurvivalStatKeyPoint> CalcKeyPointsInRange( this SurvivalStatKeyPoint[] keyPoints, int leftValue, int rightValue) { var diff = RangeHelper.CreateNormalized(leftValue, rightValue); var orientedKeyPoints = keyPoints; if (!diff.IsAcs) { orientedKeyPoints = keyPoints.Reverse().ToArray(); } var crossedKeyPoints = new List <SurvivalStatKeyPoint>(); foreach (var keyPoint in orientedKeyPoints) { if (diff.Contains(keyPoint.Value)) { crossedKeyPoints.Add(keyPoint); } } return(crossedKeyPoints); }