Skip to content

Commit

Permalink
Resolve members starting with m_
Browse files Browse the repository at this point in the history
  • Loading branch information
marwie committed Aug 30, 2022
1 parent e47b269 commit 5a2e866
Showing 1 changed file with 25 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -315,16 +315,36 @@ public void AddPropertyCurves(Object animatedObject, AnimationCurve curve, Edito
}
else
{
var member = FindMemberOnTypeIncludingBaseTypes(binding.type, prop.propertyName);
if (member is FieldInfo field) prop.propertyType = field.FieldType;
else if (member is PropertyInfo p) prop.propertyType = p.PropertyType;
if(prop.propertyType == null)
Debug.LogWarning($"Member {prop.propertyName} not found on {binding.type}: implicitly handling animated property {prop.propertyName} ({prop.propertyType}) on target {prop.target}", prop.target);
TryFindMemberBinding(binding, prop, prop.propertyName);
// var member = FindMemberOnTypeIncludingBaseTypes(binding.type, prop.propertyName);
// if (member is FieldInfo field) prop.propertyType = field.FieldType;
// else if (member is PropertyInfo p) prop.propertyType = p.PropertyType;
// if(prop.propertyType == null)
// Debug.LogWarning($"Member {prop.propertyName} not found on {binding.type}: implicitly handling animated property {prop.propertyName} ({prop.propertyType}) on target {prop.target}", prop.target);
}
}
}
}

private static bool TryFindMemberBinding(EditorCurveBinding binding, PropertyCurve prop, string memberName, int iteration = 0)
{
var member = FindMemberOnTypeIncludingBaseTypes(binding.type, memberName);
if (member is FieldInfo field) prop.propertyType = field.FieldType;
else if (member is PropertyInfo p) prop.propertyType = p.PropertyType;
if (member != null) return true;
if (iteration == 0)
{
// some members start with m_, for example m_AnchoredPosition in RectTransform but the field/property name is actually anchoredPosition
if (memberName.StartsWith("m_"))
{
memberName = char.ToLowerInvariant(memberName[2]) + memberName.Substring(3);
return TryFindMemberBinding(binding, prop, memberName, ++iteration);
}
}
Debug.LogWarning($"Member {prop.propertyName} not found on {binding.type}: implicitly handling animated property {prop.propertyName} ({prop.propertyType}) on target {prop.target}", prop.target);
return false;
}

private static MemberInfo FindMemberOnTypeIncludingBaseTypes(Type type, string memberName)
{
while (type != null)
Expand Down

0 comments on commit 5a2e866

Please sign in to comment.