public PhaseDto(PhaseData phaseData, List <PhaseData> phases, ParsedLog log) { Name = phaseData.Name; Duration = phaseData.DurationInMS; Start = phaseData.Start / 1000.0; End = phaseData.End / 1000.0; foreach (Target target in phaseData.Targets) { Targets.Add(log.FightData.Logic.Targets.IndexOf(target)); } PlayerActiveTimes = new List <long>(); foreach (Player p in log.PlayerList) { PlayerActiveTimes.Add(phaseData.GetPlayerActiveDuration(p, log)); } // add phase markup MarkupLines = new List <double>(); MarkupAreas = new List <AreaLabelDto>(); for (int j = 1; j < phases.Count; j++) { PhaseData curPhase = phases[j]; if (curPhase.Start < phaseData.Start || curPhase.End > phaseData.End || (curPhase.Start == phaseData.Start && curPhase.End == phaseData.End)) { continue; } if (SubPhases == null) { SubPhases = new List <int>(); } SubPhases.Add(j); long start = curPhase.Start - phaseData.Start; long end = curPhase.End - phaseData.Start; if (curPhase.DrawStart) { MarkupLines.Add(start / 1000.0); } if (curPhase.DrawEnd) { MarkupLines.Add(end / 1000.0); } AreaLabelDto phaseArea = new AreaLabelDto { Start = start / 1000.0, End = end / 1000.0, Label = curPhase.Name, Highlight = curPhase.DrawArea }; MarkupAreas.Add(phaseArea); } if (MarkupAreas.Count == 0) { MarkupAreas = null; } if (MarkupLines.Count == 0) { MarkupLines = null; } }