Exemple #1
0
 public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
 {
     NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, (CacheNode n) => {
         n.target = MemberData.CreateConnection(source, false);
     });
     graph.Refresh();
 }
Exemple #2
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("Promote to node");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "Promote to node");
            }
            MemberData m = data.member;

            if (data.portType != null && (!m.isAssigned || m.type == null))
            {
                if (ReflectionUtils.CanCreateInstance(data.portType))
                {
                    m.CopyFrom(new MemberData(ReflectionUtils.CreateInstance(data.portType)));
                }
                else
                {
                    m.CopyFrom(MemberData.CreateFromValue(null, data.portType));
                }
            }
            NodeEditorUtility.AddNewNode <MultipurposeNode>(graph.editorData, null, null, new Vector2(source.editorRect.x - 100, source.editorRect.y), (node) => {
                node.target.target = new MemberData(m);
                MemberDataUtility.UpdateMultipurposeMember(node.target);
                m.CopyFrom(new MemberData(node, MemberData.TargetType.ValueNode));
            });
            graph.Refresh();
        }
Exemple #3
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            Type type = data.portType;

            if (type.IsSubclassOf(typeof(System.MulticastDelegate)))
            {
                NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(EventHook n) {
                    n.target = new MemberData(source, MemberData.TargetType.ValueNode);
                });
            }
            else
            {
                NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(NodeSetValue n) {
                    n.target = data.getConnection();
                    if (type.IsSubclassOf(typeof(System.MulticastDelegate)))
                    {
                        NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(NodeLambda node) {
                            n.value           = new MemberData(node, MemberData.TargetType.ValueNode);
                            n.setType         = SetType.Add;
                            node.delegateType = MemberData.CreateFromType(type);
                        });
                    }
                    else if (ReflectionUtils.CanCreateInstance(type))
                    {
                        n.value = new MemberData(ReflectionUtils.CreateInstance(type), MemberData.TargetType.Values);
                    }
                });
            }
            graph.Refresh();
        }
Exemple #4
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("Assign to anonymous function");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "Assign to anonymous function");
            }
            MemberData m = data.member;

            NodeEditorUtility.AddNewNode <NodeAnonymousFunction>(graph.editorData, null, null,
                                                                 new Vector2(source.editorRect.x - 100, source.editorRect.y),
                                                                 (node) => {
                var method = type.GetMethod("Invoke");
                if (method != null)
                {
                    node.returnType = new MemberData(method.ReturnType);
                    foreach (var p in method.GetParameters())
                    {
                        node.parameterTypes.Add(new MemberData(p.ParameterType));
                    }
                }
                m.CopyFrom(new MemberData(node, MemberData.TargetType.ValueNode));
                graph.Refresh();
            });
            graph.Refresh();
        }
Exemple #5
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            Type type = data.portType;
            var  win  = NodeBrowserWindow.ShowWindow();

            win.browser.RevealItem(type);
            win.Focus();
        }
Exemple #6
0
 public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
 {
     NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(MacroPortNode n) {
         data.member.CopyFrom(MemberData.CreateConnection(n, true));
         n.gameObject.name = data.portName;
         n.kind            = uNode.PortKind.FlowOutput;
         n.editorRect      = source.editorRect;
         n.editorRect.y   += source.editorRect.height + 100;
     });
 }
Exemple #7
0
 public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
 {
     NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(MacroPortNode n) {
         n.target          = data.getConnection();
         n.gameObject.name = data.portName;
         n.kind            = uNode.PortKind.FlowInput;
         n.editorRect      = source.editorRect;
         n.editorRect.y   -= 100;
     });
     graph.Refresh();
 }
Exemple #8
0
 public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
 {
     NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(MacroPortNode n) {
         n.type            = new MemberData(data.portType);
         n.target          = data.getConnection();
         n.gameObject.name = data.portName;
         n.kind            = uNode.PortKind.ValueOutput;
         n.editorRect      = source.editorRect;
         n.editorRect.x   += source.editorRect.width + 100;
     });
 }
