Ejemplo n.º 1
0
        public void UpdateSlideStates()
        {
            bool slideChanging = false;


            if (!ProjectorServer)
            {
                TimeSpan slideElapsedTime = SpaceTimeController.MetaNow - slideStartTime;

                if ((slideElapsedTime > tour.CurrentTourStop.Duration && playing) || (slideElapsedTime.TotalSeconds > PreRollTime && PreRoll))
                {
                    NextSlide();
                    slideChanging = true;
                }

                slideElapsedTime = SpaceTimeController.MetaNow - slideStartTime;

                if (tour.CurrentTourStop != null)
                {
                    tour.CurrentTourStop.TweenPosition = Math.Min(1, (float)(slideElapsedTime.TotalMilliseconds / tour.CurrentTourStop.Duration.TotalMilliseconds));
                }
            }
            else
            {
                try
                {
                    if (tour.CurrentTourStop != null)
                    {
                        if (lastSlideIndex != LayerManager.CurrentSlideID)
                        {
                            slideChanging             = true;
                            lastSlideIndex            = LayerManager.CurrentSlideID;
                            tour.CurrentTourstopIndex = LayerManager.CurrentSlideID;
                            if (tour.CurrentTourStop.MasterSlide)
                            {
                                currentMasterSlide = null;
                            }
                            else
                            {
                                currentMasterSlide = tour.GetMasterSlideForIndex(tour.CurrentTourstopIndex);
                            }
                            LayerManager.SetVisibleLayerList(tour.CurrentTourStop.Layers);
                        }
                        tour.CurrentTourStop.TweenPosition = LayerManager.SlideTweenPosition;
                    }
                }
                catch
                {
                }
                onTarget = true;
            }


            if (tour.CurrentTourStop != null)
            {
                tour.CurrentTourStop.FaderOpacity = 0;
                Tile.fastLoad = false;
                double elapsedSeconds = tour.CurrentTourStop.TweenPosition * tour.CurrentTourStop.Duration.TotalSeconds;
                if (slideChanging)
                {
                    Earth3d.MainWindow.CrossFadeFrame = false;
                }

                switch (tour.CurrentTourStop.Transition)
                {
                case TransitionType.Slew:
                    tour.CurrentTourStop.FaderOpacity = 0;
                    Earth3d.MainWindow.CrossFadeFrame = false;
                    break;

                case TransitionType.CrossCut:
                {
                    if (slideChanging)
                    {
                        Tile.fastLoad          = true;
                        Tile.fastLoadAutoReset = false;
                    }
                    if (elapsedSeconds < (elapsedSeconds - tour.CurrentTourStop.TransitionHoldTime))
                    {
                        Earth3d.MainWindow.CrossFadeFrame = true;
                        tour.CurrentTourStop.FaderOpacity = 1;
                    }
                    else
                    {
                        tour.CurrentTourStop.FaderOpacity = 0;
                        Earth3d.MainWindow.CrossFadeFrame = false;
                    }
                }
                break;

                case TransitionType.CrossFade:
                {
                    Earth3d.MainWindow.CrossFadeFrame = true;
                    double opacity = Math.Max(0, 1 - Math.Min(1, (elapsedSeconds - tour.CurrentTourStop.TransitionHoldTime) / tour.CurrentTourStop.TransitionTime));
                    tour.CurrentTourStop.FaderOpacity = (float)opacity;
                    if (slideChanging)
                    {
                        Tile.fastLoad          = true;
                        Tile.fastLoadAutoReset = false;
                    }
                }
                break;

                case TransitionType.FadeOutIn:
                case TransitionType.FadeIn:
                {
                    Earth3d.MainWindow.CrossFadeFrame = false;
                    double opacity = Math.Max(0, 1 - Math.Min(1, (elapsedSeconds - tour.CurrentTourStop.TransitionHoldTime) / tour.CurrentTourStop.TransitionTime));
                    tour.CurrentTourStop.FaderOpacity = (float)opacity;
                }
                break;

                case TransitionType.FadeOut:
                    Earth3d.MainWindow.CrossFadeFrame = false;
                    break;

                default:
                    break;
                }

                if (!tour.CurrentTourStop.IsLinked && tour.CurrentTourstopIndex < (tour.TourStops.Count - 1))
                {
                    TransitionType nextTrans     = tour.TourStops[tour.CurrentTourstopIndex + 1].Transition;
                    double         nextTransTime = tour.TourStops[tour.CurrentTourstopIndex + 1].TransitionOutTime;


                    switch (nextTrans)
                    {
                    case TransitionType.FadeOut:
                    case TransitionType.FadeOutIn:
                    {
                        if (tour.CurrentTourStop.FaderOpacity == 0)
                        {
                            Earth3d.MainWindow.CrossFadeFrame = false;
                            double opacity = Math.Max(0, 1 - Math.Min(1, (tour.CurrentTourStop.Duration.TotalSeconds - elapsedSeconds) / nextTransTime));
                            tour.CurrentTourStop.FaderOpacity = (float)opacity;
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void Render(Earth3d window)
        {
            window.SetupMatricesOverlays();
            window.RenderContext11.DepthStencilMode = DepthStencilMode.Off;


            if (tour == null || tour.CurrentTourStop == null)
            {
                return;
            }

            if (ProjectorServer)
            {
                overlayBlend.State = true;
            }

            if (!onTarget && !ProjectorServer)
            {
                slideStartTime = SpaceTimeController.MetaNow;
                if (Earth3d.MainWindow.OnTarget(Tour.CurrentTourStop.Target))
                {
                    onTarget                 = true;
                    overlayBlend.State       = !Tour.CurrentTourStop.FadeInOverlays;
                    overlayBlend.TargetState = true;

                    if (!PreRoll)
                    {
                        if (tour.CurrentTourStop.MusicTrack != null)
                        {
                            tour.CurrentTourStop.MusicTrack.Play();
                        }

                        if (tour.CurrentTourStop.VoiceTrack != null)
                        {
                            tour.CurrentTourStop.VoiceTrack.Play();
                        }

                        foreach (Overlay overlay in tour.CurrentTourStop.Overlays)
                        {
                            overlay.Play();
                        }
                    }

                    LayerManager.SetVisibleLayerList(tour.CurrentTourStop.Layers);


                    if (tour.CurrentTourStop.KeyFramed)
                    {
                        tour.CurrentTourStop.KeyFrameMover.CurrentDateTime = tour.CurrentTourStop.StartTime;
                        tour.CurrentTourStop.KeyFrameMover.CurrentPosition = tour.CurrentTourStop.Target.CamParams;
                        tour.CurrentTourStop.KeyFrameMover.MoveTime        = (double)(tour.CurrentTourStop.Duration.TotalMilliseconds / 1000.0);
                        Earth3d.MainWindow.Mover = tour.CurrentTourStop.KeyFrameMover;
                    }
                    else if (tour.CurrentTourStop.EndTarget != null && tour.CurrentTourStop.EndTarget.ZoomLevel != -1)
                    {
                        if (tour.CurrentTourStop.Target.Type == ImageSetType.SolarSystem)
                        {
                            tour.CurrentTourStop.Target.UpdatePlanetLocation(SpaceTimeController.UtcToJulian(tour.CurrentTourStop.StartTime));
                            tour.CurrentTourStop.EndTarget.UpdatePlanetLocation(SpaceTimeController.UtcToJulian(tour.CurrentTourStop.EndTime));
                        }


                        Earth3d.MainWindow.Mover = new ViewMoverKenBurnsStyle(tour.CurrentTourStop.Target.CamParams, tour.CurrentTourStop.EndTarget.CamParams, tour.CurrentTourStop.Duration.TotalMilliseconds / 1000.0, tour.CurrentTourStop.StartTime, tour.CurrentTourStop.EndTime, tour.CurrentTourStop.InterpolationType);
                    }

                    Settings.TourSettings           = tour.CurrentTourStop;
                    SpaceTimeController.Now         = tour.CurrentTourStop.StartTime;
                    SpaceTimeController.SyncToClock = false;
                }
            }

            if (currentMasterSlide != null)
            {
                foreach (Overlay overlay in currentMasterSlide.Overlays)
                {
                    overlay.TweenFactor = 1f;

                    overlay.Draw3D(window.RenderContext11, 1.0f, false);
                }
            }



            if (onTarget || ProjectorServer)
            {
                foreach (Overlay overlay in tour.CurrentTourStop.Overlays)
                {
                    if (!Tour.CurrentTourStop.KeyFramed || (overlay.Animate && overlay.AnimationTarget == null))
                    {
                        overlay.TweenFactor = (float)CameraParameters.EaseCurve(tour.CurrentTourStop.TweenPosition, overlay.InterpolationType == InterpolationType.Default ? tour.CurrentTourStop.InterpolationType : overlay.InterpolationType);
                    }
                    overlay.Draw3D(window.RenderContext11, overlayBlend.Opacity, false);
                }
            }
        }