Beispiel #1
0
        /// <summary> 连接节点 </summary>
        IEnumerator LinkNodeViews()
        {
            int step = 0;

            foreach (var connection in Model.Connections)
            {
                if (connection == null)
                {
                    continue;
                }
                BaseNodeView fromNodeView, toNodeView;
                if (!NodeViews.TryGetValue(connection.FromNodeGUID, out fromNodeView))
                {
                    throw new NullReferenceException($"找不到From节点{connection.FromNodeGUID}");
                }
                if (!NodeViews.TryGetValue(connection.ToNodeGUID, out toNodeView))
                {
                    throw new NullReferenceException($"找不到To节点{connection.ToNodeGUID}");
                }
                ConnectView(fromNodeView, toNodeView, connection);
                step++;
                if (step % 5 == 0)
                {
                    yield return(null);
                }
            }
        }
        public StateHelper()
        {
            Settings         = new BL.DummySettings();
            ApiHandler       = new BL.ApiHandler(Settings);
            NodeStore        = new BL.NodeStore();
            WebSocketHandler = new BL.WebSocketHelper(Settings.WebSocketUri);

            var nodeType = typeof(INode);
            var types    = this.GetType().Assembly.GetExportedTypes();

            foreach (var t in types)
            {
                if (nodeType.IsAssignableFrom(t))
                {
                    var attr = t.GetCustomAttributes(typeof(NodeFeatureAttribute), true).OfType <NodeFeatureAttribute>().FirstOrDefault();
                    if (attr != null)
                    {
                        NodeTypes.Add(attr.Features, t);
                    }
                }
                if (nodeType.IsAssignableFrom(t))
                {
                    var attr = t.GetCustomAttributes(typeof(NodeViewAttribute), true).OfType <NodeViewAttribute>().FirstOrDefault();
                    if (attr != null)
                    {
                        NodeViews.Add(attr.NodeType, t);
                    }
                }
            }
        }
Beispiel #3
0
        public ChainNodeView FindChainNodeView(ChainNode node, bool recurse)
        {
            var foundNode = NodeViews.FirstOrDefault(view => view.ChainNode == node);

            if (foundNode != null)
            {
                return(foundNode);
            }

            if (!recurse)
            {
                return(null);
            }

            foreach (var view in GroupViews)
            {
                foundNode = view.FindChainNodeView(node, true);

                if (foundNode != null)
                {
                    return(foundNode);
                }
            }

            return(null);
        }
Beispiel #4
0
        public void RefreshDirtyState()
        {
            if (ChainView.Instance.IsBusy)
            {
                return;
            }

            if (TimelineViewBehaviour.Instance == null)
            {
                return;
            }

            if (TimelineViewBehaviour.Instance.Timeline.IsBusy)
            {
                return;
            }

            if (HaxxisGlobalSettings.Instance.IsVgsJob == true)
            {
                return;
            }

            if (HaxxisGlobalSettings.Instance.DisableEditor == true)
            {
                return;
            }

            if (string.IsNullOrEmpty(LoadedPackagePath))
            {
                var hasChildren = GroupViews.Any() || NodeViews.Any();

                DirtyIndicatorComponent.gameObject.SetActive(hasChildren);

                return;
            }

            try
            {
                ChainGroup.SerializingGroup = Group;

                var hp = ChainView.GetHaxxisPackageForGroupView(this);

                var hasChanged = HaxxisPackage.IsChanged(hp, LoadedPackagePath);

                DirtyIndicatorComponent.gameObject.SetActive(hasChanged);
            }
            finally
            {
                ChainGroup.SerializingGroup = null;
            }
        }
Beispiel #5
0
        private void HandleNodeViewDropped(ChainNodeView droppedNodeView)
        {
            if (!ChainView.GroupTransferModeActive)
            {
                return;
            }

            Debug.Log("node view dropped");

            if (NodeViews.Contains(droppedNodeView))
            {
                return;
            }

            droppedNodeView.RequestTransfer(this);
        }
Beispiel #6
0
        private void RemoveChainNodeView(ChainNodeView view, bool destroy)
        {
            view.BoundsChanged        -= HandleChildViewBoundsChanged;
            view.TransferRequested    -= HandleChildNodeViewTransferRequested;
            view.DuplicationRequested -= HandleNodeViewDuplicationRequested;

            NodeViews.Remove(view);


            if (destroy)
            {
                Destroy(view.gameObject);
            }


            BoundsDirty = true;

            UpdateDeleteButtonState();
        }
Beispiel #7
0
        private void HandlePreviewNodeViewDrop(ChainNodeView nodeView)
        {
            if (!ChainView.GroupTransferModeActive)
            {
                return;
            }

            if (nodeView == null)
            {
                IndicateDropAcceptance(false);
                return;
            }

            if (NodeViews.Contains(nodeView))
            {
                IndicateDropAcceptance(false);
                return;
            }

            IndicateDropAcceptance(true);
        }