Exemple #9
0
 public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
 {
     NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, delegate(MacroPortNode n) {
         data.member.CopyFrom(MemberData.CreateConnection(n, false));
         n.type            = new MemberData(data.portType);
         n.gameObject.name = data.portName;
         n.kind            = uNode.PortKind.ValueInput;
         n.editorRect      = source.editorRect;
         n.editorRect.x   -= 100;
     });
 }
Exemple #10
0
        public override bool IsValidPort(Node source, PortCommandData data)
        {
            var member = data.member;

            if (member != null && member.isTargeted && member.targetType != MemberData.TargetType.ValueNode)
            {
                if (data.portType != null && data.portType.IsByRef && member.targetType.IsTargetingValue())
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
Exemple #11
0
        public override bool IsValidPort(Node source, PortCommandData data)
        {
            var member = data.member;

            type = filter != null?filter.GetActualType() : typeof(object);

            if (member != null && type != null && type.IsCastableTo(typeof(Delegate)))
            {
                if (filter != null && filter.SetMember)
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
Exemple #12
0
        public override bool IsValidPort(Node source, PortCommandData data)
        {
            var member = data.member;

            type = filter != null?filter.GetActualType() : typeof(object);

            if (member != null && (!member.isAssigned || member.targetType == MemberData.TargetType.Values) && type != null)
            {
                if (type.IsByRef)
                {
                    type = type.GetElementType();
                }
                return(true);
            }
            return(false);
        }
Exemple #13
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("To value node");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "To value node");
            }
            var member = data.member;

            NodeEditorUtility.AddNewNode <MultipurposeNode>(graph.editorData, null, null, new Vector2(source.editorRect.x - 100, source.editorRect.y), (node) => {
                node.target.target = MemberData.CreateFromValue(ReflectionUtils.CreateInstance(filter.Types[0]), filter.Types[0]);
                MemberDataUtility.UpdateMultipurposeMember(node.target);
                member.CopyFrom(MemberData.CreateConnection(node, false));
            });
            graph.Refresh();
        }
Exemple #14
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("Promote to local variable");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "Promote to local variable");
            }
            MemberData   m    = data.member;
            var          root = graph.editorData.selectedRoot;
            VariableData var  = uNodeEditorUtility.AddVariable(type, root.localVariable, root);

            if (m.isAssigned && data.portType != null && !data.portType.IsByRef)
            {
                var.Set(m.Get());
            }
            m.CopyFrom(new MemberData(var, root));
            uNodeGUIUtility.GUIChanged(source.owner);
        }
Exemple #15
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("Assign to lambda");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "Assign to lambda");
            }
            MemberData m = data.member;

            NodeEditorUtility.AddNewNode <NodeLambda>(graph.editorData, null, null,
                                                      new Vector2(source.editorRect.x - 100, source.editorRect.y),
                                                      (node) => {
                node.delegateType = MemberData.CreateFromType(type);
                m.CopyFrom(new MemberData(node, MemberData.TargetType.ValueNode));
                graph.Refresh();
            });
            graph.Refresh();
        }
Exemple #16
0
        public override bool IsValidPort(Node source, PortCommandData data)
        {
            var member = data.member;

            if (member == null)
            {
                return(false);
            }
            else if (filter != null && filter.Types != null && filter.Types.Count > 0)
            {
                Type t = filter.GetActualType();
                if (ReflectionUtils.CanCreateInstance(t) && !t.IsPrimitive && t != typeof(string))
                {
                    return(true);
                }
            }
            return(false);
        }
Exemple #17
0
        public override bool IsValidPort(Node source, PortCommandData data)
        {
            var member = data.member;

            if (member == null || member.isAssigned || filter != null && filter.SetMember)
            {
                return(false);
            }
            else if (filter != null && filter.Types != null && filter.Types.Count > 0)
            {
                Type t = filter.GetActualType();
                if (t != null && !t.IsAbstract && !t.IsInterface && !t.IsByRef)
                {
                    return(true);
                }
            }
            return(false);
        }
