private void calculateBoons() { // Player Boons foreach (Player player in log.getPlayerList()) { List <Boon> boon_to_track = new List <Boon>(); boon_to_track.AddRange(statistics.present_boons); boon_to_track.AddRange(statistics.present_offbuffs); boon_to_track.AddRange(statistics.present_defbuffs); boon_to_track.AddRange(statistics.present_personnal[player.getInstid()]); Dictionary <int, Statistics.FinalBoonUptime>[] phaseBoons = new Dictionary <int, Statistics.FinalBoonUptime> [phases.Count]; for (int phaseIndex = 0; phaseIndex < phases.Count; phaseIndex++) { Dictionary <int, Statistics.FinalBoonUptime> final = new Dictionary <int, Statistics.FinalBoonUptime>(); PhaseData phase = phases[phaseIndex]; BoonDistribution selfBoons = player.getBoonDistribution(log, phases, boon_to_track, phaseIndex); long fightDuration = phase.getEnd() - phase.getStart(); foreach (Boon boon in Boon.getAllBuffList()) { Statistics.FinalBoonUptime uptime = new Statistics.FinalBoonUptime(); uptime.uptime = 0; uptime.generation = 0; uptime.overstack = 0; if (selfBoons.ContainsKey(boon.getID())) { if (boon.getType() == Boon.BoonType.Duration) { uptime.uptime = Math.Round(100.0 * selfBoons.getUptime(boon.getID()) / fightDuration, 1); uptime.generation = Math.Round(100.0f * selfBoons.getGeneration(boon.getID(), player.getInstid()) / fightDuration, 1); uptime.overstack = Math.Round(100.0f * selfBoons.getOverstack(boon.getID(), player.getInstid()) / fightDuration, 1); } else if (boon.getType() == Boon.BoonType.Intensity) { uptime.uptime = Math.Round((double)selfBoons.getUptime(boon.getID()) / fightDuration, 1); uptime.generation = Math.Round((double)selfBoons.getGeneration(boon.getID(), player.getInstid()) / fightDuration, 1); uptime.overstack = Math.Round((double)selfBoons.getOverstack(boon.getID(), player.getInstid()) / fightDuration, 1); } uptime.boonType = boon.getType(); } final[boon.getID()] = uptime; } phaseBoons[phaseIndex] = final; } statistics.selfBoons[player] = phaseBoons; } // Group Boons foreach (Player player in log.getPlayerList()) { List <Boon> boon_to_track = new List <Boon>(); boon_to_track.AddRange(statistics.present_boons); boon_to_track.AddRange(statistics.present_offbuffs); boon_to_track.AddRange(statistics.present_defbuffs); boon_to_track.AddRange(statistics.present_personnal[player.getInstid()]); List <Player> groupPlayers = new List <Player>(); foreach (Player p in log.getPlayerList()) { if (p.getGroup() == player.getGroup()) { groupPlayers.Add(p); } } Dictionary <int, Statistics.FinalBoonUptime>[] phaseBoons = new Dictionary <int, Statistics.FinalBoonUptime> [phases.Count]; for (int phaseIndex = 0; phaseIndex < phases.Count; phaseIndex++) { phaseBoons[phaseIndex] = getBoonsForList(groupPlayers, player, boon_to_track, phaseIndex); } statistics.groupBoons[player] = phaseBoons; } // Off Group Boons foreach (Player player in log.getPlayerList()) { List <Boon> boon_to_track = new List <Boon>(); boon_to_track.AddRange(statistics.present_boons); boon_to_track.AddRange(statistics.present_offbuffs); boon_to_track.AddRange(statistics.present_defbuffs); boon_to_track.AddRange(statistics.present_personnal[player.getInstid()]); List <Player> groupPlayers = new List <Player>(); foreach (Player p in log.getPlayerList()) { if (p.getGroup() != player.getGroup()) { groupPlayers.Add(p); } } Dictionary <int, Statistics.FinalBoonUptime>[] phaseBoons = new Dictionary <int, Statistics.FinalBoonUptime> [phases.Count]; for (int phaseIndex = 0; phaseIndex < phases.Count; phaseIndex++) { phaseBoons[phaseIndex] = getBoonsForList(groupPlayers, player, boon_to_track, phaseIndex); } statistics.offGroupBoons[player] = phaseBoons; } // Squad Boons foreach (Player player in log.getPlayerList()) { List <Boon> boon_to_track = new List <Boon>(); boon_to_track.AddRange(statistics.present_boons); boon_to_track.AddRange(statistics.present_offbuffs); boon_to_track.AddRange(statistics.present_defbuffs); boon_to_track.AddRange(statistics.present_personnal[player.getInstid()]); List <Player> groupPlayers = new List <Player>(); foreach (Player p in log.getPlayerList()) { groupPlayers.Add(p); } Dictionary <int, Statistics.FinalBoonUptime>[] phaseBoons = new Dictionary <int, Statistics.FinalBoonUptime> [phases.Count]; for (int phaseIndex = 0; phaseIndex < phases.Count; phaseIndex++) { phaseBoons[phaseIndex] = getBoonsForList(groupPlayers, player, boon_to_track, phaseIndex); } statistics.squadBoons[player] = phaseBoons; } }