void ChangeOwner() { Undo.RecordObject(_timeline, "Change Timeline Owner"); _timeline.SetOwner(Selection.activeTransform); _timeline.name = Selection.activeTransform.name; if (!SequenceEditor.GetSequence().IsStopped) { _timeline.Init(); } }
void OnGUI() { #if FLUX_PROFILE Profiler.BeginSample("Flux OnGUI"); #endif if (_sequenceEditor == null) { return; } Rect currentWindowRect = position; currentWindowRect.x = 0; currentWindowRect.y = 0; if (currentWindowRect != _windowRect) { RebuildLayout(); } if (Event.current.type == EventType.Ignore) { EditorGUIUtility.hotControl = 0; } GTimelineEditor sequence = _sequenceEditor.GetSequence(); if (sequence == null) { ShowNotification(new GUIContent("Select Or Create Sequence")); } else if (Event.current.isKey) { if (Event.current.keyCode == KeyCode.Space) { if (Event.current.type == EventType.KeyUp) { if (_sequenceEditor.IsPlaying) { if (Event.current.shift) { Stop(); } else { Pause(); } } else { Play(Event.current.shift); } Repaint(); } Event.current.Use(); } if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) { EditorGUIUtility.keyboardControl = 0; Event.current.Use(); Repaint(); } } // header _windowHeader.OnGUI(); if (sequence == null) { return; } // toolbar _toolbar.OnGUI(); switch (Event.current.type) { case EventType.KeyDown: if (Event.current.keyCode == KeyCode.Backspace || Event.current.keyCode == KeyCode.Delete) { _sequenceEditor.DestroyEvents(_sequenceEditor._selectedEvents); Event.current.Use(); } else if (Event.current.keyCode == KeyCode.K && _sequenceEditor.GetSequence().GetCurrentFrame() >= 0) { _sequenceEditor.AddEvent(_sequenceEditor.GetSequence().GetCurrentFrame()); Event.current.Use(); } break; case EventType.MouseDown: break; case EventType.MouseUp: break; } if (Event.current.type == EventType.ValidateCommand) { Repaint(); } _sequenceEditor.OnGUI(); // because of a bug with windows editor, we have to not catch right button // otherwise ContextClick doesn't get called if (Event.current.type == EventType.MouseUp && Event.current.button != 1) { Event.current.Use(); } // handle drag & drop if (Event.current.type == EventType.DragUpdated) { if (_windowRect.Contains(Event.current.mousePosition)) { DragAndDrop.visualMode = DragAndDropVisualMode.Link; Event.current.Use(); } } else if (Event.current.type == EventType.DragPerform) { if (_windowRect.Contains(Event.current.mousePosition)) { foreach (UnityEngine.Object obj in DragAndDrop.objectReferences) { if (!(obj is GameObject)) { continue; } PrefabType prefabType = PrefabUtility.GetPrefabType(obj); if (prefabType == PrefabType.ModelPrefab || prefabType == PrefabType.Prefab) { continue; } Undo.IncrementCurrentGroup(); UnityEngine.Object[] objsToSave = new UnityEngine.Object[] { sequence, this }; Undo.RegisterCompleteObjectUndo(objsToSave, string.Empty); GameObject timelineGO = new GameObject(obj.name); FTimeline timeline = timelineGO.AddComponent <Flux.FTimeline>(); timeline.SetOwner(((GameObject)obj).transform); sequence.Add(timeline); Undo.RegisterCompleteObjectUndo(objsToSave, string.Empty); Undo.RegisterCreatedObjectUndo(timeline.gameObject, "create Timeline"); Undo.CollapseUndoOperations(Undo.GetCurrentGroup()); } RemoveNotification(); Event.current.Use(); DragAndDrop.AcceptDrag(); Refresh(); EditorGUIUtility.ExitGUI(); } } if (Event.current.type == EventType.Repaint) { Handles.DrawLine(new Vector3(_windowHeaderRect.xMin, _windowHeaderRect.yMax, 0), new Vector3(_windowHeaderRect.xMax - GTimelineEditor.RIGHT_BORDER, _windowHeaderRect.yMax, 0)); } #if FLUX_PROFILE Profiler.EndSample(); #endif }