Exemple #18
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            if (source.owner)
            {
                Undo.SetCurrentGroupName("Assign to contructor node");
                Undo.RegisterFullObjectHierarchyUndo(source.owner, "Assign to contructor node");
            }
            var member = data.member;

            NodeEditorUtility.AddNewNode <MultipurposeNode>(graph.editorData, null, null, new Vector2(source.editorRect.x - 100, source.editorRect.y), (node) => {
                var type  = filter.GetActualType();
                var ctors = type.GetConstructors();
                if (ctors != null && ctors.Length > 0)
                {
                    System.Reflection.ConstructorInfo ctor = null;
                    foreach (var c in ctors)
                    {
                        if (ctor == null)
                        {
                            ctor = c;
                        }
                        else if (ctor.GetParameters().Length < c.GetParameters().Length)
                        {
                            ctor = c;
                        }
                    }
                    node.target.target = new MemberData(ctor);
                }
                else
                {
                    node.target.target = new MemberData(type.Name + ".ctor", type, MemberData.TargetType.Constructor);
                }
                MemberDataUtility.UpdateMultipurposeMember(node.target);
                member.CopyFrom(new MemberData(node, MemberData.TargetType.ValueNode));
            });
            graph.Refresh();
        }
Exemple #19
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            Type            type   = data.portType;
            FilterAttribute filter = new FilterAttribute();

            filter.HideTypes.Add(typeof(void));
            filter.MaxMethodParam           = int.MaxValue;
            filter.SetMember                = true;
            filter.Public                   = true;
            filter.Instance                 = true;
            filter.Static                   = false;
            filter.DisplayDefaultStaticType = false;
            var customItems = ItemSelector.MakeCustomItems(type, filter, type.PrettyName());

            if (customItems != null)
            {
                ItemSelector w = ItemSelector.ShowWindow(source, MemberData.none, filter, delegate(MemberData mData) {
                    mData.instance = data.getConnection();
                    NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, (MultipurposeNode n) => {
                        if (n.target == null)
                        {
                            n.target = new MultipurposeMember();
                        }
                        n.target.target = mData;
                        MemberDataUtility.UpdateMultipurposeMember(n.target);
                        NodeEditorUtility.AddNewNode(graph.editorData, null, null,
                                                     new Vector2(mousePositionOnCanvas.x + n.editorRect.width + 150, mousePositionOnCanvas.y),
                                                     (NodeSetValue SV) => {
                            SV.target = new MemberData(n, MemberData.TargetType.ValueNode);
                        });
                    });
                    graph.Refresh();
                }, customItems).ChangePosition(GUIUtility.GUIToScreenPoint(mousePosition));
                w.displayDefaultItem = false;
            }
        }
Exemple #20
0
 public override bool IsValidPort(Node source, PortCommandData data)
 {
     return(source.parentComponent is IMacro || source.owner is IMacroGraph && source.IsInRoot);
 }
Exemple #21
0
 public override bool IsValidPort(Node source, PortCommandData data)
 {
     return(source.CanGetValue());
 }
Exemple #22
0
 public override bool IsValidPort(Node source, PortCommandData data)
 {
     return(data.portName != UGraphView.SelfPortID || source.CanGetValue());
 }
