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