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