Exemple #23
0
        public override void OnClick(Node source, PortCommandData data, Vector2 mousePosition)
        {
            Type            type   = data.portType;
            FilterAttribute filter = new FilterAttribute {
                VoidType          = true,
                MaxMethodParam    = int.MaxValue,
                Public            = true,
                Instance          = true,
                Static            = false,
                UnityReference    = false,
                InvalidTargetType = MemberData.TargetType.Null | MemberData.TargetType.Values,
                // DisplayDefaultStaticType = false
                ValidateMember = (member) => {
                    if (member is System.Reflection.MethodInfo)
                    {
                        var parameters = (member as System.Reflection.MethodInfo).GetParameters();
                        for (int i = 0; i < parameters.Length; i++)
                        {
                            if (type.IsCastableTo(parameters[i].ParameterType))
                            {
                                return(true);
                            }
                        }
                    }
                    return(false);
                },
            };
            List <ItemSelector.CustomItem> customItems;

            if (type is RuntimeType)
            {
                customItems = ItemSelector.MakeCustomItems((type as RuntimeType).GetRuntimeMembers(), filter);
                if (type.BaseType != null)
                {
                    customItems.AddRange(ItemSelector.MakeCustomItems(type.BaseType, filter, "Inherit Member"));
                }
            }
            else
            {
                customItems = ItemSelector.MakeCustomItems(type, filter);
            }
            var usingNamespaces = source.owner.GetNamespaces().ToHashSet();

            if (usingNamespaces != null && usingNamespaces.Count > 0)
            {
                customItems.AddRange(ItemSelector.MakeExtensionItems(type, usingNamespaces, filter, "Extensions"));
            }
            {            //Custom input port items.
                if (customItems == null)
                {
                    customItems = new System.Collections.Generic.List <ItemSelector.CustomItem>();
                }
                var customInputItems = NodeEditorUtility.FindCustomInputPortItems();
                if (customInputItems != null && customInputItems.Count > 0)
                {
                    var mData = data.getConnection();
                    foreach (var c in customInputItems)
                    {
                        c.graph = graph;
                        c.mousePositionOnCanvas = mousePositionOnCanvas;
                        if (c.IsValidPort(type, PortAccessibility.OnlyGet))
                        {
                            var items = c.GetItems(source, mData, type);
                            if (items != null)
                            {
                                customItems.AddRange(items);
                            }
                        }
                    }
                }
            }
            if (customItems != null)
            {
                filter.Static = true;
                customItems.Sort((x, y) => {
                    if (x.category != y.category)
                    {
                        return(string.Compare(x.category, y.category));
                    }
                    return(string.Compare(x.name, y.name));
                });
                ItemSelector w = ItemSelector.ShowWindow(source, MemberData.none, filter, (MemberData mData) => {
                    bool flag = mData.targetType == MemberData.TargetType.Method && !type.IsCastableTo(mData.startType);
                    if (!flag && !mData.isStatic)
                    {
                        mData.instance = data.getConnection();
                    }
                    NodeEditorUtility.AddNewNode(graph.editorData, null, null, mousePositionOnCanvas, (MultipurposeNode nod) => {
                        if (nod.target == null)
                        {
                            nod.target = new MultipurposeMember();
                        }
                        nod.target.target = mData;
                        MemberDataUtility.UpdateMultipurposeMember(nod.target);
                        if (flag)
                        {
                            var pTypes = mData.ParameterTypes;
                            if (pTypes != null)
                            {
                                int paramIndex   = 0;
                                MemberData param = null;
                                for (int i = 0; i < pTypes.Length; i++)
                                {
                                    var types = pTypes[i];
                                    if (types != null)
                                    {
                                        for (int y = 0; y < types.Length; y++)
                                        {
                                            if (type.IsCastableTo(types[y]))
                                            {
                                                param = data.getConnection();
                                                break;
                                            }
                                            paramIndex++;
                                        }
                                        if (param != null)
                                        {
                                            break;
                                        }
                                    }
                                }
                                if (nod.target.parameters.Length > paramIndex && param != null)
                                {
                                    nod.target.parameters[paramIndex] = param;
                                }
                            }
                        }
                        graph.Refresh();
                    });
                }, customItems).ChangePosition(GUIUtility.GUIToScreenPoint(mousePosition));
                w.displayRecentItem = false;
                w.displayNoneOption = false;
            }
        }