Ejemplo n.º 1
0
        public void LoadScript(ScriptData scriptData)
        {
            ScriptData = scriptData;

            DeleteElements(graphElements.ToList());

            //Debug.Log($"Loading script '{scriptData.name}' with {scriptData.Nodes.Count} nodes...");

            // add nodes
            foreach (ScriptNodeData nodeData in scriptData.Nodes)
            {
                AddNode(nodeData);
            }

            // add edges
            foreach (ScriptNodeData nodeData in Nodes.Values)
            {
                Type nodeType = nodeData.GetType();

                var connections = nodeType.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                                  .Where(x => Attribute.IsDefined(x, typeof(ConnectionAttribute)));
                foreach (FieldInfo connection in connections)
                {
                    ConnectionAttribute attr = connection.GetCustomAttribute <ConnectionAttribute>();
                    if (attr.ConnectionDirection != ConnectionAttribute.Direction.Output)
                    {
                        continue;
                    }

                    ScriptNodePortData outputPort = (ScriptNodePortData)connection.GetValue(nodeData);
                    if (!outputPort.IsConnected)
                    {
                        //Debug.Log($"Node {nodeData.Id} connection {outputPort.Id} not connected");
                        continue;
                    }

                    AddEdge(nodeData.Id, outputPort.Id, outputPort.NodeId, outputPort.PortId);
                }

                var outputs = nodeType.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                              .Where(x => Attribute.IsDefined(x, typeof(OutputAttribute)));
                foreach (FieldInfo output in outputs)
                {
                    OutputAttribute attr = output.GetCustomAttribute <OutputAttribute>();

                    ScriptNodePortData outputPort = (ScriptNodePortData)output.GetValue(nodeData);
                    if (!outputPort.IsConnected)
                    {
                        //Debug.Log($"Node {nodeData.Id} output {outputPort.Id} not connected");
                        continue;
                    }

                    AddEdge(nodeData.Id, outputPort.Id, outputPort.NodeId, outputPort.PortId);
                }
            }
        }
Ejemplo n.º 2
0
 public ScriptViewPort(ScriptViewNode node, ScriptNodePortData portData, Orientation orientation, Direction direction, Capacity capacity, Type type) : base(node, portData, orientation, direction, capacity, type)
 {
 }
Ejemplo n.º 3
0
        protected override void InitializeView()
        {
            base.InitializeView();

            Type nodeType = ScriptNodeData.GetType();
            //Debug.Log($"Node 0x{Id:X} of type {nodeType}");

            var connections = nodeType.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                              .Where(x => Attribute.IsDefined(x, typeof(ConnectionAttribute)));

            foreach (FieldInfo connection in connections)
            {
                ConnectionAttribute attr = connection.GetCustomAttribute <ConnectionAttribute>();
                if (attr.ConnectionDirection != ConnectionAttribute.Direction.Input)
                {
                    continue;
                }
                //Debug.Log($"Add input connection {attr.Name} to node 0x{Id:X}");

                ScriptNodePortData inputPort = (ScriptNodePortData)connection.GetValue(ScriptNodeData);
                ScriptViewPort     port      = new ScriptViewPort(this, inputPort, Orientation.Horizontal, Direction.Input, Port.Capacity.Single, typeof(ScriptNodePortData))
                {
                    portName = attr.Name
                };
                port.AddManipulator(new EdgeConnector <Edge>(EdgeConnectorListener));
                Add(port);
            }

            var inputs = nodeType.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                         .Where(x => Attribute.IsDefined(x, typeof(InputAttribute)));

            foreach (FieldInfo input in inputs)
            {
                InputAttribute attr = input.GetCustomAttribute <InputAttribute>();
                //Debug.Log($"Add input {attr.Name} of type {attr.Type} to node 0x{Id:X}");

                ScriptNodePortData inputPort = (ScriptNodePortData)input.GetValue(ScriptNodeData);
                ScriptViewPort     port      = new ScriptViewPort(this, inputPort, Orientation.Horizontal, Direction.Input, Port.Capacity.Single, attr.Type)
                {
                    portName = attr.Name
                };
                port.AddManipulator(new EdgeConnector <Edge>(EdgeConnectorListener));
                Add(port);
            }

            foreach (FieldInfo connection in connections)
            {
                ConnectionAttribute attr = connection.GetCustomAttribute <ConnectionAttribute>();
                if (attr.ConnectionDirection != ConnectionAttribute.Direction.Output)
                {
                    continue;
                }
                //Debug.Log($"Add output connection {attr.Name} to node 0x{Id:X}");

                ScriptNodePortData outputPort = (ScriptNodePortData)connection.GetValue(ScriptNodeData);
                ScriptViewPort     port       = new ScriptViewPort(this, outputPort, Orientation.Horizontal, Direction.Output, Port.Capacity.Single, typeof(ScriptNodePortData))
                {
                    portName = attr.Name
                };
                port.AddManipulator(new EdgeConnector <Edge>(EdgeConnectorListener));
                Add(port);
            }

            var outputs = nodeType.GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
                          .Where(x => Attribute.IsDefined(x, typeof(OutputAttribute)));

            foreach (FieldInfo output in outputs)
            {
                OutputAttribute attr = output.GetCustomAttribute <OutputAttribute>();
                //Debug.Log($"Add output {attr.Name} of type {attr.Type} to node 0x{Id:X}");

                ScriptNodePortData outputPort = (ScriptNodePortData)output.GetValue(ScriptNodeData);
                ScriptViewPort     port       = new ScriptViewPort(this, outputPort, Orientation.Horizontal, Direction.Output, Port.Capacity.Single, attr.Type)
                {
                    portName = attr.Name
                };
                port.AddManipulator(new EdgeConnector <Edge>(EdgeConnectorListener));
                Add(port);
            }
        }