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