Ejemplo n.º 1
0
 /// <summary>
 /// Return true on flow body can be simplify to lambda expression code.
 /// </summary>
 /// <param name="target"></param>
 /// <param name="returnType"></param>
 /// <param name="parameterTypes"></param>
 /// <returns></returns>
 public static bool CanSimplifyToLambda(MemberData target, Type returnType, IList <Type> parameterTypes)
 {
     if (target.IsTargetingNode)
     {
         var bodyNode = target.GetTargetNode();
         if (bodyNode is MultipurposeNode)
         {
             var node = bodyNode as MultipurposeNode;
             if (node.target.target.isAssigned && !node.onFinished.isAssigned)
             {
                 System.Type[] memberTypes = null;
                 if (node.target.target.targetType == MemberData.TargetType.Method)
                 {
                     var members = node.target.target.GetMembers(false);
                     if (members != null && members.Length > 0)
                     {
                         var lastMember = members.LastOrDefault() as System.Reflection.MethodInfo;
                         if (lastMember != null && lastMember.ReturnType == returnType)
                         {
                             memberTypes = lastMember.GetParameters().Select(i => i.ParameterType).ToArray();
                         }
                     }
                 }
                 else if (node.target.target.targetType == MemberData.TargetType.uNodeFunction)
                 {
                     uNodeFunction func = node.target.target.GetUnityObject() as uNodeFunction;
                     if (func != null && func.ReturnType() == returnType)
                     {
                         memberTypes = func.parameters.Select(i => i.Type).ToArray();
                     }
                 }
                 if (memberTypes != null)
                 {
                     if (parameterTypes.Count == memberTypes.Length && node.target.parameters.Length == memberTypes.Length)
                     {
                         bool flag = true;
                         for (int x = 0; x < parameterTypes.Count; x++)
                         {
                             if (parameterTypes[x] != memberTypes[x])
                             {
                                 flag = false;
                                 break;
                             }
                         }
                         if (flag)
                         {
                             for (int x = 0; x < parameterTypes.Count; x++)
                             {
                                 var p = node.target.parameters[x];
                                 if (p.targetType != MemberData.TargetType.NodeFieldElement || p.GetAccessIndex() != x)
                                 {
                                     flag = false;
                                     break;
                                 }
                             }
                             if (flag)
                             {
                                 return(true);
                             }
                         }
                     }
                 }
             }
         }
     }
     return(false);
 }
Ejemplo n.º 2
0
        protected override void InitializeView()
        {
            base.InitializeView();
            // titleIcon.image = null;
            NodeReturn node = targetNode as NodeReturn;

            if (!node.returnAnyType)
            {
                var parent = node.parentComponent;
                if (parent != null && parent is uNodeProperty)
                {
                    uNodeProperty m = parent as uNodeProperty;
                    if (m.CanGetValue() && m.ReturnType() != typeof(void))
                    {
                        AddInputValuePort(
                            new PortData()
                        {
                            portID         = "return",
                            onValueChanged = (o) => {
                                RegisterUndo();
                                node.returnValue = o as MemberData;
                            },
                            getPortName  = () => "",
                            getPortType  = () => m.ReturnType(),
                            getPortValue = () => node.returnValue,
                        }
                            );
                    }
                }
                else if (node.rootObject != null && node.rootObject is uNodeFunction)
                {
                    uNodeFunction m = node.rootObject as uNodeFunction;
                    if (m.ReturnType() != typeof(void))
                    {
                        AddInputValuePort(
                            new PortData()
                        {
                            portID         = "return",
                            onValueChanged = (o) => {
                                RegisterUndo();
                                node.returnValue = o as MemberData;
                            },
                            getPortName  = () => "",
                            getPortType  = () => m.ReturnType(),
                            getPortValue = () => node.returnValue,
                        }
                            );
                    }
                }
            }
            else
            {
                AddInputValuePort(
                    new PortData()
                {
                    portID         = "return",
                    onValueChanged = (o) => {
                        RegisterUndo();
                        node.returnValue = o as MemberData;
                    },
                    getPortName  = () => "",
                    getPortType  = () => typeof(object),
                    getPortValue = () => node.returnValue,
                }
                    );
            }
            if (uNodeUtility.preferredDisplay != DisplayKind.Full)
            {
                ConstructCompactTitle("return");
            }
        }