public void CalculateChartData(VF_RaidDamageDatabase.FightData _Fight
                                       , VF_RaidDamageDatabase.RealmDB _RealmDB
                                       , FightDataCollection _FightDataCollection
                                       , Func <VF_RaidDamageDatabase.UnitData, double> _GetValueLambda
                                       , ref int _PlayerCount
                                       , out List <int> _RetChartSectionData, out List <int> _RetChartSectionLabels)
        {
            _RetChartSectionData   = new List <int>();
            _RetChartSectionLabels = new List <int>();
            double lastTotalValue      = 0;
            int    firstTimeSliceIndex = _Fight.TimeSlices.FindIndex((_TimeSlice) => { return(_TimeSlice.Event.StartsWith("Start")); });
            int    timeStart           = _Fight.TimeSlices[firstTimeSliceIndex].Time;
            int    timeEnd             = timeStart + _Fight.FightDuration;
            int    lastTimeSliceTime   = timeStart;
            double totalValue          = 0;

            foreach (var timeSlice in _Fight.TimeSlices)
            {
                if (timeSlice.Time < timeStart || timeSlice.Time > timeEnd)
                {
                    continue;
                }
                int timeSlicePlayers = 0;
                foreach (var unit in timeSlice.UnitDatas)
                {
                    var    playerData = _RealmDB.RD_FindPlayer(_FightDataCollection.GetNameFromUnitID(unit.Key), _FightDataCollection.m_RaidMembers);
                    double currValue  = _GetValueLambda(unit.Value);
                    if (playerData != null && currValue > 0)
                    {
                        totalValue += currValue;
                        timeSlicePlayers++;
                    }
                }
                if (_Fight.TimeSlices.IndexOf(timeSlice) == firstTimeSliceIndex)
                {
                    lastTotalValue = totalValue;
                    totalValue     = 0;
                    continue;
                }
                else if (timeSlice.Time == lastTimeSliceTime)
                {
                    totalValue = 0;
                    continue;
                }
                if (timeSlicePlayers > _PlayerCount)
                {
                    _PlayerCount = timeSlicePlayers;
                }
                double deltaTotal = totalValue - lastTotalValue;
                lastTotalValue = totalValue;
                totalValue     = 0;
                _RetChartSectionData.Add((int)(deltaTotal / (timeSlice.Time - lastTimeSliceTime)));
                _RetChartSectionLabels.Add(timeSlice.Time - timeStart);
                lastTimeSliceTime = timeSlice.Time;
            }
        }
        public void CalculateChartData(VF_RaidDamageDatabase.FightData _Fight
                                       , FightDataCollection _FightDataCollection
                                       , VF_RealmPlayersDatabase.PlayerData.Player _Player
                                       , Func <VF_RaidDamageDatabase.UnitData, double> _GetValueLambda
                                       , out List <int> _RetChartSectionData, out List <int> _RetChartSectionLabels)
        {
            _RetChartSectionData   = new List <int>();
            _RetChartSectionLabels = new List <int>();
            int unitID = -1;

            try
            {
                unitID = _FightDataCollection.GetUnitIDFromName(_Player.Name);
            }
            catch (Exception)
            {
                return;
            }
            int firstTimeSliceIndex = _Fight.TimeSlices.FindIndex((_TimeSlice) => { return(_TimeSlice.Event.StartsWith("Start")); });
            int timeStart           = _Fight.TimeSlices[firstTimeSliceIndex].Time;
            int timeEnd             = timeStart + _Fight.FightDuration;
            int lastTimeSliceTime   = timeStart;

            foreach (var timeSlice in _Fight.TimeSlices)
            {
                if (timeSlice.Time < timeStart || timeSlice.Time > timeEnd)
                {
                    continue;
                }
                if (timeSlice.UnitDatas.ContainsKey(unitID) == false)
                {
                    continue;
                }
                double currValue = _GetValueLambda(timeSlice.UnitDatas[unitID]);
                if (timeSlice.Time == lastTimeSliceTime)
                {
                    continue;
                }

                _RetChartSectionData.Add((int)currValue);
                _RetChartSectionLabels.Add(timeSlice.Time - timeStart);
                lastTimeSliceTime = timeSlice.Time;
            }
        }