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); }
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); }