Beispiel #8
0
        private void RemoveChainNodeView(ChainNode node, bool destroy)
        {
            if (ChainView.SelectedChainNode == node)
            {
                ChainView.SelectedChainNode = null;
            }

            if (node.Router.SelectionStatesEnumerable.Contains(ChainView.SelectedSelectionState))
            {
                ChainView.SelectedSelectionState = null;
            }

            var view = NodeViews.FirstOrDefault(nv => nv.ChainNode == node);

            if (view == null)
            {
                return;
            }

            RemoveChainNodeView(view, destroy);
        }
Beispiel #9
0
        private void AddChainNodeView(ChainNodeView view, bool isTransfer = false)
        {
            if (isTransfer)
            {
                view.transform.SetParent(NodeAttachmentPoint, true);
            }

            NodeViews.Add(view);

            if (!isTransfer)
            {
                view.transform.position = NewNodePosition;
            }


            view.BoundsChanged        += HandleChildViewBoundsChanged;
            view.TransferRequested    += HandleChildNodeViewTransferRequested;
            view.DuplicationRequested += HandleNodeViewDuplicationRequested;

            BoundsDirty = true;

            UpdateDeleteButtonState();
        }
Beispiel #10
0
        /// <summary> 连接节点 </summary>
        IEnumerator LinkNodeViews()
        {
            foreach (var serializedEdge in Model.Edges)
            {
                yield return(0);

                if (serializedEdge.Value == null)
                {
                    continue;
                }
                BaseNodeView inputNodeView, outputNodeView;
                if (!NodeViews.TryGetValue(serializedEdge.Value.InputNodeGUID, out inputNodeView))
                {
                    yield break;
                }
                if (!NodeViews.TryGetValue(serializedEdge.Value.OutputNodeGUID, out outputNodeView))
                {
                    yield break;
                }
                ConnectView(inputNodeView.PortViews[serializedEdge.Value.InputFieldName]
                            , outputNodeView.PortViews[serializedEdge.Value.OutputFieldName]
                            , serializedEdge.Value);
            }
        }
Beispiel #11
0
 public void RemoveNodeView(BaseNodeView _nodeView)
 {
     RemoveElement(_nodeView);
     NodeViews.Remove(_nodeView.Model.GUID);
 }
Beispiel #12
0
        void DeserializeAndPasteCallback(string _operationName, string _serializedData)
        {
            ClearSelection();
            var data = SerializationUtility.DeserializeValue <ClipBoard>(Encoding.UTF8.GetBytes(_serializedData), DataFormat.JSON, ClipBoard.objectReferences);
            Dictionary <string, BaseNode> copiedNodesMap = new Dictionary <string, BaseNode>();

            foreach (var node in data.copiedNodes)
            {
                if (node == null)
                {
                    continue;
                }
                string sourceGUID = node.GUID;
                // 新节点重置id
                BaseNode.IDAllocation(node);
                // 新节点与旧id存入字典
                copiedNodesMap[sourceGUID] = node;
                Model.AddNode(node).ClearConnectionsWithoutNotification();
                node.Position += new Vector2(20, 20);
                AddToSelection(NodeViews[node.GUID]);
            }

            foreach (var group in data.copiedGroups)
            {
                group.Position = new Rect(new Vector2(20, 20), group.Position.size);

                var oldGUIDList = group.InnerNodeGUIDs.ToList();
                group.InnerNodeGUIDs.Clear();

                foreach (var guid in oldGUIDList)
                {
                    if (copiedNodesMap.TryGetValue(guid, out var node))
                    {
                        group.InnerNodeGUIDs.Add(node.GUID);
                    }
                }
                Model.AddGroup(group);
            }

            foreach (var edge in data.copiedEdges)
            {
                //edge.Enable(Model);
                copiedNodesMap.TryGetValue(edge.InputNodeGUID, out var inputNode);
                copiedNodesMap.TryGetValue(edge.OutputNodeGUID, out var outputNode);

                inputNode  = inputNode == null ? Model.Nodes[edge.InputNodeGUID] : Model.Nodes[inputNode.GUID];
                outputNode = outputNode == null ? Model.Nodes[edge.OutputNodeGUID] : Model.Nodes[outputNode.GUID];

                if (inputNode == null || outputNode == null)
                {
                    continue;
                }

                inputNode.TryGetPort(edge.InputFieldName, out NodePort inputPort);
                outputNode.TryGetPort(edge.OutputFieldName, out NodePort outputPort);
                if (!inputPort.Multiple && inputPort.IsConnected)
                {
                    continue;
                }
                if (!outputPort.Multiple && outputPort.IsConnected)
                {
                    continue;
                }

                if (NodeViews.TryGetValue(inputNode.GUID, out BaseNodeView inputNodeView) &&
                    NodeViews.TryGetValue(outputNode.GUID, out BaseNodeView outputNodeView))
                {
                    Model.Connect(inputNodeView.Model.Ports[edge.InputFieldName], outputNodeView.Model.Ports[edge.OutputFieldName]);
                }
            }

            SetDirty();
        }
        public Type GetViewType(INode node)
        {
            var kv = NodeViews.FirstOrDefault(d => node.Features[0].Equals(d.Key));

            return(kv.Value ?? typeof(Views.NodeViews.BasicNodeView));
        }