public static bool HasKey(IEnumerable <PropertyModification> modifications, UnityEngine.Object target, WindowState state) { AnimationClip clip; double keyTime; bool inRange; if (!GetClipAndRelativeTime(target, state, out clip, out keyTime, out inRange)) { return(false); } return(GetKeyTimes(target, modifications, state).Any(t => (CurveEditUtility.KeyCompare((float)state.editSequence.time, (float)t, clip.frameRate) == 0))); }
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); } }