diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs new file mode 100644 index 0000000..578ae60 --- /dev/null +++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_TrackGui.cs @@ -0,0 +1,219 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Timeline; +using UnityEngine.Playables; + +namespace UnityEditor.Timeline +{ + partial class TimelineWindow + { + public TimelineTreeViewGUI treeView { get; private set; } + + void TracksGUI(Rect clientRect, WindowState state, TimelineModeGUIState trackState) + { + if (Event.current.type == EventType.Repaint && treeView != null) + { + state.spacePartitioner.Clear(); + } + + if (state.IsEditingASubTimeline() && !state.IsEditingAnEmptyTimeline()) + { + var headerRect = clientRect; + headerRect.width = state.sequencerHeaderWidth; + Graphics.DrawBackgroundRect(state, headerRect); + + var clipRect = clientRect; + clipRect.xMin = headerRect.xMax; + Graphics.DrawBackgroundRect(state, clipRect, subSequenceMode: true); + } + else + { + Graphics.DrawBackgroundRect(state, clientRect); + } + + if (!state.IsEditingAnEmptyTimeline()) + m_TimeArea.DrawMajorTicks(sequenceContentRect, state.referenceSequence.frameRate); + + GUILayout.BeginVertical(); + { + GUILayout.Space(5.0f); + GUILayout.BeginHorizontal(); + + if (this.state.editSequence.asset == null) + DrawNoSequenceGUI(state); + else + DrawTracksGUI(clientRect, trackState); + + GUILayout.EndHorizontal(); + } + GUILayout.EndVertical(); + + Graphics.DrawShadow(clientRect); + } + + void DrawNoSequenceGUI(WindowState windowState) + { + bool showCreateButton = false; + var currentlySelectedGo = UnityEditor.Selection.activeObject != null ? UnityEditor.Selection.activeObject as GameObject : null; + var textContent = DirectorStyles.noTimelineAssetSelected; + var existingDirector = currentlySelectedGo != null ? currentlySelectedGo.GetComponent<PlayableDirector>() : null; + var existingAsset = existingDirector != null ? existingDirector.playableAsset : null; + + if (currentlySelectedGo != null && !TimelineUtility.IsPrefabOrAsset(currentlySelectedGo) && existingAsset == null) + { + showCreateButton = true; + textContent = new GUIContent(String.Format(DirectorStyles.createTimelineOnSelection.text, currentlySelectedGo.name, "a Director component and a Timeline asset")); + } + GUILayout.FlexibleSpace(); + GUILayout.BeginVertical(); + GUILayout.FlexibleSpace(); + + GUILayout.Label(textContent); + + if (showCreateButton) + { + GUILayout.BeginHorizontal(); + var textSize = GUI.skin.label.CalcSize(textContent); + GUILayout.Space((textSize.x / 2.0f) - (WindowConstants.createButtonWidth / 2.0f)); + if (GUILayout.Button("Create", GUILayout.Width(WindowConstants.createButtonWidth))) + { + var message = DirectorStyles.createNewTimelineText.text + " '" + currentlySelectedGo.name + "'"; + string newSequencePath = EditorUtility.SaveFilePanelInProject(DirectorStyles.createNewTimelineText.text, currentlySelectedGo.name + "Timeline", "playable", message, ProjectWindowUtil.GetActiveFolderPath()); + if (!string.IsNullOrEmpty(newSequencePath)) + { + var newAsset = CreateInstance<TimelineAsset>(); + AssetDatabase.CreateAsset(newAsset, newSequencePath); + + Undo.IncrementCurrentGroup(); + + if (existingDirector == null) + { + existingDirector = Undo.AddComponent<PlayableDirector>(currentlySelectedGo); + } + + existingDirector.playableAsset = newAsset; + SetCurrentTimeline(existingDirector); + var newTrack = TimelineHelpers.CreateTrack<AnimationTrack>(); + + windowState.previewMode = false; + TimelineUtility.SetSceneGameObject(windowState.editSequence.director, newTrack, currentlySelectedGo); + } + + // If we reach this point, the state of the pannel has changed; skip the rest of this GUI phase + // Fixes: case 955831 - [OSX] NullReferenceException when creating a timeline on a selected object + GUIUtility.ExitGUI(); + } + GUILayout.EndHorizontal(); + } + GUILayout.FlexibleSpace(); + GUILayout.EndVertical(); + GUILayout.FlexibleSpace(); + } + + public enum OverlayDataTypes + { + None, + BackgroundColor, + BackgroundTexture, + TextBox + } + + public struct OverlayData + { + public OverlayDataTypes types { get; private set; } + public Rect rect { get; internal set; } + public string text { get; private set; } + public Texture2D texture { get; private set; } + public Color color { get; private set; } + public GUIStyle backgroundTextStyle { get; private set; } + public GUIStyle textStyle { get; private set; } + + public static OverlayData CreateColorOverlay(Rect rectangle, Color backgroundColor) + { + OverlayData data = new OverlayData(); + data.rect = rectangle; + data.color = backgroundColor; + data.types = OverlayDataTypes.BackgroundColor; + return data; + } + + public static OverlayData CreateTextureOverlay(Rect rectangle, Texture2D backTexture) + { + OverlayData data = new OverlayData(); + data.rect = rectangle; + data.texture = backTexture; + data.types = OverlayDataTypes.BackgroundTexture; + return data; + } + + public static OverlayData CreateTextBoxOverlay(Rect rectangle, string msg, GUIStyle textstyle, Color textcolor, Color bgTextColor, GUIStyle bgTextStyle) + { + OverlayData data = new OverlayData(); + data.rect = rectangle; + data.text = msg; + data.textStyle = textstyle; + data.textStyle.normal.textColor = textcolor; + data.backgroundTextStyle = bgTextStyle; + data.backgroundTextStyle.normal.textColor = bgTextColor; + data.types = OverlayDataTypes.TextBox; + return data; + } + } + + internal List<OverlayData> OverlayDrawData = new List<OverlayData>(); + + void DrawTracksGUI(Rect clientRect, TimelineModeGUIState trackState) + { + GUILayout.BeginVertical(GUILayout.Height(clientRect.height)); + if (treeView != null) + { + if (Event.current.type == EventType.Layout) + { + OverlayDrawData.Clear(); + } + + treeView.OnGUI(clientRect); + + if (Event.current.type == EventType.Repaint) + { + foreach (var overlayData in OverlayDrawData) + { + using (new GUIViewportScope(sequenceContentRect)) + DrawOverlay(overlayData); + } + } + } + GUILayout.EndVertical(); + } + + void DrawOverlay(OverlayData overlayData) + { + Rect overlayRect = GUIClip.Clip(overlayData.rect); + if (overlayData.types == OverlayDataTypes.BackgroundColor) + { + EditorGUI.DrawRect(overlayRect, overlayData.color); + } + else if (overlayData.types == OverlayDataTypes.BackgroundTexture) + { + Graphics.DrawTextureRepeated(overlayRect, overlayData.texture); + } + else if (overlayData.types == OverlayDataTypes.TextBox) + { + using (new GUIColorOverride(overlayData.backgroundTextStyle.normal.textColor)) + GUI.Box(overlayRect, GUIContent.none, overlayData.backgroundTextStyle); + Graphics.ShadowLabel(overlayRect, GUIContent.Temp(overlayData.text), overlayData.textStyle, overlayData.textStyle.normal.textColor, Color.black); + } + } + + void RefreshInlineCurves() + { + foreach (var trackGUI in allTracks.OfType<TimelineTrackGUI>()) + { + if (trackGUI.inlineCurveEditor != null) + trackGUI.inlineCurveEditor.Refresh(); + } + } + } +} |
