UnityEditor.QuaternionCurveTangentCalculation.CalculateSmoothTangent C# (CSharp) Method

CalculateSmoothTangent() public method

public CalculateSmoothTangent ( int index, int component ) : float
index int
component int
return float
        public float CalculateSmoothTangent(int index, int component)
        {
            AnimationCurve curve = this.GetCurve(component);
            if (curve.length < 2)
            {
                return 0f;
            }
            if (index <= 0)
            {
                return this.CalculateLinearTangent(curve[0], curve[1], component);
            }
            if (index >= (curve.length - 1))
            {
                return this.CalculateLinearTangent(curve[curve.length - 1], curve[curve.length - 2], component);
            }
            Keyframe keyframe = curve[index - 1];
            float time = keyframe.time;
            Keyframe keyframe2 = curve[index];
            float num3 = keyframe2.time;
            Keyframe keyframe3 = curve[index + 1];
            float num4 = keyframe3.time;
            Vector3 euler = this.EvaluateEulerCurvesDirectly(time);
            Vector3 vector2 = this.EvaluateEulerCurvesDirectly(num3);
            Vector3 vector3 = this.EvaluateEulerCurvesDirectly(num4);
            Quaternion quaternion = Quaternion.Euler(euler);
            Quaternion quaternion2 = Quaternion.Euler(vector2);
            Quaternion quaternion3 = Quaternion.Euler(vector3);
            if (((((quaternion.x * quaternion2.x) + (quaternion.y * quaternion2.y)) + (quaternion.z * quaternion2.z)) + (quaternion.w * quaternion2.w)) < 0f)
            {
                quaternion = new Quaternion(-quaternion.x, -quaternion.y, -quaternion.z, -quaternion.w);
            }
            if (((((quaternion3.x * quaternion2.x) + (quaternion3.y * quaternion2.y)) + (quaternion3.z * quaternion2.z)) + (quaternion3.w * quaternion2.w)) < 0f)
            {
                quaternion3 = new Quaternion(-quaternion3.x, -quaternion3.y, -quaternion3.z, -quaternion3.w);
            }
            Quaternion quaternion4 = new Quaternion();
            float dx = num3 - time;
            float num6 = num4 - num3;
            for (int i = 0; i < 4; i++)
            {
                float dy = quaternion2[i] - quaternion[i];
                float num9 = quaternion3[i] - quaternion2[i];
                float num10 = SafeDeltaDivide(dy, dx);
                float num11 = SafeDeltaDivide(num9, num6);
                quaternion4[i] = (0.5f * num10) + (0.5f * num11);
            }
            float num12 = Mathf.Abs((float) (num4 - time)) * 0.01f;
            Quaternion q = new Quaternion(quaternion2.x - (quaternion4.x * num12), quaternion2.y - (quaternion4.y * num12), quaternion2.z - (quaternion4.z * num12), quaternion2.w - (quaternion4.w * num12));
            Quaternion quaternion6 = new Quaternion(quaternion2.x + (quaternion4.x * num12), quaternion2.y + (quaternion4.y * num12), quaternion2.z + (quaternion4.z * num12), quaternion2.w + (quaternion4.w * num12));
            Vector3 eulerFromQuaternion = GetEulerFromQuaternion(q, vector2);
            Vector3 vector6 = (Vector3) ((GetEulerFromQuaternion(quaternion6, vector2) - eulerFromQuaternion) / (num12 * 2f));
            return vector6[component];
        }