/************************************************************************************************************************/ #region Context Menu /************************************************************************************************************************/ /// <inheritdoc/> protected override void PopulateContextMenu(GenericMenu menu) { menu.AddDisabledItem(new GUIContent($"{DetailsPrefix}{nameof(Target.CurrentState)}: {Target.CurrentState}")); menu.AddDisabledItem(new GUIContent($"{DetailsPrefix}{nameof(Target.CommandCount)}: {Target.CommandCount}")); menu.AddFunction("Stop", HasAnyStates((state) => state.IsPlaying || state.Weight != 0), () => Target.Stop()); AnimancerEditorUtilities.AddFadeFunction(menu, "Fade In", Target.Index > 0 && Target.Weight != 1, Target, (duration) => Target.StartFade(1, duration)); AnimancerEditorUtilities.AddFadeFunction(menu, "Fade Out", Target.Index > 0 && Target.Weight != 0, Target, (duration) => Target.StartFade(0, duration)); AnimancerEditorUtilities.AddContextMenuIK(menu, Target); menu.AddSeparator(""); menu.AddFunction("Destroy States", ActiveStates.Count > 0 || InactiveStates.Count > 0, () => Target.DestroyStates()); AnimancerPlayableDrawer.AddRootFunctions(menu, Target.Root); menu.AddSeparator(""); AnimancerPlayableDrawer.AddDisplayOptions(menu); AnimancerEditorUtilities.AddDocumentationLink(menu, "Layer Documentation", Strings.DocsURLs.Layers); menu.ShowAsContext(); }
/************************************************************************************************************************/ /// <summary>Adds functions for controlling the `playable`.</summary> public static void AddRootFunctions(GenericMenu menu, AnimancerPlayable playable) { menu.AddFunction("Add Layer", playable.Layers.Count < AnimancerPlayable.LayerList.DefaultCapacity, () => playable.Layers.Count++); menu.AddFunction("Remove Layer", playable.Layers.Count > 0, () => playable.Layers.Count--); menu.AddItem(new GUIContent("Keep Children Connected ?"), playable.KeepChildrenConnected, () => playable.KeepChildrenConnected = !playable.KeepChildrenConnected); }
/************************************************************************************************************************/ private static void AddContextFunction( GenericMenu menu, EventSequenceDrawer.Context context, string label, bool enabled, Action function) { menu.AddFunction(label, enabled, () => { using (context.SetAsCurrent()) { function(); GUI.changed = true; } }); }
/************************************************************************************************************************/ /// <summary>Adds a menu function to open the Playable Graph Visualiser if it exists in the project.</summary> public static void AddPlayableGraphVisualizerFunction(GenericMenu menu, string prefix, PlayableGraph graph) { var type = Type.GetType("GraphVisualizer.PlayableGraphVisualizerWindow, Unity.PlayableGraphVisualizer.Editor"); menu.AddFunction(prefix + "Playable Graph Visualizer", type != null, () => { var window = EditorWindow.GetWindow(type); var field = type.GetField("m_CurrentGraph", AnimancerEditorUtilities.AnyAccessBindings); if (field != null) { field.SetValue(window, graph); } }); }