private void UndoRedoCallback() { if (ObserverTimeline) { ObserverTimeline.OnEditorUndo(); } }
private void SetCamera(USObserverKeyframe keyframe, float time, Shared.TypeOfTransition transitionType, float transitionDuration, Camera camera) { if (AnimationHelper.IsInAnimationMode) { ObserverTimeline.StopTimeline(); ObserverTimeline.StartTimeline(); } if (keyframe != null) { USUndoManager.PropertyChange(keyframe, "Set Camera"); keyframe.KeyframeCamera = camera; } else { USUndoManager.RegisterCompleteObjectUndo(this, "Set Camera"); var newKeyframe = CreateInstance <USObserverKeyframe>(); newKeyframe.FireTime = time; newKeyframe.KeyframeCamera = camera; newKeyframe.TransitionType = transitionType; newKeyframe.TransitionDuration = transitionDuration; USUndoManager.RegisterCreatedObjectUndo(newKeyframe, "Set Camera"); USUndoManager.RegisterCompleteObjectUndo(ObserverTimeline, "Set Camera"); ObserverTimeline.AddKeyframe(newKeyframe); var cachedData = CreateInstance <ObserverRenderData>(); cachedData.Keyframe = newKeyframe; cachedObserverRenderData.Add(cachedData); } ObserverTimeline.Process(ObserverTimeline.Sequence.RunningTime, ObserverTimeline.Sequence.PlaybackRate); }
public void ProcessDraggingObjects(Vector2 mouseDelta, bool snap, float snapValue) { if (!ObserverTimeline) { return; } USUndoManager.PropertyChange(this, "Drag Selection"); foreach (var selectedObject in SelectedObjects) { var keyframe = selectedObject as USObserverKeyframe; USUndoManager.PropertyChange(keyframe, "Drag Selection"); Vector3 newPosition = SourcePositions[keyframe] + mouseDelta; newPosition.x = newPosition.x + XScroll - DisplayArea.x; if (snap) { newPosition.x = Mathf.Round(newPosition.x / snapValue) * snapValue; } var newTime = ((newPosition.x / DisplayArea.width) * Duration) / XScale; newTime = Mathf.Clamp(newTime, 0.0f, Duration); keyframe.FireTime = newTime; } if (AnimationHelper.IsInAnimationMode) { ObserverTimeline.Process(ObserverTimeline.Sequence.RunningTime, ObserverTimeline.Sequence.PlaybackRate); } }
private void RemoveKeyframe(USObserverKeyframe keyframe) { USUndoManager.RegisterCompleteObjectUndo(this, "Remove Keyframe"); var data = cachedObserverRenderData.Where(element => element.Keyframe == keyframe).First(); cachedObserverRenderData.Remove(data); USUndoManager.PropertyChange(ObserverTimeline, "Remove Keyframe"); ObserverTimeline.RemoveKeyframe(keyframe); ObserverTimeline.Process(ObserverTimeline.Sequence.RunningTime, ObserverTimeline.Sequence.PlaybackRate); USUndoManager.DestroyImmediate(data); USUndoManager.DestroyImmediate(keyframe); }
private void HandleEvent() { var isContext = Event.current.type == EventType.MouseDown && Event.current.button == 1; if (!isContext) { return; } var contextMenu = new GenericMenu(); var newTime = (((Event.current.mousePosition.x + XScroll - DisplayArea.x) / DisplayArea.width) * Duration) / XScale; USObserverKeyframe overKeyframe = null; foreach (var data in cachedObserverRenderData) { if (data.RenderRect.Contains(Event.current.mousePosition)) { contextMenu.AddItem(new GUIContent("Remove Observer Keyframe"), false, () => { RemoveKeyframe(data.Keyframe); }); contextMenu.AddSeparator(""); overKeyframe = data.Keyframe; break; } } var cameras = Resources.FindObjectsOfTypeAll(typeof(Camera)) as Camera[]; cameras = cameras.OrderBy(camera => camera.name).ToArray(); foreach (var camera in cameras) { if (!ObserverTimeline.IsValidCamera(camera)) { continue; } var assetPath = AssetDatabase.GetAssetPath(camera.gameObject.transform.root.gameObject); if (!string.IsNullOrEmpty(assetPath)) { continue; } var cutTransition = Shared.TypeOfTransition.Cut; var cutDuration = Shared.TransitionHelper.DefaultTransitionTimeFor(cutTransition); contextMenu.AddItem(new GUIContent(String.Format("Set Camera/Cut/{0}", camera.name)), false, (settingCamera) => SetCamera(overKeyframe, newTime, cutTransition, cutDuration, (Camera)settingCamera), camera); var transitions = Enum.GetValues(typeof(Shared.TypeOfTransition)).Cast <Shared.TypeOfTransition>(); foreach (var transition in transitions) { if (transition == Shared.TypeOfTransition.Cut) { continue; } var transitionType = transition; // Keep a local copy of this, so it's safed for our delegate. var transitionDuration = Shared.TransitionHelper.DefaultTransitionTimeFor(transitionType); contextMenu.AddItem(new GUIContent(String.Format("Set Camera/Transition/{0}/{1}", camera.name, transitionType)), false, (settingCamera) => SetCamera(overKeyframe, newTime, transitionType, transitionDuration, (Camera)settingCamera), camera); } } if (DisplayArea.Contains(Event.current.mousePosition)) { Event.current.Use(); contextMenu.ShowAsContext(); } }
public void OnGUI() { if (ObserverTimeline != null && ObserverTimeline.Sequence != null && ObserverTimeline.Sequence.HasSequenceBeenStarted) { Shared.TransitionHelper.ForceGameViewRepaint(); } GUILayout.Box("", TimelineBackground, GUILayout.MaxHeight(17.0f), GUILayout.ExpandWidth(true)); if (Event.current.type == EventType.Repaint) { DisplayArea = GUILayoutUtility.GetLastRect(); } var helperRect = DisplayArea; helperRect.y -= 17.0f; var validCamerasMessage = string.Empty; if (ObserverTimeline.Sequence.RunningTime > 0.0f && Camera.allCameras.Count(camera => ObserverTimeline.IsValidCamera(camera)) > 1) { validCamerasMessage = " - You have more than one active camera in your scene, is this intentional?."; } GUI.Label(helperRect, string.Format("Current Keyframe : {0} {1}", ObserverTimeline.CurrentlyActiveKeyframe != null ? ObserverTimeline.CurrentlyActiveKeyframe.KeyframeCamera.name : "null", validCamerasMessage)); var sortedKeyframes = cachedObserverRenderData.OrderBy(element => element.Keyframe.FireTime).ToList(); for (var index = 0; index < sortedKeyframes.Count(); index++) { var data = sortedKeyframes[index]; var xPos = DisplayArea.width * (data.Keyframe.FireTime / Duration); var xMaxPos = DisplayArea.width * (data.Keyframe.TransitionDuration / Duration); xMaxPos = Mathf.Clamp(xMaxPos, 4.0f, float.MaxValue); data.RenderPosition = new Vector2(DisplayArea.x + ((xPos * XScale) - XScroll), DisplayArea.y); data.RenderRect = new Rect((DisplayArea.x + ((xPos * XScale) - XScroll)) - 3.0f, DisplayArea.y, xMaxPos, DisplayArea.height - 1.0f); using (new Shared.GUIChangeColor(SelectedObjects.Contains(data.Keyframe) ? Color.yellow : GUI.color)) { GUI.Box(data.RenderRect, ""); var labelRect = data.RenderRect; labelRect.x += 4.0f; labelRect.width = 1000.0f; GUI.Label(labelRect, data.Keyframe.KeyframeCamera ? data.Keyframe.KeyframeCamera.name : "Null"); } } HandleEvent(); }