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