private static void FastForwardToFrame(Node node, int frameIndex) { node.SetTangerineFlag(TangerineFlags.IgnoreMarkers, true); try { CurrentFrameSetter.FastForwardToFrame(node, frameIndex); } finally { node.SetTangerineFlag(TangerineFlags.IgnoreMarkers, false); } }
public void TogglePreviewAnimation(bool animationMode, bool triggerMarkersBeforeCurrentFrame) { if (PreviewAnimation) { PreviewAnimation = false; CurrentFrameSetter.StopAnimationRecursive(PreviewAnimationContainer); if (!CoreUserPreferences.Instance.StopAnimationOnCurrentFrame) { var i = 0; foreach (var node in PreviewAnimationContainer.Descendants) { node.AnimationTime = animationMode ? 0 : savedAnimationTimes[i++]; } SetCurrentFrameToNode( PreviewAnimationBegin, Container, animationMode ); } AudioSystem.StopAll(); ForceAnimationUpdate(); } else { savedAnimationTimes = new List <double>(); foreach (var node in Container.Descendants) { savedAnimationTimes.Add(node.AnimationTime); } foreach (var node in RootNode.Descendants) { if (node is ITangerinePreviewAnimationListener t) { t.OnStart(); } } int savedAnimationFrame = Container.AnimationFrame; PreviewAnimation = true; if (triggerMarkersBeforeCurrentFrame) { SetCurrentFrameToNode(0, Container, true); } Container.IsRunning = PreviewAnimation; if (triggerMarkersBeforeCurrentFrame) { FastForwardToFrame(Container, savedAnimationFrame); } PreviewAnimationBegin = savedAnimationFrame; PreviewAnimationContainer = Container; } Application.InvalidateWindows(); }
public static void SetCurrentFrameToNode(int frameIndex, Node node, bool animationMode, bool isForced = false) { CurrentFrameSetter.SetCurrentFrameToNode(frameIndex, node, animationMode, isForced); }