public void NextClip(NextAngleEvent eventType) { if (SelectedClip != null) { if (SelectedAngle == null) { GoToNextClip(); } else { List <Angle> filteredAngles = SelectedClip.angles.Where(angle => angle.angleType.IsChecked).ToList(); Angle currentAngle = SelectedClip.angles.FirstOrDefault(a => a.clipAngleId == SelectedAngle.clipAngleId); int angleIndex = filteredAngles.IndexOf(currentAngle); if (angleIndex < filteredAngles.Count - 1) { Angle nextAngle = filteredAngles[angleIndex + 1]; SelectedAngle = nextAngle.isPreloaded ? new Angle(nextAngle.clipAngleId, nextAngle.preloadFile) : nextAngle; if (angleIndex + 2 < filteredAngles.Count) { List <Angle> angles = new List <Angle>(); angles.Add(filteredAngles[angleIndex + 2]); PreloadClips(preloadCT, angles); } else if (FilteredClips.Count > 1 && FilteredClips[(SelectedClipIndex + 1) % FilteredClips.Count].angles.Where(a => a.angleType.IsChecked).Any()) { List <Angle> angles = new List <Angle>(); angles.Add(FilteredClips[(SelectedClipIndex + 1) % FilteredClips.Count].angles.Where(a => a.angleType.IsChecked).First()); PreloadClips(preloadCT, angles); } } else { if (eventType == NextAngleEvent.mediaEnded && playbackType == PlaybackType.loop) { if (filteredAngles.Any()) { Angle nextAngle = filteredAngles[0]; SelectedAngle = nextAngle.isPreloaded ? new Angle(nextAngle.clipAngleId, nextAngle.preloadFile) : new Angle(nextAngle.clipAngleId, nextAngle.fileLocation); } else { SelectedAngle = null; } } else if (eventType == NextAngleEvent.buttonClick || playbackType == PlaybackType.next) { GoToNextClip(); } } } } }
public void NextClip(NextAngleEvent eventType) { if (SelectedClip != null) { if (SelectedAngle == null) { GoToNextClip(); } else { List<Angle> filteredAngles = SelectedClip.angles.Where(angle => angle.angleType.IsChecked).ToList(); Angle currentAngle = SelectedClip.angles.FirstOrDefault(a => a.clipAngleId == SelectedAngle.clipAngleId); int angleIndex = filteredAngles.IndexOf(currentAngle); if (angleIndex < filteredAngles.Count - 1) { Angle nextAngle = filteredAngles[angleIndex + 1]; SelectedAngle = nextAngle.isPreloaded ? new Angle(nextAngle.clipAngleId, nextAngle.preloadFile) : nextAngle; if (angleIndex + 2 < filteredAngles.Count) { List<Angle> angles = new List<Angle>(); angles.Add(filteredAngles[angleIndex + 2]); PreloadClips(preloadCT, angles); } else if (FilteredClips.Count > 1 && FilteredClips[(SelectedClipIndex + 1) % FilteredClips.Count].angles.Where(a => a.angleType.IsChecked).Any()) { List<Angle> angles = new List<Angle>(); angles.Add(FilteredClips[(SelectedClipIndex + 1) % FilteredClips.Count].angles.Where(a => a.angleType.IsChecked).First()); PreloadClips(preloadCT, angles); } } else { if (eventType == NextAngleEvent.mediaEnded && playbackType == PlaybackType.loop) { if (filteredAngles.Any()) { Angle nextAngle = filteredAngles[0]; SelectedAngle = nextAngle.isPreloaded ? new Angle(nextAngle.clipAngleId, nextAngle.preloadFile) : new Angle(nextAngle.clipAngleId, nextAngle.fileLocation); } else { SelectedAngle = null; } } else if (eventType == NextAngleEvent.buttonClick || playbackType == PlaybackType.next) { GoToNextClip(); } } } } }