コード例 #1
0
        public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
        {
            var mousePosition = _window.rootVisualElement.ChangeCoordinatesTo(_window.rootVisualElement.parent,
                                                                              context.screenMousePosition - _window.position.position);
            var graphMousePosition = _graphView.contentViewContainer.WorldToLocal(mousePosition);

            switch (SearchTreeEntry.userData)
            {
            case Group group:
                var rect = new Rect(graphMousePosition, EasyGraphView.CommentGroupSize);
                _graphView.CreateCommentGroup(rect);
                return(true);

            case TriggerNode triggerNode:
                _graphView.CreateAndAddNode <TriggerNode>(graphMousePosition);
                return(true);

            case ConditionNode conditionNode:
                _graphView.CreateAndAddNode <ConditionNode>(graphMousePosition);
                return(true);

            case ActionNode actionNode:
                _graphView.CreateAndAddNode <ActionNode>(graphMousePosition);
                return(true);
            }
            return(false);
        }
コード例 #2
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            TargetParameter.BehaviorActionValue = (BehaviorAction)entry.userData;
            TargetParameter = null;

            return(true);
        }
コード例 #3
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            var nodeEntry = (NodeEntry)entry.userData;
            var node      = nodeEntry.node;

            var drawState = node.drawState;


            var windowRoot          = m_EditorWindow.rootVisualElement;
            var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - m_EditorWindow.position.position);
            var graphMousePosition  = m_GraphView.contentViewContainer.WorldToLocal(windowMousePosition);

            drawState.position = new Rect(graphMousePosition, Vector2.zero);
            node.drawState     = drawState;

            m_Graph.owner.RegisterCompleteObjectUndo("Add " + node.name);
            m_Graph.AddNode(node);

            if (connectedPort != null)
            {
                var connectedSlot           = connectedPort.slot;
                var connectedSlotReference  = connectedSlot.owner.GetSlotReference(connectedSlot.id);
                var compatibleSlotReference = node.GetSlotReference(nodeEntry.compatibleSlotId);

                var fromReference = connectedSlot.isOutputSlot ? connectedSlotReference : compatibleSlotReference;
                var toReference   = connectedSlot.isOutputSlot ? compatibleSlotReference : connectedSlotReference;
                m_Graph.Connect(fromReference, toReference);

                nodeNeedsRepositioning = true;
                targetSlotReference    = compatibleSlotReference;
                targetPosition         = graphMousePosition;
            }

            return(true);
        }
コード例 #4
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            var rootElement   = graphView.editorWindow.rootVisualElement;
            var worldPosition = rootElement.ChangeCoordinatesTo(rootElement.parent, context.screenMousePosition - graphView.editorWindow.position.position);

            var node = graphView.CreateNewNode((NodeEntry)entry.userData, graphView.contentViewContainer.WorldToLocal(worldPosition));

            if (ConnectedPort != null)
            {
                Port other = ConnectedPort.direction == Direction.Input ? node.ChildrenPort : node.ParentPort;
                if (other != null)
                {
                    //Disconnect old ports if necessary
                    if (other.capacity == Port.Capacity.Single && other.connected)
                    {
                        graphView.DeleteElements(other.connections);
                    }
                    if (ConnectedPort.capacity == Port.Capacity.Single && ConnectedPort.connected)
                    {
                        graphView.DeleteElements(ConnectedPort.connections);
                    }

                    graphView.AddElement(ConnectedPort.ConnectTo(other));                     //Connect
                    ((TreeGraphNode)(ConnectedPort.direction == Direction.Input ? ConnectedPort : other).node).RecalculateOrder();
                }

                ConnectedPort = null;
            }

            return(true);
        }
