/// <summary> /// An editor time safe version of DynamicUtil.GetValueWithMember that attempts to not leak various values into the scene (like materials). /// </summary> /// <param name="info"></param> /// <param name="targObj"></param> /// <param name="ignoreMethod"></param> /// <returns></returns> public static object GetValueWithMemberSafe(MemberInfo info, object targObj, bool ignoreMethod) { if (info == null) { return(null); } targObj = ObjUtil.ReduceIfProxy(targObj); var tp = info.DeclaringType; if (TypeUtil.IsType(tp, typeof(Renderer))) { switch (info.Name) { case "material": return(DynamicUtil.GetValue(targObj, "sharedMaterial")); case "materials": return(DynamicUtil.GetValue(targObj, "sharedMaterials")); } } else if (TypeUtil.IsType(tp, typeof(MeshFilter))) { switch (info.Name) { case "mesh": return(DynamicUtil.GetValue(targObj, "sharedMesh")); } } return(DynamicUtil.GetValueWithMember(info, targObj, ignoreMethod)); }
public T GetValue <T>() { if (_target == null) { return(default(T)); } var obj = ObjUtil.ReduceIfProxy(_target); if (obj == null) { return(default(T)); } else { var result = DynamicUtil.GetValue(_target, _memberName); if (result is T) { return((T)result); } else if (ConvertUtil.IsSupportedType(typeof(T))) { return(ConvertUtil.ToPrim <T>(result)); } else { return(default(T)); } } }
public System.Type GetTargetType() { if (_memberName == null) { return(typeof(object)); } if (_target is IProxy) { var tp = (_target as IProxy).GetTargetType(); return(DynamicUtil.GetReturnType(DynamicUtil.GetMemberFromType(tp, _memberName, false)) ?? typeof(object)); } else { return(DynamicUtil.GetReturnType(DynamicUtil.GetMember(ObjUtil.ReduceIfProxy(_target), _memberName, false)) ?? typeof(object)); } }
public bool SetValue(object value) { if (_target == null) { return(false); } var obj = ObjUtil.ReduceIfProxy(_target); if (obj == null) { return(false); } else { return(DynamicUtil.SetValue(_target, _memberName, value)); } }
public object GetValue() { if (_target == null) { return(null); } var obj = ObjUtil.ReduceIfProxy(_target); if (obj == null) { return(null); } else { return(DynamicUtil.GetValue(obj, _memberName)); } }