Example #1
0
        public void InitBasicGraph(VSGraphModel graph)
        {
            Stencil stencil = graph.Stencil;

            AssetDatabase.SaveAssets();

            var method = graph.CreateFunction("method", Vector2.left * 200);

            method.CreateFunctionVariableDeclaration("l", typeof(int).GenerateTypeHandle(stencil));
            method.CreateFunctionParameterDeclaration("a", typeof(int).GenerateTypeHandle(stencil));

            var log = method.CreateFunctionCallNode(TypeSystem.GetMethod(typeof(Debug), nameof(Debug.Log), true));
            var abs = graph.CreateFunctionCallNode(TypeSystem.GetMethod(typeof(Mathf), "Abs", true), new Vector2(-350, 100));

            graph.CreateEdge(log.GetParameterPorts().First(), abs.OutputPort);

            var xDecl  = graph.CreateGraphVariableDeclaration("x", typeof(float).GenerateTypeHandle(stencil), true);
            var xUsage = graph.CreateVariableNode(xDecl, new Vector2(-450, 100));

            graph.CreateEdge(abs.GetParameterPorts().First(), xUsage.OutputPort);

            var stack001 = graph.CreateStack(string.Empty, new Vector2(-200, 300));

            stack001.CreateFunctionCallNode(TypeSystem.GetMethod(typeof(Debug), "Log", true));

            var method2 = graph.CreateFunction("method2", Vector2.left * 800);

            method2.CreateFunctionRefCallNode(method);
        }
Example #2
0
        static State AddToGroupNode(State previousState, AddToGroupNodeAction action)
        {
            VSGraphModel graphModel = (VSGraphModel)previousState.CurrentGraphModel;

            //TODO: Clean previous group
            // Get only the items that are not in the "new" group
            List <INodeModel> nodesToGroup = action.NodeModels.Where(m => m.GroupNodeModel != action.GroupNodeModel).ToList();

            // And remove the nodes from their previous group
            RemoveFromGroupNode(nodesToGroup);

            var nodesToStack = new List <INodeModel>();

            foreach (NodeModel nodeModel in nodesToGroup.OfType <NodeModel>().Where(n => n.IsStacked))
            {
                nodeModel.GroupNodeModel = null;
                nodesToStack.Add(nodeModel);
            }

            if (nodesToStack.Any())
            {
                var stack = graphModel.CreateStack(string.Empty, action.NewStackPosition);
                stack.MoveStackedNodes(nodesToStack, 0);
                nodesToGroup.Add(stack);
            }

            // Exclude all the nodes that were put into the new stack from the list of nodes to add.
            ((GroupNodeModel)action.GroupNodeModel).AddNodes(nodesToGroup.Except(nodesToStack));
            return(previousState);
        }
Example #3
0
        static State CreateStacksForNodes(State previousState, CreateStacksForNodesAction action)
        {
            VSGraphModel graphModel = (VSGraphModel)previousState.CurrentGraphModel;

            foreach (var stackOptions in action.Stacks)
            {
                var stack = graphModel.CreateStack(string.Empty, stackOptions.Position);
                if (stackOptions.NodeModels != null)
                {
                    stack.MoveStackedNodes(stackOptions.NodeModels, 0);
                }
            }
            return(previousState);
        }
        static State CreateStacksForNodes(State previousState, CreateStacksForNodesAction action)
        {
            VSGraphModel graphModel = (VSGraphModel)previousState.CurrentGraphModel;

            Undo.RegisterCompleteObjectUndo((Object)graphModel.AssetModel, "Move Stacked Node(s)");

            foreach (var stackOptions in action.Stacks)
            {
                var stack = graphModel.CreateStack(string.Empty, stackOptions.Position);
                if (stackOptions.NodeModels != null)
                {
                    stack.MoveStackedNodes(stackOptions.NodeModels, 0);
                }
            }
            return(previousState);
        }
        static State SplitStack(State previousState, SplitStackAction action)
        {
            VSGraphModel graphModel = (VSGraphModel)previousState.CurrentGraphModel;

            Undo.RegisterCompleteObjectUndo((Object)graphModel.AssetModel, "Move stacked nodes");

            if (action.SplitIndex > 0 && action.SplitIndex < action.StackModel.NodeModels.Count())
            {
                // Get the list of nodes to move to another stack.
                var nodeModels = action.StackModel.NodeModels.Skip(action.SplitIndex).ToList();
                if (nodeModels.Any())
                {
                    // Get old stack (stack A)
                    var stackA = action.StackModel;

                    // Create new stack (stack B).
                    var stackB = graphModel.CreateStack(((NodeModel)stackA).Title + "_split", stackA.Position + Vector2.up * 300);

                    // Move the list of nodes to this new stack.
                    stackB.MoveStackedNodes(nodeModels, 0);

                    // if the stack had a condition node or anything providing the actual port models, we need to move
                    // the nodes BEFORE fetching the port models, as stack.portModels will actually return the condition
                    // port models
                    var stackAOutputPortModel = stackA.OutputPorts.First();
                    var stackBInputPortModel  = stackB.InputPorts.First();
                    var stackBOutputPortModel = stackB.OutputPorts.First();

                    // Connect the edges that were connected to the old stack to the new one.
                    var previousEdgeConnections = graphModel.GetEdgesConnections(stackAOutputPortModel).ToList();
                    foreach (var edge in previousEdgeConnections)
                    {
                        graphModel.CreateEdge(edge.InputPortModel, stackBOutputPortModel);
                        graphModel.DeleteEdge(edge);
                    }

                    // Connect the new stack with the old one.
                    IEdgeModel newEdge = graphModel.CreateEdge(stackBInputPortModel, stackAOutputPortModel);

                    graphModel.LastChanges.ChangedElements.Add(stackA);
                    graphModel.LastChanges.ModelsToAutoAlign.Add(newEdge);
                }
            }

            return(previousState);
        }
Example #6
0
        static State CreateStacksForNodes(State previousState, CreateStacksForNodesAction action)
        {
            VSGraphModel graphModel     = (VSGraphModel)previousState.CurrentGraphModel;
            var          affectedStacks = action.Stacks.SelectMany(stackOption => stackOption.NodeModels).OfType <NodeModel>()
                                          .Select(model => model.ParentStackModel).Distinct();

            foreach (var stack in affectedStacks)
            {
                Undo.RegisterCompleteObjectUndo(stack.NodeAssetReference, "Move Stacked Node(s)");
            }

            foreach (var stackOptions in action.Stacks)
            {
                var stack = graphModel.CreateStack(string.Empty, stackOptions.Position);
                if (stackOptions.NodeModels != null)
                {
                    stack.MoveStackedNodes(stackOptions.NodeModels, 0);
                }
            }
            return(previousState);
        }