コード例 #5
0
        public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
        {
            var windowRoot          = graphView.GraphWindow.rootVisualElement;
            var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - graphView.GraphWindow.position.position);
            var graphMousePosition  = graphView.contentViewContainer.WorldToLocal(windowMousePosition);

            BaseNode createNode = graphView.Model.NewNode(searchTreeEntry.userData as Type, graphMousePosition);

            //自动连接
            if (ConnectionFilter != null)
            {
                graphView.CommandDispacter.Do(new AddNodeCommand(graphView.Model, createNode));
                Port         port      = ConnectionFilter.input == null ? ConnectionFilter.output : ConnectionFilter.input;
                BasePortView portView1 = port as BasePortView;

                string portName = nodePortNameMap[searchTreeEntry.userData as Type];
                if (checkInPort)
                {
                    graphView.CommandDispacter.Do(new ConnectCommand(graphView.Model, createNode, portName, waitConnectNode, waitConnectPortName));
                }
                else
                {
                    graphView.CommandDispacter.Do(new ConnectCommand(graphView.Model, waitConnectNode, waitConnectPortName, createNode, portName));
                }
            }
            else
            {
                graphView.CommandDispacter.Do(new AddNodeCommand(graphView.Model, createNode));
            }
            graphView.GraphWindow.Focus();
            return(true);
        }
コード例 #6
0
    public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
    {
        var worldMousePosition = _window.rootVisualElement.ChangeCoordinatesTo(_window.rootVisualElement.parent,
                                                                               context.screenMousePosition - _window.position.position);
        var localMousePosition = _graphView.contentViewContainer.WorldToLocal(worldMousePosition);

        switch (searchTreeEntry.userData)
        {
        case Group group:
            var rect = new Rect(localMousePosition, _graphView.DefaultCommentBlockSize);
            _graphView.CreateCommentBlock(rect);
            return(true);

        case OperatorInfo info:
            _graphView.AddElement(NodeFactory.CreateNode(new FrpNodeData
            {
                CodeText     = "Write code here",
                OperatorInfo = info,
                Position     = localMousePosition,
                Guid         = Guid.NewGuid().ToString()
            }));
            return(true);
        }

        return(false);
    }
        internal void AddToTree(List <SearchTreeEntry> tree)
        {
            SearchTreeEntry entry;

            // Add subgroups
            foreach (var group in Subgroups)
            {
                GUIContent content = new GUIContent(" " + group.Key, folderIcon);
                entry = new SearchTreeGroupEntry(content)
                {
                    level = Depth
                };

                tree.Add(entry);
                group.Value.AddToTree(tree);
            }

            // Add nodes
            foreach (var result in Results)
            {
                GUIContent content = new GUIContent("      " + result.Name);
                entry = new SearchTreeEntry(content)
                {
                    level    = Depth,
                    userData = result
                };

                tree.Add(entry);
            }
        }
コード例 #8
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            var nodeEntry  = (NodeEntry)entry.userData;
            var nodeEditor = nodeEntry.NodeEditor;

            var windowMousePosition = _editorWindow.GetRootVisualContainer().ChangeCoordinatesTo(_editorWindow.GetRootVisualContainer().parent, context.screenMousePosition - _editorWindow.position.position);
            var graphMousePosition  = _graphView.contentViewContainer.WorldToLocal(windowMousePosition);

            nodeEditor.Position = new Vector3(graphMousePosition.x, graphMousePosition.y, 0);

            _logicGraphEditorView.AddNode(nodeEditor);

//            if (connectedPort != null)
//            {
//                var connectedSlot = connectedPort.slot;
//                var connectedSlotReference = connectedSlot.owner.GetSlotReference(connectedSlot.id);
//                var compatibleSlotReference = node.GetSlotReference(nodeEntry.compatibleSlotId);
//
//                var fromReference = connectedSlot.isOutputSlot ? connectedSlotReference : compatibleSlotReference;
//                var toReference = connectedSlot.isOutputSlot ? compatibleSlotReference : connectedSlotReference;
//                m_Graph.Connect(fromReference, toReference);
//
//                nodeNeedsRepositioning = true;
//                targetSlotReference = compatibleSlotReference;
//                targetPosition = graphMousePosition;
//            }

            return(true);
        }
コード例 #9
0
        // Spawning right node based on selection
        private bool CheckForNodeType(SearchTreeEntry searchTreeEntry, Vector2 pos)
        {
            switch (searchTreeEntry.userData)
            {
            case StartNode startNode:
                graphView.AddElement(graphView.CreateStartNode(pos));
                return(true);

            case DialogueNode dialogueNode:
                graphView.AddElement(graphView.CreateDialogueNode(pos));
                return(true);

            case EventNode eventNode:
                graphView.AddElement(graphView.CreateEventNode(pos));
                return(true);

            case ItemCheckNode eventNode:
                graphView.AddElement(graphView.CreateItemCheckNode(pos));
                return(true);

            case StatCheckNode statCheckNode:
                graphView.AddElement(graphView.CreateStatCheckNode(pos));
                return(true);

            case EndNode endNode:
                graphView.AddElement(graphView.CreateEndNode(pos));
                return(true);

            default:
                throw new IndexOutOfRangeException();
            }
        }
