void PrepareGraph(VSGraphModel graphModel)
        {
            var entityTypeHandle = typeof(Entity).GenerateTypeHandle(graphModel.Stencil);

            // Component creation
            var scale = typeof(Scale).GenerateTypeHandle(Stencil);
            var group = graphModel.CreateComponentQuery("g");

            group.AddComponent(graphModel.Stencil, scale, ComponentDefinitionFlags.None);


            // On update
            var groupInstance = graphModel.CreateVariableNode(group, Vector2.zero);

            m_OnUpdateEntities = graphModel.CreateNode <OnUpdateEntitiesNodeModel>("update", Vector2.zero);
            graphModel.CreateEdge(m_OnUpdateEntities.InstancePort, groupInstance.OutputPort);

            m_CreateEntityModel = m_OnUpdateEntities.CreateStackedNode <CreateEntityNodeModel>("instantiate");

            // Variable containing the new entity
            m_OnUpdateEntities.CreateFunctionVariableDeclaration("newEntity", entityTypeHandle);
            m_NewEntityVariable = graphModel.CreateVariableNode(
                m_OnUpdateEntities.FunctionParameterModels.Single(p => p.DataType == entityTypeHandle),
                Vector2.zero);

            m_FloatConstantNode       = (FloatConstantModel)graphModel.CreateConstantNode("float", TypeHandle.Float, Vector2.zero);
            m_FloatConstantNode.value = 10f;

            graphModel.CreateEdge(m_CreateEntityModel.InstancePort, m_NewEntityVariable.OutputPort);
        }
Ejemplo n.º 2
0
        static void CreateItemizedNode(State state, VSGraphModel graphModel, ref IPortModel outputPortModel)
        {
            ItemizeOptions currentItemizeOptions = state.Preferences.CurrentItemizeOptions;

            // automatically itemize, i.e. duplicate variables as they get connected
            if (outputPortModel.Connected && currentItemizeOptions != ItemizeOptions.Nothing)
            {
                var nodeToConnect = outputPortModel.NodeModel;
                var offset        = Vector2.up * k_NodeOffset;

                if (currentItemizeOptions.HasFlag(ItemizeOptions.Constants) &&
                    nodeToConnect is ConstantNodeModel constantModel)
                {
                    string newName = string.IsNullOrEmpty(constantModel.Title)
                        ? "Temporary"
                        : constantModel.Title + "Copy";
                    nodeToConnect = graphModel.CreateConstantNode(
                        newName,
                        constantModel.Type.GenerateTypeHandle(graphModel.Stencil),
                        constantModel.Position + offset
                        );
                    ((ConstantNodeModel)nodeToConnect).ObjectValue = constantModel.ObjectValue;
                }
                else if (currentItemizeOptions.HasFlag(ItemizeOptions.Variables) &&
                         nodeToConnect is VariableNodeModel variableModel)
                {
                    nodeToConnect = graphModel.CreateVariableNode(variableModel.DeclarationModel,
                                                                  variableModel.Position + offset);
                }
                else if (currentItemizeOptions.HasFlag(ItemizeOptions.Variables) &&
                         nodeToConnect is ThisNodeModel thisModel)
                {
                    nodeToConnect = graphModel.CreateNode <ThisNodeModel>("this", thisModel.Position + offset);
                }
                else if (currentItemizeOptions.HasFlag(ItemizeOptions.SystemConstants) &&
                         nodeToConnect is SystemConstantNodeModel sysConstModel)
                {
                    Action <SystemConstantNodeModel> preDefineSetup = m =>
                    {
                        m.ReturnType    = sysConstModel.ReturnType;
                        m.DeclaringType = sysConstModel.DeclaringType;
                        m.Identifier    = sysConstModel.Identifier;
                    };
                    nodeToConnect = graphModel.CreateNode(sysConstModel.Title, sysConstModel.Position + offset, SpawnFlags.Default, preDefineSetup);
                }

                outputPortModel = nodeToConnect.OutputsById[outputPortModel.UniqueId];
            }
        }
Ejemplo n.º 3
0
        static State CreateLogNode(State previousState, CreateLogNodeAction action)
        {
            VSGraphModel graphModel   = (VSGraphModel)previousState.CurrentGraphModel;
            var          stackModel   = (StackBaseModel)action.StackModel;
            var          functionNode = stackModel.CreateStackedNode <LogNodeModel>(LogNodeModel.NodeTitle);

            functionNode.LogType = action.LogType;

            IConstantNodeModel constantNode = graphModel.CreateConstantNode(
                "",
                typeof(string).GenerateTypeHandle(graphModel.Stencil),
                functionNode.Position - k_StackedTestNodesTokenOffset);

            ((ConstantNodeModel <string>)constantNode).value = $"{graphModel.NodeModels.Count}";
            graphModel.CreateEdge(functionNode.InputPort, constantNode.OutputPort);

            return(previousState);
        }
        static State CreateLogNode(State previousState, CreateLogNodeAction action)
        {
            VSGraphModel graphModel   = (VSGraphModel)previousState.CurrentGraphModel;
            var          stackModel   = (StackBaseModel)action.StackModel;
            var          functionNode = stackModel.CreateStackedNode <LogNodeModel>(LogNodeModel.NodeTitle);

            functionNode.LogType = action.LogType;

            IConstantNodeModel constantNode = graphModel.CreateConstantNode(
                "",
                typeof(int).GenerateTypeHandle(graphModel.Stencil),
                stackModel.Position - k_StackedTestNodesTokenOffset);

            ((ConstantNodeModel <int>)constantNode).value = graphModel.NodeModels.Count;
            var edge = graphModel.CreateEdge(functionNode.InputPort, constantNode.OutputPort);

            graphModel.LastChanges.ModelsToAutoAlign.Add(edge);

            return(previousState);
        }