Ejemplo n.º 1
0
        protected override void EndLink(LinkPinControl linkObj)
        {
            if (linkObj == null)
            {
                return;
            }

            bool alreadyLink = false;
            var  pinInfo     = GetLinkPinInfo("ParticleComposeControlDown");

            if (HostNodesContainer.StartLinkObj == linkObj)
            {
                base.EndLink(null);
                if (HostNodesContainer.PreviewLinkCurve != null)
                {
                    HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden;
                }
                return;
            }
            if (pinInfo == null)
            {
                return;
            }

            if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(HostNodesContainer.StartLinkObj, linkObj) &&
                ModuleLinkInfo.CanLinkWith2(HostNodesContainer.StartLinkObj, linkObj))
            {
                var container = new NodesContainer.LinkInfoContainer();
                //链接之前删除linkObj其他链接
                //if (linkObj.LinkOpType == enLinkOpType.End)
                //{
                //    if (linkObj.LinkInfos.Count > 0)
                //    {
                //        //linkObj.LinkInfos[0].m_linkFromObjectInfo.RemoveLink(linkObj.LinkInfos[0]);
                //        //linkObj.LinkInfos[0].m_linkToObjectInfo.RemoveLink(linkObj.LinkInfos[0]);
                //        linkObj.LinkInfos[0].Clear();
                //        linkObj.LinkInfos.Clear();
                //    }
                //}
                //if (mStartLinkObj.LinkOpType == enLinkOpType.Start)
                //{
                container.Start = HostNodesContainer.StartLinkObj;
                container.End   = linkObj;
                //}
                //else
                //{
                //    container.Start = objInfo;
                //    container.End = mStartLinkObj;
                //}

                HostNodesContainer.IsOpenContextMenu = false;
                var redoAction = new Action <Object>((obj) =>
                {
                    var linkInfo = new ModuleLinkInfo(HostNodesContainer.ContainerDrawCanvas, container.Start, container.End);
                });
                redoAction.Invoke(null);
                //EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostControl.UndoRedoKey, null, redoAction, null,
                //                            (obj) =>
                //                            {
                //                                for (int i = 0; i < container.End.GetLinkInfosCount(); i++)
                //                                {
                //                                    var info = container.End.GetLinkInfo(i);
                //                                    if (info.m_linkFromObjectInfo == container.Start)
                //                                    {
                //                                        info.Clear();
                //                                        break;
                //                                    }
                //                                }
                //                            }, "Create Link");
                IsDirty = true;
            }
        }
        protected override void EndLink(LinkPinControl linkObj)
        {
            if (linkObj == null)
            {
                return;
            }

            bool alreadyLink = false;
            var  pinInfo     = GetLinkPinInfo("ParticleTextureCutControlDown");

            if (HostNodesContainer.StartLinkObj == linkObj)
            {
                base.EndLink(null);
                if (HostNodesContainer.PreviewLinkCurve != null)
                {
                    HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden;
                }
                return;
            }
            if (pinInfo == null)
            {
                return;
            }

            if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(HostNodesContainer.StartLinkObj, linkObj) &&
                ModuleLinkInfo.CanLinkWith2(HostNodesContainer.StartLinkObj, linkObj))
            {
                var container = new NodesContainer.LinkInfoContainer();
                //链接之前删除linkObj其他链接
                if (linkObj.LinkOpType == enLinkOpType.End)
                {
                    if (linkObj.LinkInfos.Count > 0)
                    {
                        //linkObj.LinkInfos[0].m_linkFromObjectInfo.RemoveLink(linkObj.LinkInfos[0]);
                        //linkObj.LinkInfos[0].m_linkToObjectInfo.RemoveLink(linkObj.LinkInfos[0]);
                        linkObj.LinkInfos[0].Clear();
                        linkObj.LinkInfos.Clear();
                    }
                }
                //if (mStartLinkObj.LinkOpType == enLinkOpType.Start)
                //{
                container.Start = HostNodesContainer.StartLinkObj;
                container.End   = linkObj;
                //}
                //else
                //{
                //    container.Start = objInfo;
                //    container.End = mStartLinkObj;
                //}

                HostNodesContainer.IsOpenContextMenu = false;
                var redoAction = new Action <Object>((obj) =>
                {
                    var linkInfo = new ModuleLinkInfo(HostNodesContainer.ContainerDrawCanvas, container.Start, container.End);
                });
                redoAction.Invoke(null);
                //EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostControl.UndoRedoKey, null, redoAction, null,
                //                            (obj) =>
                //                            {
                //                                for (int i = 0; i < container.End.GetLinkInfosCount(); i++)
                //                                {
                //                                    var info = container.End.GetLinkInfo(i);
                //                                    if (info.m_linkFromObjectInfo == container.Start)
                //                                    {
                //                                        info.Clear();
                //                                        break;
                //                                    }
                //                                }
                //                            }, "Create Link");
                IsDirty = true;
            }

            var count = pinInfo.GetLinkInfosCount();

            for (int index = 0; index < count; ++index)
            {
                //AnimStateLinkInfoForUndoRedo undoRedoLinkInfo = new AnimStateLinkInfoForUndoRedo();
                //var linkInfo = pinInfo.GetLinkInfo(index);
                //if (linkInfo.m_linkFromObjectInfo == HostNodesContainer.StartLinkObj && linkInfo.m_linkToObjectInfo == linkObj)
                //{
                //    alreadyLink = true;
                //    undoRedoLinkInfo.linkInfo = linkInfo as AnimStateLinkInfo;
                //    NodesContainer.TransitionStaeBaseNodeForUndoRedo transCtrl = new NodesContainer.TransitionStaeBaseNodeForUndoRedo();
                //    var redoAction = new Action<Object>((obj) =>
                //    {
                //        transCtrl.TransitionStateNode = undoRedoLinkInfo.linkInfo.AddTransition();
                //    });
                //    redoAction.Invoke(null);
                //    EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null,
                //                                (obj) =>
                //                                {
                //                                    undoRedoLinkInfo.linkInfo.RemoveTransition(transCtrl.TransitionStateNode);

                //                                }, "Create StateTransition");
                //}

                //if (HostNodesContainer.PreviewLinkCurve != null)
                //    HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden;
                //base.EndLink(null,false);
            }
            //if (!alreadyLink)
            //    base.EndLink(linkObj);
        }