コード例 #10
0
        override public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            // should check for adding duplicate event nodes here, look at Legacy.UdonGraph.TryCreateNodeInstance
            // Assuming that if we've made it to this point we're allowed to add the node

            UdonNode node;

            // checking type so we can support selecting registries as well
            if (entry.userData is UdonNodeDefinition && !_graphView.IsDuplicateEventNode((entry.userData as UdonNodeDefinition).fullName))
            {
                node = UdonNode.CreateNode(entry.userData as UdonNodeDefinition, _graphView);
                _graphView.AddElement(node);

                node.SetPosition(new Rect(GetGraphPositionFromContext(context), Vector2.zero));
                node.Select(_graphView, false);

                // Do we need to do this to reserialize, etc?
                _graphView.ReSerializeData();

                return(true);
            }
            else
            {
                return(false);
            }
        }
        bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
        {
            var type = searchTreeEntry.userData as System.Type;

            this.node.SetBehavior(type);
            return(true);
        }
コード例 #12
0
 public override bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
 {
     if (entry.userData is UdonNodeDefinition definition && !_graphView.IsDuplicateEventNode(definition.fullName))
     {
         _graphView.AddNodeFromSearch(definition, GetGraphPositionFromContext(context));
         return(true);
     }
コード例 #13
0
        public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
        {
            var type = (Type)searchTreeEntry.userData;

            _onSelect?.Invoke(type);
            return(true);
        }
コード例 #14
0
    private bool CheckForNodeType(SearchTreeEntry _searchTreeEntry, Vector2 _pos)
    {
        switch (_searchTreeEntry.userData)
        {
        case StartNode node:
            graphView.AddElement(graphView.CreateStartNode(_pos));
            return(true);

        case DialogueNode node:
            graphView.AddElement(graphView.CreateDialogueNode(_pos));
            return(true);

        case EventNode node:
            graphView.AddElement(graphView.CreateEventNode(_pos));
            return(true);

        case EndNode node:
            graphView.AddElement(graphView.CreateEndNode(_pos));
            return(true);

        case ScriptNode node:
            graphView.AddElement(graphView.CreateScriptNode(_pos));
            return(true);

        default:
            break;
        }
        return(false);
    }
コード例 #15
0
        protected virtual void AddTreeEntry(List <SearchTreeEntry> entries, BetterSearchTree <T> tree, int level)
        {
            // Add Leaf element
            if (tree.IsLeaf)
            {
                var entry = new SearchTreeEntry(tree.label)
                {
                    level    = level,
                    userData = tree.payload
                };
                entries.Add(entry);
            }
            // Add Group
            else
            {
                var group = new SearchTreeGroupEntry(new GUIContent(tree.label.text), level);
                entries.Add(group);

                // Add children
                foreach (var child in tree.children)
                {
                    AddTreeEntry(entries, child, level + 1);
                }
            }
        }
コード例 #16
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            if (!(entry is SearchTreeGroupEntry))
            {
                Type createType = entry.userData as Type;
                Node node       = CreateNodeFromType(createType, null);
                if (node == null)
                {
                    return(false);
                }

                node.userData = createType;
                m_GraphView.AddElement(node);

                Vector2 pointInWindow = context.screenMousePosition - position.position;
                Vector2 pointInGraph  = node.parent.WorldToLocal(pointInWindow);
                node.SetPosition(new Rect(pointInGraph, Vector2.zero));
                node.Select(m_GraphView, false);

                SaveGraphData();

                return(true);
            }

            return(false);
        }
