public GraphBuilder NewNode(Type nodeType, Vector2 position, string name, BaseGraphCLIAttributes attributes = null)
 {
     if (!nodeType.IsSubclassOf(typeof(BaseNode)))
     {
         Debug.Log("[GraphBuilder] unknown node type: '" + nodeType + "'");
         return(this);
     }
     commands.Add(BaseGraphCLI.GenerateNewNodeCommand(nodeType, name, position, attributes));
     return(this);
 }
Exemple #2
0
        public static string GenerateNewNodeCommand(Type nodeType, string name, BaseGraphCLIAttributes datas = null)
        {
            string cmd = "NewNode " + nodeType.Name + " \"" + name + "\"";

            if (datas != null && datas.Count != 0)
            {
                cmd += " attr=" + Jsonizer.Generate(datas);
            }

            return(cmd);
        }
Exemple #3
0
        public static void PerlinNoiseWithAttributesToDebugNodeExecution()
        {
            string perlinNodeName   = "perlin";
            var    perlinAttributes = new BaseGraphCLIAttributes {
                { "persistence", 2.4f }, { "octaves", 6 }
            };

            var graph = GraphBuilder.NewGraph <WorldGraph>()
                        .NewNode <NodePerlinNoise2D>(perlinNodeName, perlinAttributes)
                        .Execute()
                        .GetGraph();

            NodePerlinNoise2D perlinNode = graph.FindNodeByName(perlinNodeName) as NodePerlinNoise2D;

            Assert.That(perlinNode.octaves == 6, "Perlin node octaves expected to be 6 but was " + perlinNode.octaves);
            Assert.That(perlinNode.persistence == 2.4f, "Perlin node persistence expected to be 2.4 but was " + perlinNode.persistence);
        }
 public GraphBuilder NewNode <T>(string name, BaseGraphCLIAttributes attributes = null) where T : BaseNode
 {
     commands.Add(BaseGraphCLI.GenerateNewNodeCommand(typeof(T), name, attributes));
     return(this);
 }
Exemple #5
0
        public static void Export(BaseGraph graph, string filePath)
        {
            List <string> commands      = new List <string>();
            List <string> nodeNames     = new List <string>();
            var           nodeToNameMap = new Dictionary <BaseNode, string>();

            //GraphAttr commands
            var fields = graph.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

            foreach (var field in fields)
            {
                var attrs = field.GetCustomAttributes(true);

                if (attrs.Any(a => a is TextSerializeField))
                {
                    string s = GenerateGraphAttributeCommand(field.Name, field.GetValue(graph));

                    if (s != null)
                    {
                        commands.Add(s);
                    }
                }
            }

            //CreateNode commands
            foreach (var node in graph.allNodes)
            {
                var attrs = new BaseGraphCLIAttributes();

                //load node attributes
                FieldInfo[] attrFields = node.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
                foreach (var field in attrFields)
                {
                    var attributes = field.GetCustomAttributes(false);

                    bool isInput = attributes.Any(a => {
                        return(a.GetType() == typeof(InputAttribute));
                    });

                    if (isInput)
                    {
                        continue;
                    }

                    //if the field can't be jsonified, we skip it
                    if (Jsonizer.allowedJsonTypes.FindIndex(j => j.type == field.FieldType) == -1)
                    {
                        continue;
                    }

                    attrs.Add(field.Name, field.GetValue(node));
                }

                string nodeName = node.name;
                int    i        = 0;

                //unique name generation
                while (nodeNames.Contains(nodeName))
                {
                    nodeName = node.name + i++;
                }

                nodeNames.Add(nodeName);
                nodeToNameMap[node] = nodeName;

                commands.Add(GenerateNewNodeCommand(node.GetType(), nodeName, node.rect.position, attrs));
            }

            //Link commands
            foreach (var link in graph.nodeLinkTable.GetLinks())
            {
                if (link.fromNode == null || link.toNode == null)
                {
                    continue;
                }

                var fromName       = nodeToNameMap[link.fromNode];
                var toName         = nodeToNameMap[link.toNode];
                var fromAnchorName = link.fromAnchor.fieldName;
                var toAnchorName   = link.toAnchor.fieldName;

                commands.Add(GenerateLinkAnchorNameCommand(fromName, fromAnchorName, toName, toAnchorName));
            }

            File.WriteAllLines(filePath, commands.ToArray());
        }