public static CurveWrapper GetCurveWrapper(AnimationWindowCurve curve, AnimationClip clip) { CurveWrapper curveWrapper = new CurveWrapper(); curveWrapper.renderer = (CurveRenderer) new NormalCurveRenderer(curve.ToAnimationCurve()); curveWrapper.renderer.SetWrap(WrapMode.Once, !clip.isLooping ? WrapMode.Once : WrapMode.Loop); curveWrapper.renderer.SetCustomRange(clip.startTime, clip.stopTime); curveWrapper.binding = curve.binding; curveWrapper.id = CurveUtility.GetCurveID(clip, curve.binding); curveWrapper.color = CurveUtility.GetPropertyColor(curve.propertyName); curveWrapper.hidden = false; return(curveWrapper); }
private GenericMenu GenerateMenu(List <AnimationWindowHierarchyNode> interactedNodes) { List <AnimationWindowCurve> curvesAffectedByNodes = this.GetCurvesAffectedByNodes(interactedNodes, false); List <AnimationWindowCurve> list2 = this.GetCurvesAffectedByNodes(interactedNodes, true); bool flag = (curvesAffectedByNodes.Count == 1) && AnimationWindowUtility.ForceGrouping(curvesAffectedByNodes[0].binding); GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent(((curvesAffectedByNodes.Count <= 1) && !flag) ? "Remove Property" : "Remove Properties"), false, new GenericMenu.MenuFunction(this.RemoveCurvesFromSelectedNodes)); bool flag2 = true; EditorCurveBinding[] curves = new EditorCurveBinding[list2.Count]; for (int i = 0; i < list2.Count; i++) { curves[i] = list2[i].binding; } RotationCurveInterpolation.Mode rotationInterpolationMode = this.GetRotationInterpolationMode(curves); if (rotationInterpolationMode == RotationCurveInterpolation.Mode.Undefined) { flag2 = false; } else { foreach (AnimationWindowHierarchyNode node in interactedNodes) { if (!(node is AnimationWindowHierarchyPropertyGroupNode)) { flag2 = false; } } } if (flag2) { menu.AddItem(new GUIContent("Interpolation/Euler Angles"), rotationInterpolationMode == RotationCurveInterpolation.Mode.RawEuler, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), RotationCurveInterpolation.Mode.RawEuler); menu.AddItem(new GUIContent("Interpolation/Euler Angles (Quaternion Approximation)"), rotationInterpolationMode == RotationCurveInterpolation.Mode.Baked, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), RotationCurveInterpolation.Mode.Baked); menu.AddItem(new GUIContent("Interpolation/Quaternion"), rotationInterpolationMode == RotationCurveInterpolation.Mode.NonBaked, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), RotationCurveInterpolation.Mode.NonBaked); } if (AnimationMode.InAnimationMode()) { menu.AddSeparator(string.Empty); bool flag3 = true; bool flag4 = true; bool flag5 = true; foreach (AnimationWindowCurve curve in curvesAffectedByNodes) { if (!curve.HasKeyframe(this.state.time)) { flag3 = false; } else { flag4 = false; if (!curve.isPPtrCurve) { flag5 = false; } } } string text = "Add Key"; if (flag3) { menu.AddDisabledItem(new GUIContent(text)); } else { menu.AddItem(new GUIContent(text), false, new GenericMenu.MenuFunction2(this.AddKeysAtCurrentTime), curvesAffectedByNodes); } text = "Delete Key"; if (flag4) { menu.AddDisabledItem(new GUIContent(text)); } else { menu.AddItem(new GUIContent(text), false, new GenericMenu.MenuFunction2(this.DeleteKeysAtCurrentTime), curvesAffectedByNodes); } if (flag5) { return(menu); } menu.AddSeparator(string.Empty); List <KeyIdentifier> list3 = new List <KeyIdentifier>(); foreach (AnimationWindowCurve curve2 in curvesAffectedByNodes) { if (!curve2.isPPtrCurve) { int keyframeIndex = curve2.GetKeyframeIndex(this.state.time); if (keyframeIndex != -1) { CurveRenderer curveRenderer = CurveRendererCache.GetCurveRenderer(this.state.activeAnimationClip, curve2.binding); int curveID = CurveUtility.GetCurveID(this.state.activeAnimationClip, curve2.binding); list3.Add(new KeyIdentifier(curveRenderer, curveID, keyframeIndex)); } } } } return(menu); }
private GenericMenu GenerateMenu(List <AnimationWindowHierarchyNode> interactedNodes) { List <AnimationWindowCurve> curvesAffectedByNodes1 = this.GetCurvesAffectedByNodes(interactedNodes, false); List <AnimationWindowCurve> curvesAffectedByNodes2 = this.GetCurvesAffectedByNodes(interactedNodes, true); bool flag1 = curvesAffectedByNodes1.Count == 1 && AnimationWindowUtility.ForceGrouping(curvesAffectedByNodes1[0].binding); GenericMenu genericMenu = new GenericMenu(); genericMenu.AddItem(new GUIContent(curvesAffectedByNodes1.Count > 1 || flag1 ? "Remove Properties" : "Remove Property"), false, new GenericMenu.MenuFunction(this.RemoveCurvesFromSelectedNodes)); bool flag2 = true; EditorCurveBinding[] curves = new EditorCurveBinding[curvesAffectedByNodes2.Count]; for (int index = 0; index < curvesAffectedByNodes2.Count; ++index) { curves[index] = curvesAffectedByNodes2[index].binding; } RotationCurveInterpolation.Mode interpolationMode = this.GetRotationInterpolationMode(curves); if (interpolationMode == RotationCurveInterpolation.Mode.Undefined) { flag2 = false; } else { using (List <AnimationWindowHierarchyNode> .Enumerator enumerator = interactedNodes.GetEnumerator()) { while (enumerator.MoveNext()) { if (!(enumerator.Current is AnimationWindowHierarchyPropertyGroupNode)) { flag2 = false; } } } } if (flag2) { string str = !this.state.activeAnimationClip.legacy ? string.Empty : " (Not fully supported in Legacy)"; genericMenu.AddItem(new GUIContent("Interpolation/Euler Angles" + str), interpolationMode == RotationCurveInterpolation.Mode.RawEuler, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), (object)RotationCurveInterpolation.Mode.RawEuler); genericMenu.AddItem(new GUIContent("Interpolation/Euler Angles (Quaternion Approximation)"), interpolationMode == RotationCurveInterpolation.Mode.Baked, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), (object)RotationCurveInterpolation.Mode.Baked); genericMenu.AddItem(new GUIContent("Interpolation/Quaternion"), interpolationMode == RotationCurveInterpolation.Mode.NonBaked, new GenericMenu.MenuFunction2(this.ChangeRotationInterpolation), (object)RotationCurveInterpolation.Mode.NonBaked); } if (AnimationMode.InAnimationMode()) { genericMenu.AddSeparator(string.Empty); bool flag3 = true; bool flag4 = true; bool flag5 = true; using (List <AnimationWindowCurve> .Enumerator enumerator = curvesAffectedByNodes1.GetEnumerator()) { while (enumerator.MoveNext()) { AnimationWindowCurve current = enumerator.Current; if (!current.HasKeyframe(this.state.time)) { flag3 = false; } else { flag4 = false; if (!current.isPPtrCurve) { flag5 = false; } } } } string text1 = "Add Key"; if (flag3) { genericMenu.AddDisabledItem(new GUIContent(text1)); } else { genericMenu.AddItem(new GUIContent(text1), false, new GenericMenu.MenuFunction2(this.AddKeysAtCurrentTime), (object)curvesAffectedByNodes1); } string text2 = "Delete Key"; if (flag4) { genericMenu.AddDisabledItem(new GUIContent(text2)); } else { genericMenu.AddItem(new GUIContent(text2), false, new GenericMenu.MenuFunction2(this.DeleteKeysAtCurrentTime), (object)curvesAffectedByNodes1); } if (!flag5) { genericMenu.AddSeparator(string.Empty); List <KeyIdentifier> keyIdentifierList = new List <KeyIdentifier>(); using (List <AnimationWindowCurve> .Enumerator enumerator = curvesAffectedByNodes1.GetEnumerator()) { while (enumerator.MoveNext()) { AnimationWindowCurve current = enumerator.Current; if (!current.isPPtrCurve) { int keyframeIndex = current.GetKeyframeIndex(this.state.time); if (keyframeIndex != -1) { CurveRenderer curveRenderer = CurveRendererCache.GetCurveRenderer(this.state.activeAnimationClip, current.binding); int curveId = CurveUtility.GetCurveID(this.state.activeAnimationClip, current.binding); keyIdentifierList.Add(new KeyIdentifier(curveRenderer, curveId, keyframeIndex)); } } } } } } return(genericMenu); }