コード例 #17
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            if (entry is SearchTreeGroupEntry)
            {
                return(false);
            }

            var actorConfig = (ActorConfig)entry.userData;
            var actorSetup  = ActorSystemSetupAnalyzer.CreateActorSetup(actorConfig);

            m_Asset.ActorSetups.Add(actorSetup);

            foreach (var inputConfig in actorConfig.InputConfigs)
            {
                var isValid = MultiplicityValidator.IsValid(m_Asset.ComponentConfigs.First(x => x.Id == inputConfig.ComponentConfigId).InputMultiplicity, 0);
                actorSetup.Inputs.Add(new ActorPort(Guid.NewGuid().ToString(), inputConfig.Id, new List <ActorLink>(), isValid, false));
            }

            foreach (var outputConfig in actorConfig.OutputConfigs)
            {
                var isValid = MultiplicityValidator.IsValid(m_Asset.ComponentConfigs.First(x => x.Id == outputConfig.ComponentConfigId).OutputMultiplicity, 0);
                actorSetup.Outputs.Add(new ActorPort(Guid.NewGuid().ToString(), outputConfig.Id, new List <ActorLink>(), isValid, false));
            }

            var node = CreateNode(actorSetup);

            var pointInWindow = context.screenMousePosition - position.position;
            var pointInGraph  = node.parent.WorldToLocal(pointInWindow);

            node.SetPosition(new Rect(pointInGraph, Vector2.zero));
            actorSetup.Position = pointInGraph;

            return(true);
        }
コード例 #18
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            var nodeEntry  = (NodeEntry)entry.userData;
            var nodeEditor = nodeEntry.LogicNodeEditor;

            var windowMousePosition = _editorWindow.rootVisualElement.ChangeCoordinatesTo(_editorWindow.rootVisualElement.parent, context.screenMousePosition - _editorWindow.position.position);
            var graphMousePosition  = _graphView.contentViewContainer.WorldToLocal(windowMousePosition);

            nodeEditor.Position = new Vector3(graphMousePosition.x, graphMousePosition.y, 0);

            _logicGraphEditorView.AddNode(nodeEditor);

            if (ConnectedLogicPort != null)
            {
                var connectedSlotReference  = ConnectedLogicPort.Slot;
                var compatibleSlotReference = nodeEditor.FindOutputSlot <LogicSlot>(nodeEntry.compatibleSlotId);

                var fromReference = ConnectedLogicPort.Slot.isOutputSlot ? connectedSlotReference : compatibleSlotReference;
                var toReference   = ConnectedLogicPort.Slot.isOutputSlot ? compatibleSlotReference : connectedSlotReference;

                _logicGraphEditorView.RemoveEdgesConnectedTo(ConnectedLogicPort);

                _logicGraphEditorView.AddEdge(fromReference, toReference);
            }

            return(true);
        }
コード例 #19
0
    public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
    {
        if (_graphView == null || _editorWindow == null)
        {
            return(false);
        }

        //Get Relative world position of search window in regards to the Editor Window visual element
        Vector2 worldMousePosition = _editorWindow.rootVisualElement.ChangeCoordinatesTo(
            _editorWindow.rootVisualElement.parent, context.screenMousePosition - _editorWindow.position.position);

        // Transform to local coordinates based on GraphView
        Vector2 localMousePosition = _graphView.contentViewContainer.WorldToLocal(worldMousePosition);


        switch (searchTreeEntry.userData)
        {
        case DialogueNode node:
        {
            Debug.Log("Created");
            _graphView.CreateNode("Dialogue Node", localMousePosition);
            return(true);
        }

        default:
        {
            return(false);
        }
        }
    }
コード例 #20
0
        // Node creation when validate a choice
        public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
        {
            // window to graph position
            var windowRoot          = window.rootVisualElement;
            var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - window.position.position);
            var graphMousePosition  = graphView.contentViewContainer.WorldToLocal(windowMousePosition);

            var nodeType = searchTreeEntry.userData is Type ? (Type)searchTreeEntry.userData : ((NodeProvider.PortDescription)searchTreeEntry.userData).nodeType;

            graphView.RegisterCompleteObjectUndo("Added " + nodeType);
            var view = graphView.AddNode(BaseNode.CreateFromType(nodeType, graphMousePosition));

            if (searchTreeEntry.userData is NodeProvider.PortDescription desc)
            {
                var targetPort = view.GetPortViewFromFieldName(desc.portFieldName, desc.portIdentifier);
                if (inputPortView == null)
                {
                    graphView.Connect(targetPort, outputPortView);
                }
                else
                {
                    graphView.Connect(inputPortView, targetPort);
                }
            }

            return(true);
        }
