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); }
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]; } }
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); }