/// <inheritdoc /> protected override void OnContextChanged() { base.OnContextChanged(); VisjectCM menu = null; // Override surface primary context menu for state machine editing if (Context?.Context is Animation.StateMachine) { if (_cmStateMachineMenu == null) { _cmStateMachineMenu = new VisjectCM(StateMachineGroupArchetypes, (arch) => true); _cmStateMachineMenu.ShowExpanded = true; } menu = _cmStateMachineMenu; } // Override surface primary context menu for state machine transition editing if (Context?.Context is Animation.StateMachineTransition) { if (_cmStateMachineTransitionMenu == null) { _cmStateMachineTransitionMenu = new VisjectCM(NodeFactory.DefaultGroups, CanSpawnNodeType, null, GetCustomNodes()); _cmStateMachineTransitionMenu.AddGroup(StateMachineTransitionGroupArchetype); } menu = _cmStateMachineTransitionMenu; } SetPrimaryMenu(menu); }
public static void Get(VisjectCM contextMenu) { Wait(); lock (_locker) { if (_cache == null) { _cache = new Dictionary <KeyValuePair <string, ushort>, GroupArchetype>(); } contextMenu.LockChildrenRecursive(); // Check if has cached groups if (_cache.Count != 0) { // Check if context menu doesn't have the recent cached groups if (!contextMenu.Groups.Any(g => g.Archetype.Tag is int asInt && asInt == _version)) { var groups = contextMenu.Groups.Where(g => g.Archetype.Tag is int).ToArray(); foreach (var g in groups) { contextMenu.RemoveGroup(g); } foreach (var g in _cache.Values) { contextMenu.AddGroup(g); } } } else { // Remove any old groups from context menu var groups = contextMenu.Groups.Where(g => g.Archetype.Tag is int).ToArray(); foreach (var g in groups) { contextMenu.RemoveGroup(g); } // Register for scripting types reload Editor.Instance.CodeEditing.TypesCleared += OnCodeEditingTypesCleared; // Run caching on an async _task = Task.Run(OnActiveContextMenuShowAsync); _taskContextMenu = contextMenu; } contextMenu.UnlockChildrenRecursive(); } }
/// <inheritdoc /> protected override void OnContextChanged() { base.OnContextChanged(); VisjectCM menu = null; // Override surface primary context menu for state machine editing if (Context?.Context is Animation.StateMachine) { if (_cmStateMachineMenu == null) { _cmStateMachineMenu = new VisjectCM(new VisjectCM.InitInfo { Groups = StateMachineGroupArchetypes, CanSpawnNode = arch => true, }); _cmStateMachineMenu.ShowExpanded = true; } menu = _cmStateMachineMenu; } // Override surface primary context menu for state machine transition editing if (Context?.Context is Animation.StateMachineTransition) { if (_cmStateMachineTransitionMenu == null) { _cmStateMachineTransitionMenu = new VisjectCM(new VisjectCM.InitInfo { Groups = NodeFactory.DefaultGroups, CanSpawnNode = CanUseNodeType, ParametersGetter = null, CustomNodesGroup = GetCustomNodes(), }); _cmStateMachineTransitionMenu.AddGroup(StateMachineTransitionGroupArchetype); } menu = _cmStateMachineTransitionMenu; } SetPrimaryMenu(menu); }