Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        /// <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);
        }