Ejemplo n.º 3
0
        public void EndPreviewLine(LinkPinControl objInfo, NodesContainer nodesContainer)
        {
            if (nodesContainer.ContainerDrawCanvas == null)
            {
                return;
            }

            if (objInfo == null)
            {
                if (nodesContainer.StartLinkObj != null && nodesContainer.PreviewLinkCurve.Visibility == System.Windows.Visibility.Visible)
                {
                    nodesContainer.IsOpenContextMenu = true;
                }
            }
            else if (nodesContainer.StartLinkObj != null && objInfo != null)
            {
                nodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden;
                nodesContainer.enPreviewBezierType         = CodeGenerateSystem.Base.enBezierType.None;

                if (nodesContainer.StartLinkObj.LinkOpType == objInfo.LinkOpType && objInfo.LinkOpType != enLinkOpType.Both) // 只有start和end能连 或者其中之一 和 Both
                {
                    return;
                }
                if (CodeGenerateSystem.Base.LinkInfo.CanLinkWith(nodesContainer.StartLinkObj, objInfo))
                {
                    objInfo.MouseAssistVisible = System.Windows.Visibility.Hidden;

                    var container = new NodesContainer.LinkInfoContainer();
                    if (nodesContainer.StartLinkObj.LinkOpType == enLinkOpType.Start)
                    {
                        container.Start = nodesContainer.StartLinkObj;
                        container.End   = objInfo;
                    }
                    else if (objInfo.LinkOpType == enLinkOpType.Start)
                    {
                        container.Start = objInfo;
                        container.End   = nodesContainer.StartLinkObj;
                    }
                    else
                    {
                        container.Start = nodesContainer.StartLinkObj;
                        container.End   = objInfo;
                    }

                    if (nodesContainer.StartLinkObj.LinkCurveType == enLinkCurveType.Line)
                    {
                        NodesContainer.TransitionStaeBaseNodeForUndoRedo transCtrl = new NodesContainer.TransitionStaeBaseNodeForUndoRedo();
                        var redoAction = new Action <object>((obj) =>
                        {
                            var linkInfo = new AnimStateLinkInfo(nodesContainer.ContainerDrawCanvas, container.Start, container.End);
                            transCtrl.TransitionStateNode = linkInfo.AddTransition();
                        });
                        redoAction.Invoke(null);
                        EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(nodesContainer.HostControl.UndoRedoKey, null, redoAction, null,
                                                                                  (obj) =>
                        {
                            for (int i = 0; i < container.End.GetLinkInfosCount(); i++)
                            {
                                var info = container.End.GetLinkInfo(i);
                                if (info.m_linkFromObjectInfo == container.Start)
                                {
                                    var transitionInfo = info as AnimStateLinkInfo;
                                    transitionInfo.RemoveTransition(transCtrl.TransitionStateNode);
                                    break;
                                }
                            }
                        }, "Create Link");
                    }
                    else
                    {
                        var redoAction = new Action <Object>((obj) =>
                        {
                            var linkInfo = new CodeGenerateSystem.Base.LinkInfo(nodesContainer.ContainerDrawCanvas, container.Start, container.End);
                        });
                        redoAction.Invoke(null);
                        EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(nodesContainer.HostControl.UndoRedoKey, null, redoAction, null,
                                                                                  (obj) =>
                        {
                            for (int i = 0; i < container.End.GetLinkInfosCount(); i++)
                            {
                                var info = container.End.GetLinkInfo(i);
                                if (info.m_linkFromObjectInfo == container.Start)
                                {
                                    info.Clear();
                                    break;
                                }
                            }
                        }, "Create Link");
                    }

                    IsDirty = true;
                }
                else
                {
                    nodesContainer.OnLinkFailure(nodesContainer.StartLinkObj, objInfo);
                }
            }
        }