| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | using System.Collections.Generic;using UnityEngine;namespace XCharts.Runtime{    internal static class DataHelper    {        public static double DataAverage(ref List<SerieData> showData, SampleType sampleType,            int minCount, int maxCount, int rate)        {            double totalAverage = 0;            if (rate > 1 && sampleType == SampleType.Peak)            {                double total = 0;                for (int i = minCount; i < maxCount; i++)                {                    total += showData[i].data[1];                }                totalAverage = total / (maxCount - minCount);            }            return totalAverage;        }        public static double SampleValue(ref List<SerieData> showData, SampleType sampleType, int rate,            int minCount, int maxCount, double totalAverage, int index, float dataAddDuration, float dataChangeDuration,            ref bool dataChanging, Axis axis, bool unscaledTime)        {            var inverse = axis.inverse;            var minValue = 0;            var maxValue = 0;            if (rate <= 1 || index == minCount)            {                if (showData[index].IsDataChanged())                    dataChanging = true;                return showData[index].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);            }            switch (sampleType)            {                case SampleType.Sum:                case SampleType.Average:                    double total = 0;                    var count = 0;                    for (int i = index; i > index - rate; i--)                    {                        count++;                        total += showData[i].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);                        if (showData[i].IsDataChanged())                            dataChanging = true;                    }                    if (sampleType == SampleType.Average)                        return total / rate;                    else                        return total;                case SampleType.Max:                    double max = double.MinValue;                    for (int i = index; i > index - rate; i--)                    {                        var value = showData[i].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);                        if (value > max)                            max = value;                        if (showData[i].IsDataChanged())                            dataChanging = true;                    }                    return max;                case SampleType.Min:                    double min = double.MaxValue;                    for (int i = index; i > index - rate; i--)                    {                        var value = showData[i].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);                        if (value < min)                            min = value;                        if (showData[i].IsDataChanged())                            dataChanging = true;                    }                    return min;                case SampleType.Peak:                    max = double.MinValue;                    min = double.MaxValue;                    total = 0;                    for (int i = index; i > index - rate; i--)                    {                        var value = showData[i].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);                        total += value;                        if (value < min)                            min = value;                        if (value > max)                            max = value;                        if (showData[i].IsDataChanged())                            dataChanging = true;                    }                    var average = total / rate;                    if (average >= totalAverage)                        return max;                    else                        return min;            }            if (showData[index].IsDataChanged())                dataChanging = true;            return showData[index].GetCurrData(1, dataAddDuration, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);        }    }}
 |