public static TweenHash TweenWithToken(this TweenHash hash, TweenHash.AnimMode mode, com.spacepuppy.Tween.Ease ease, float dur, object valueToken, object valueAltToken)
        {
            if (hash == null || valueToken == null)
            {
                return(hash);
            }

            object value;

            if (valueToken is IStateToken)
            {
                var st = valueToken as IStateToken;
                foreach (var sname in st.GetMemberNames(false))
                {
                    value = st.GetValue(sname);
                    if (value == null)
                    {
                        continue;
                    }

                    switch (VariantReference.GetVariantType(value.GetType()))
                    {
                    case VariantType.String:
                    case VariantType.Boolean:
                    case VariantType.Integer:
                    case VariantType.Float:
                    case VariantType.Double:
                    case VariantType.Vector2:
                    case VariantType.Vector3:
                    case VariantType.Vector4:
                    case VariantType.Quaternion:
                    case VariantType.Color:
                    case VariantType.Rect:
                        hash.ByAnimMode(mode, sname, ease, dur, value, DynamicUtil.GetValue(valueAltToken, sname));
                        break;
                    }
                }
            }
            else
            {
                foreach (var sname in DynamicUtil.GetMemberNames(valueToken, false, System.Reflection.MemberTypes.Field | System.Reflection.MemberTypes.Property))
                {
                    value = DynamicUtil.GetValue(valueToken, sname);
                    if (value == null)
                    {
                        continue;
                    }

                    switch (VariantReference.GetVariantType(value.GetType()))
                    {
                    case VariantType.String:
                    case VariantType.Boolean:
                    case VariantType.Integer:
                    case VariantType.Float:
                    case VariantType.Double:
                    case VariantType.Vector2:
                    case VariantType.Vector3:
                    case VariantType.Vector4:
                    case VariantType.Quaternion:
                    case VariantType.Color:
                    case VariantType.Rect:
                        hash.ByAnimMode(mode, sname, ease, dur, value, DynamicUtil.GetValue(valueAltToken, sname));
                        break;
                    }
                }
            }

            return(hash);
        }
Ejemplo n.º 2
0
        public static bool TryGetValueDirect(object obj, string sprop, out object result, params object[] args)
        {
            const BindingFlags BINDING = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

            result = null;
            if (string.IsNullOrEmpty(sprop))
            {
                return(false);
            }

            //if (sprop.Contains('.'))
            //    obj = DynamicUtil.ReduceSubObject(obj, sprop, out sprop);
            if (obj == null)
            {
                return(false);
            }

            try
            {
                var tp = obj.GetType();

                while (tp != null)
                {
                    var members = tp.GetMember(sprop, BINDING);
                    if (members == null || members.Length == 0)
                    {
                        return(false);
                    }

                    foreach (var member in members)
                    {
                        switch (member.MemberType)
                        {
                        case System.Reflection.MemberTypes.Field:
                            var field = member as System.Reflection.FieldInfo;
                            result = field.GetValue(obj);
                            return(true);

                        case System.Reflection.MemberTypes.Property:
                        {
                            var prop       = member as System.Reflection.PropertyInfo;
                            var paramInfos = prop.GetIndexParameters();
                            if (prop.CanRead && DynamicUtil.ParameterSignatureMatches(args, paramInfos, false))
                            {
                                result = prop.GetValue(obj, args);
                                return(true);
                            }
                            break;
                        }

                        case System.Reflection.MemberTypes.Method:
                        {
                            var meth       = member as System.Reflection.MethodInfo;
                            var paramInfos = meth.GetParameters();
                            if (DynamicUtil.ParameterSignatureMatches(args, paramInfos, false))
                            {
                                result = meth.Invoke(obj, args);
                                return(true);
                            }
                            break;
                        }
                        }
                    }

                    tp = tp.BaseType;
                }
            }
            catch
            {
            }
            return(false);
        }