コード例 #21
0
        public List <SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
        {
            _results.Clear();

            _results.Add(new SearchTreeGroupEntry(new GUIContent("Create Node")));

            foreach (var nodeType in _graphType.AvailableNodes)
            {
                // we need to create a node to know what ports it have
                SNode newNode = nodeType.CreateSNode();

                // if we have _fromPort, check that we can connect it to any of the input ports in the newNode
                if (_fromPort == null ||
                    newNode.InputPorts().Any(p => _graphType.FindConnectionType(_fromPort.Type, p.Type) != null))
                {
                    var content     = new GUIContent(ObjectNames.NicifyVariableName(nodeType.Name));
                    var searchEntry = new SearchTreeEntry(content)
                    {
                        level    = 1,
                        userData = newNode
                    };

                    _results.Add(searchEntry);
                }
            }

            return(_results);
        }
コード例 #22
0
        public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
        {
            Node node = null;

            switch (SearchTreeEntry.name)
            {
            case "Clip":
                node = new ClipNodeUI();

                break;

            case "Layer Mixer":
                node = new LayerMixerNodeUI();

                break;

            case "Mixer":
                node = new MixerNodeUI();

                break;

            case "1D Blendspace":
                node = new Blendspace1DNodeUI();

                break;

            case "2D Blendspace":
                node = new Blendspace2DNodeUI();

                break;

            case "State Machine":
                node = new StateMachineNodeUI();

                break;

            case "Wildcard":
                node = new WildcardNodeUI();

                break;

            case "Output":
                node = new OutputNodeUI();
                GraphView.OutputIndicatorNode = (OutputNodeUI)node;
                break;

            default:
                break;
            }

            if (node is BaseNodeUI baseNode)
            {
                baseNode.ID = Guid.NewGuid().ToString();
            }

            GraphView.AddNode(node, context.screenMousePosition);

            return(true);
        }
コード例 #23
0
 public override bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
 {
     // checking type so we can support selecting registries as well
     if (entry.userData is UdonNodeDefinition definition && !_graphView.IsDuplicateEventNode(definition.fullName))
     {
         _graphView.AddNodeFromSearch(definition, GetGraphPositionFromContext(context));
         return(true);
     }
コード例 #24
0
    //作成ノードを追加する
    public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
    {
        var type = SearchTreeEntry.userData as System.Type;
        var node = Activator.CreateInstance(type) as GraphNodeExample;

        graphView.AddElement(node);
        return(true);
    }
コード例 #25
0
    bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
    {
        var type = searchTreeEntry.userData as System.Type;
        var node = Activator.CreateInstance(type) as SampleNode;

        graphView.AddElement(node);
        return(true);
    }
コード例 #26
0
        public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
        {
            var mousePosition = window.rootVisualElement.ChangeCoordinatesTo(window.rootVisualElement.parent, context.screenMousePosition - window.position.position);

            onSelectEntry?.Invoke(searchTreeEntry.userData, mousePosition);

            return(true);
        }
コード例 #27
0
    public bool OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context)
    {
        //Editor window-based mouse position
        var mousePosition = window.rootVisualElement.ChangeCoordinatesTo(window.rootVisualElement.parent,
                                                                         context.screenMousePosition - window.position.position);

        return(graphView.OnSelectEntry(searchTreeEntry, mousePosition));
    }
コード例 #28
0
        public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
        {
            // var so = ScriptableObject.CreateInstance(SearchTreeEntry)
            var type = (Type)SearchTreeEntry.userData;

            _graphView.CreatedHandler(type, context.screenMousePosition);
            return(true);
        }
コード例 #29
0
        public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
        {
            var windowRoot          = _window.rootVisualElement;
            var windowMousePosition = windowRoot.ChangeCoordinatesTo(windowRoot.parent, context.screenMousePosition - _window.position.position);
            var position            = _graphView.contentViewContainer.WorldToLocal(windowMousePosition);

            _graphView.CreateNode(entry.userData as Type, position);
            return(true);
        }
コード例 #30
0
 override public bool OnSelectEntry(SearchTreeEntry entry, SearchWindowContext context)
 {
     if (_graphView == null)
     {
         return(false);
     }
     _graphView.AddNewVariable((string)entry.userData);
     return(true);
 }