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; } } } }
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); } } }