92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Reflection;
 | |
| 
 | |
| namespace UnityEditor.Timeline
 | |
| {
 | |
|     static class AnimatedParameterCache
 | |
|     {
 | |
|         static readonly Dictionary<Type, FieldInfo[]> k_ScriptPlayableFieldsCache = new Dictionary<Type, FieldInfo[]>();
 | |
|         static readonly Dictionary<PropertyKey, FieldInfo> k_PropertyFieldInfoCache = new Dictionary<PropertyKey, FieldInfo>();
 | |
|         static readonly Dictionary<PropertyKey, bool> k_PropertyIsAnimatableCache = new Dictionary<PropertyKey, bool>();
 | |
|         static readonly Dictionary<PropertyKey, string> k_BindingNameCache = new Dictionary<PropertyKey, string>();
 | |
| 
 | |
|         public static bool TryGetScriptPlayableFields(Type type, out FieldInfo[] scriptPlayableFields)
 | |
|         {
 | |
|             return k_ScriptPlayableFieldsCache.TryGetValue(type, out scriptPlayableFields);
 | |
|         }
 | |
| 
 | |
|         public static void SetScriptPlayableFields(Type type, FieldInfo[] scriptPlayableFields)
 | |
|         {
 | |
|             k_ScriptPlayableFieldsCache[type] = scriptPlayableFields;
 | |
|         }
 | |
| 
 | |
|         public static bool TryGetFieldInfoForProperty(SerializedProperty property, out FieldInfo fieldInfo)
 | |
|         {
 | |
|             return k_PropertyFieldInfoCache.TryGetValue(new PropertyKey(property), out fieldInfo);
 | |
|         }
 | |
| 
 | |
|         public static void SetFieldInfoForProperty(SerializedProperty property, FieldInfo fieldInfo)
 | |
|         {
 | |
|             k_PropertyFieldInfoCache[new PropertyKey(property)] = fieldInfo;
 | |
|         }
 | |
| 
 | |
|         public static bool TryGetIsPropertyAnimatable(SerializedProperty property, out bool isAnimatable)
 | |
|         {
 | |
|             return k_PropertyIsAnimatableCache.TryGetValue(new PropertyKey(property), out isAnimatable);
 | |
|         }
 | |
| 
 | |
|         public static void SetIsPropertyAnimatable(SerializedProperty property, bool isAnimatable)
 | |
|         {
 | |
|             k_PropertyIsAnimatableCache[new PropertyKey(property)] = isAnimatable;
 | |
|         }
 | |
| 
 | |
|         public static bool TryGetBindingName(Type type, string path, out string bindingName)
 | |
|         {
 | |
|             return k_BindingNameCache.TryGetValue(new PropertyKey(type, path), out bindingName);
 | |
|         }
 | |
| 
 | |
|         public static void SetBindingName(Type type, string path, string bindingName)
 | |
|         {
 | |
|             k_BindingNameCache[new PropertyKey(type, path)] = bindingName;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     struct PropertyKey : IEquatable<PropertyKey>
 | |
|     {
 | |
|         readonly Type m_Type;
 | |
|         readonly string m_Path;
 | |
| 
 | |
|         public PropertyKey(SerializedProperty property)
 | |
|         {
 | |
|             m_Type = property.serializedObject.targetObject.GetType();
 | |
|             m_Path = property.propertyPath;
 | |
|         }
 | |
| 
 | |
|         public PropertyKey(Type type, string path)
 | |
|         {
 | |
|             m_Type = type;
 | |
|             m_Path = path;
 | |
|         }
 | |
| 
 | |
|         public bool Equals(PropertyKey other)
 | |
|         {
 | |
|             return m_Type == other.m_Type && string.Equals(m_Path, other.m_Path);
 | |
|         }
 | |
| 
 | |
|         public override bool Equals(object obj)
 | |
|         {
 | |
|             if (ReferenceEquals(null, obj)) return false;
 | |
|             return obj is PropertyKey && Equals((PropertyKey)obj);
 | |
|         }
 | |
| 
 | |
|         public override int GetHashCode()
 | |
|         {
 | |
|             unchecked
 | |
|             {
 | |
|                 return ((m_Type != null ? m_Type.GetHashCode() : 0) * 397) ^ (m_Path != null ? m_Path.GetHashCode() : 0);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |