private static void RemoveFloatKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time)
        {
            List <AnimationCurve>     list      = new List <AnimationCurve>();
            List <EditorCurveBinding> list2     = new List <EditorCurveBinding>();
            AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);

            for (int i = 0; i < curveInfo.bindings.Length; i++)
            {
                EditorCurveBinding item = curveInfo.bindings[i];
                if (item.get_type() == sourceBind.get_type())
                {
                    SerializedProperty serializedProperty = null;
                    AnimationCurve     animationCurve     = curveInfo.curves[i];
                    if (prop.get_propertyPath().Equals(item.propertyName))
                    {
                        serializedProperty = prop;
                    }
                    else if (item.propertyName.Contains(prop.get_propertyPath()))
                    {
                        serializedProperty = prop.get_serializedObject().FindProperty(item.propertyName);
                    }
                    if (serializedProperty != null)
                    {
                        CurveEditUtility.RemoveKeyFrameFromCurve(animationCurve, (float)time, clip.get_frameRate());
                        list.Add(animationCurve);
                        list2.Add(item);
                    }
                }
            }
            CurveEditUtility.UpdateEditorCurves(clip, list2, list);
        }
Example #2
0
        public AnimationClipCurveInfo GetCurveInfo(AnimationClip clip)
        {
            AnimationClipCurveInfo result;

            if (clip == null)
            {
                result = null;
            }
            else
            {
                AnimationClipCurveInfo animationClipCurveInfo;
                if (!this.m_ClipCache.TryGetValue(clip, out animationClipCurveInfo))
                {
                    animationClipCurveInfo       = new AnimationClipCurveInfo();
                    animationClipCurveInfo.dirty = true;
                    this.m_ClipCache[clip]       = animationClipCurveInfo;
                }
                if (animationClipCurveInfo.dirty)
                {
                    animationClipCurveInfo.Update(clip);
                }
                result = animationClipCurveInfo;
            }
            return(result);
        }
 private static void RemoveRotationKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time)
 {
     if (prop.get_propertyType() == 17)
     {
         List <AnimationCurve>     list      = new List <AnimationCurve>();
         List <EditorCurveBinding> list2     = new List <EditorCurveBinding>();
         AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
         for (int i = 0; i < curveInfo.bindings.Length; i++)
         {
             if (sourceBind.get_type() == curveInfo.bindings[i].get_type())
             {
                 if (curveInfo.bindings[i].propertyName.Contains("localEuler"))
                 {
                     list2.Add(curveInfo.bindings[i]);
                     list.Add(curveInfo.curves[i]);
                 }
             }
         }
         foreach (AnimationCurve current in list)
         {
             CurveEditUtility.RemoveKeyFrameFromCurve(current, (float)time, clip.get_frameRate());
         }
         CurveEditUtility.UpdateEditorCurves(clip, list2, list);
     }
 }
 private static void AddRotationKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time)
 {
     if (prop.get_propertyType() == 17)
     {
         List <AnimationCurve>     list      = new List <AnimationCurve>();
         List <EditorCurveBinding> list2     = new List <EditorCurveBinding>();
         AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
         for (int i = 0; i < curveInfo.bindings.Length; i++)
         {
             if (sourceBind.get_type() == curveInfo.bindings[i].get_type())
             {
                 if (curveInfo.bindings[i].propertyName.Contains("localEuler"))
                 {
                     list2.Add(curveInfo.bindings[i]);
                     list.Add(curveInfo.curves[i]);
                 }
             }
         }
         Vector3 localEulerAngles = ((Transform)prop.get_serializedObject().get_targetObject()).get_localEulerAngles();
         if (list2.Count == 0)
         {
             string propertyGroupName = AnimationWindowUtility.GetPropertyGroupName(sourceBind.propertyName);
             list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".x"));
             list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".y"));
             list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".z"));
             AnimationCurve animationCurve  = new AnimationCurve();
             AnimationCurve animationCurve2 = new AnimationCurve();
             AnimationCurve animationCurve3 = new AnimationCurve();
             CurveEditUtility.AddKeyFrameToCurve(animationCurve, (float)time, clip.get_frameRate(), localEulerAngles.x, false);
             CurveEditUtility.AddKeyFrameToCurve(animationCurve2, (float)time, clip.get_frameRate(), localEulerAngles.y, false);
             CurveEditUtility.AddKeyFrameToCurve(animationCurve3, (float)time, clip.get_frameRate(), localEulerAngles.z, false);
             list.Add(animationCurve);
             list.Add(animationCurve2);
             list.Add(animationCurve3);
         }
         for (int j = 0; j < list2.Count; j++)
         {
             char  c     = list2[j].propertyName.Last <char>();
             float value = localEulerAngles.x;
             if (c == 'y')
             {
                 value = localEulerAngles.y;
             }
             else if (c == 'z')
             {
                 value = localEulerAngles.z;
             }
             CurveEditUtility.AddKeyFrameToCurve(list[j], (float)time, clip.get_frameRate(), value, false);
         }
         CurveEditUtility.UpdateEditorCurves(clip, list2, list);
     }
 }
 public float[] GetKeys()
 {
     float[] result;
     if (this.m_Track == null || this.m_Track.animClip == null)
     {
         result = null;
     }
     else
     {
         AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(this.m_Track.animClip);
         result = (from x in curveInfo.keyTimes
                   select x + (float)this.m_Track.openClipTimeOffset).ToArray <float>();
     }
     return(result);
 }
        public static void RemoveObjectKey(AnimationClip clip, EditorCurveBinding sourceBinding, double time)
        {
            AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
            int num = Array.IndexOf <EditorCurveBinding>(curveInfo.objectBindings, sourceBinding);

            if (num >= 0)
            {
                ObjectReferenceKeyframe[] array = curveInfo.objectCurves[num];
                int keyframeAtTime = CurveEditUtility.GetKeyframeAtTime(array, (float)time, clip.get_frameRate());
                if (keyframeAtTime >= 0)
                {
                    ArrayUtility.RemoveAt <ObjectReferenceKeyframe>(ref array, keyframeAtTime);
                    AnimationUtility.SetObjectReferenceCurve(clip, sourceBinding, array);
                    EditorUtility.SetDirty(clip);
                }
            }
        }
 private static void AddObjectKey(AnimationClip clip, EditorCurveBinding sourceBinding, SerializedProperty prop, double time)
 {
     if (prop.get_propertyType() == 5)
     {
         ObjectReferenceKeyframe[] array     = null;
         AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
         int num = Array.IndexOf <EditorCurveBinding>(curveInfo.objectBindings, sourceBinding);
         if (num >= 0)
         {
             array = curveInfo.objectCurves[num];
             int num2 = CurveEditUtility.EvaluateIndex(array, (float)time);
             if (CurveEditUtility.KeyCompare(array[num2].time, (float)time, clip.get_frameRate()) == 0)
             {
                 array[num2].value = prop.get_objectReferenceValue();
             }
             else if (num2 < array.Length - 1 && CurveEditUtility.KeyCompare(array[num2 + 1].time, (float)time, clip.get_frameRate()) == 0)
             {
                 array[num2 + 1].value = prop.get_objectReferenceValue();
             }
             else
             {
                 if (time > (double)array[0].time)
                 {
                     num2++;
                 }
                 ArrayUtility.Insert <ObjectReferenceKeyframe>(ref array, num2, new ObjectReferenceKeyframe
                 {
                     time  = (float)time,
                     value = prop.get_objectReferenceValue()
                 });
             }
         }
         else
         {
             array          = new ObjectReferenceKeyframe[1];
             array[0].time  = (float)time;
             array[0].value = prop.get_objectReferenceValue();
         }
         AnimationUtility.SetObjectReferenceCurve(clip, sourceBinding, array);
         EditorUtility.SetDirty(clip);
     }
 }
Example #8
0
        public AnimationClipCurveInfo GetCurveInfo(AnimationClip clip)
        {
            AnimationClipCurveInfo data;

            if (clip == null)
            {
                return(null);
            }
            if (!m_ClipCache.TryGetValue(clip, out data))
            {
                data              = new AnimationClipCurveInfo();
                data.dirty        = true;
                m_ClipCache[clip] = data;
            }
            if (data.dirty)
            {
                data.Update(clip);
            }
            return(data);
        }
 public static void RemoveCurves(AnimationClip clip, SerializedProperty prop)
 {
     if (!(clip == null) && prop != null)
     {
         List <EditorCurveBinding> list      = new List <EditorCurveBinding>();
         AnimationClipCurveInfo    curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);
         for (int i = 0; i < curveInfo.bindings.Length; i++)
         {
             EditorCurveBinding item = curveInfo.bindings[i];
             if (prop.get_propertyPath().Equals(item.propertyName) || item.propertyName.Contains(prop.get_propertyPath()))
             {
                 list.Add(item);
             }
         }
         for (int j = 0; j < list.Count; j++)
         {
             AnimationUtility.SetEditorCurve(clip, list[j], null);
         }
     }
 }
        public Dictionary <float, string> GetDescriptions()
        {
            Dictionary <float, string> dictionary = new Dictionary <float, string>();
            AnimationClipCurveInfo     curveInfo  = AnimationClipCurveCache.Instance.GetCurveInfo(this.m_Track.animClip);
            HashSet <string>           hashSet    = new HashSet <string>();

            EditorCurveBinding[] bindings = curveInfo.bindings;
            for (int i = 0; i < bindings.Length; i++)
            {
                EditorCurveBinding binding = bindings[i];
                string             groupID = binding.GetGroupID();
                if (!hashSet.Contains(groupID))
                {
                    CurveBindingGroup groupBinding = curveInfo.GetGroupBinding(groupID);
                    string            nicePropertyGroupDisplayName = AnimationWindowUtility.GetNicePropertyGroupDisplayName(binding.get_type(), binding.propertyName);
                    float[]           keyTimes = curveInfo.keyTimes;
                    for (int j = 0; j < keyTimes.Length; j++)
                    {
                        float  num  = keyTimes[j];
                        float  num2 = num + (float)this.m_Track.openClipTimeOffset;
                        string text = nicePropertyGroupDisplayName + " : " + groupBinding.GetDescription(num2);
                        if (dictionary.ContainsKey(num2))
                        {
                            Dictionary <float, string> dictionary2;
                            float key;
                            (dictionary2 = dictionary)[key = num2] = dictionary2[key] + '\n' + text;
                        }
                        else
                        {
                            dictionary.Add(num2, text);
                        }
                    }
                    hashSet.Add(groupID);
                }
            }
            return(dictionary);
        }
        private static void AddFloatKey(AnimationClip clip, EditorCurveBinding sourceBind, SerializedProperty prop, double time)
        {
            List <AnimationCurve>     list  = new List <AnimationCurve>();
            List <EditorCurveBinding> list2 = new List <EditorCurveBinding>();
            bool flag = false;
            AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip);

            for (int i = 0; i < curveInfo.bindings.Length; i++)
            {
                EditorCurveBinding item = curveInfo.bindings[i];
                if (item.get_type() == sourceBind.get_type())
                {
                    SerializedProperty serializedProperty = null;
                    AnimationCurve     animationCurve     = curveInfo.curves[i];
                    if (prop.get_propertyPath().Equals(item.propertyName))
                    {
                        serializedProperty = prop;
                    }
                    else if (item.propertyName.Contains(prop.get_propertyPath()))
                    {
                        serializedProperty = prop.get_serializedObject().FindProperty(item.propertyName);
                    }
                    if (serializedProperty != null)
                    {
                        float keyValue = CurveEditUtility.GetKeyValue(serializedProperty);
                        if (!float.IsNaN(keyValue))
                        {
                            flag = true;
                            CurveEditUtility.AddKeyFrameToCurve(animationCurve, (float)time, clip.get_frameRate(), keyValue, serializedProperty.get_propertyType() == 1);
                            list.Add(animationCurve);
                            list2.Add(item);
                        }
                    }
                }
            }
            if (!flag)
            {
                string propertyGroupName = AnimationWindowUtility.GetPropertyGroupName(sourceBind.propertyName);
                if (!prop.get_hasChildren())
                {
                    float keyValue2 = CurveEditUtility.GetKeyValue(prop);
                    if (!float.IsNaN(keyValue2))
                    {
                        list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), sourceBind.propertyName));
                        AnimationCurve animationCurve2 = new AnimationCurve();
                        CurveEditUtility.AddKeyFrameToCurve(animationCurve2, (float)time, clip.get_frameRate(), keyValue2, prop.get_propertyType() == 1);
                        list.Add(animationCurve2);
                    }
                }
                else if (prop.get_propertyType() == 4)
                {
                    list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".r"));
                    list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".g"));
                    list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".b"));
                    list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), propertyGroupName + ".a"));
                    Color colorValue = prop.get_colorValue();
                    for (int j = 0; j < 4; j++)
                    {
                        AnimationCurve animationCurve3 = new AnimationCurve();
                        CurveEditUtility.AddKeyFrameToCurve(animationCurve3, (float)time, clip.get_frameRate(), colorValue.get_Item(j), prop.get_propertyType() == 1);
                        list.Add(animationCurve3);
                    }
                }
                else
                {
                    prop = prop.Copy();
                    IEnumerator enumerator = prop.GetEnumerator();
                    try
                    {
                        while (enumerator.MoveNext())
                        {
                            SerializedProperty serializedProperty2 = (SerializedProperty)enumerator.Current;
                            list2.Add(EditorCurveBinding.FloatCurve(sourceBind.path, sourceBind.get_type(), serializedProperty2.get_propertyPath()));
                            AnimationCurve animationCurve4 = new AnimationCurve();
                            CurveEditUtility.AddKeyFrameToCurve(animationCurve4, (float)time, clip.get_frameRate(), CurveEditUtility.GetKeyValue(serializedProperty2), serializedProperty2.get_propertyType() == 1);
                            list.Add(animationCurve4);
                        }
                    }
                    finally
                    {
                        IDisposable disposable;
                        if ((disposable = (enumerator as IDisposable)) != null)
                        {
                            disposable.Dispose();
                        }
                    }
                }
            }
            CurveEditUtility.UpdateEditorCurves(clip, list2, list);
        }
        private static void PreparePlayableAsset(ClipInspector.EditorClipSelection selectedItem)
        {
            if (Event.get_current().get_type() == 7)
            {
                if (selectedItem.playableAssetObject != null)
                {
                    TimelineClip clip = selectedItem.clip;
                    if (clip != null && !(clip.curves == null))
                    {
                        TimelineWindow instance = TimelineWindow.instance;
                        if (!(instance == null) && instance.state != null)
                        {
                            if (!instance.state.previewMode)
                            {
                                selectedItem.lastEvalTime = -1.0;
                            }
                            else
                            {
                                double num = instance.state.time;
                                num = clip.ToLocalTime(num);
                                if (selectedItem.lastEvalTime == num)
                                {
                                    int version = AnimationClipCurveCache.Instance.GetCurveInfo(clip.curves).version;
                                    if (version == selectedItem.lastCurveVersion)
                                    {
                                        return;
                                    }
                                    selectedItem.lastCurveVersion = version;
                                }
                                selectedItem.lastEvalTime = num;
                                AnimationClipCurveInfo curveInfo = AnimationClipCurveCache.Instance.GetCurveInfo(clip.curves);
                                if (curveInfo.bindings.Length != 0)
                                {
                                    selectedItem.playableAssetObject.Update();
                                    SerializedProperty iterator = selectedItem.playableAssetObject.GetIterator();
                                    while (iterator.NextVisible(true))
                                    {
                                        if (clip.IsParameterAnimated(iterator.get_propertyPath()))
                                        {
                                            AnimationCurve         animatedParameter = clip.GetAnimatedParameter(iterator.get_propertyPath());
                                            SerializedPropertyType propertyType      = iterator.get_propertyType();
                                            switch (propertyType)
                                            {
                                            case 0:
                                                iterator.set_intValue(Mathf.FloorToInt(animatedParameter.Evaluate((float)num)));
                                                continue;

                                            case 1:
                                                iterator.set_boolValue(animatedParameter.Evaluate((float)num) > 0f);
                                                continue;

                                            case 2:
                                                iterator.set_floatValue(animatedParameter.Evaluate((float)num));
                                                continue;

                                            case 3:
                                            case 5:
                                            case 6:
                                            case 7:
IL_18C:
                                                if (propertyType != 17)
                                                {
                                                    continue;
                                                }
                                                goto IL_222;

                                            case 4:
                                                ClipInspector.SetAnimatedValue(clip, iterator, "r", num);
                                                ClipInspector.SetAnimatedValue(clip, iterator, "g", num);
                                                ClipInspector.SetAnimatedValue(clip, iterator, "b", num);
                                                ClipInspector.SetAnimatedValue(clip, iterator, "a", num);
                                                continue;

                                            case 8:
                                                goto IL_248;

                                            case 9:
                                                goto IL_235;

                                            case 10:
                                                goto IL_222;
                                            }
                                            goto IL_18C;
                                            continue;
IL_248:
                                            ClipInspector.SetAnimatedValue(clip, iterator, "x", num);
                                            ClipInspector.SetAnimatedValue(clip, iterator, "y", num);
                                            continue;
IL_235:
                                            ClipInspector.SetAnimatedValue(clip, iterator, "z", num);
                                            goto IL_248;
IL_222:
                                            ClipInspector.SetAnimatedValue(clip, iterator, "w", num);
                                            goto IL_235;
                                        }
                                    }
                                    selectedItem.playableAssetObject.ApplyModifiedPropertiesWithoutUndo();
                                }
                            }
                        }
                    }
                }
            }
        }