Exemple #1
0
        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();
                        }
                    }
                }
            }
        }