Beispiel #1
0
        private bool CalcAutoRotation(
            FakeTransform _ftransBlend,
            FakeTransform _ftransBase,
            Transform _transRef,
            CSwayParamDetail _Detail)
        {
            Quaternion.get_identity();
            float  num1 = 1f;
            float  num2 = 1f;
            double num3;
            float  num4 = (float)(num3 = 1.0);
            float  num5 = 0.0f;

            num4 = 0.0f;
            float num6 = Vector3.Dot(Vector3.get_up(), _transRef.get_up());
            float num7 = Vector3.Dot(Vector3.get_up(), _transRef.get_forward());
            float num8 = Vector3.Dot(Vector3.get_up(), _transRef.get_right());
            float num9 = Mathf.Abs(num6);

            if ((double)num7 > 0.0)
            {
                num1 = -1f;
            }
            float num10 = Mathf.Abs(num7);

            if ((double)num8 > 0.0)
            {
                num2 = -1f;
            }
            float num11     = Mathf.Abs(num8);
            float num12     = Mathf.InverseLerp(1f, 0.0f, num9) * Mathf.InverseLerp(0.0f, 1f, num11);
            float fAutoRot1 = _Detail.fAutoRot;

            if ((double)num2 < 0.0)
            {
                fAutoRot1 *= -1f;
            }
            float num13 = Mathf.Lerp(0.0f, fAutoRot1, num12);

            if (!_Detail.bAutoRotUp || (double)num1 > 0.0)
            {
                float num14     = Mathf.InverseLerp(1f, 0.0f, num9) * Mathf.InverseLerp(0.0f, 1f, num10);
                float fAutoRot2 = _Detail.fAutoRot;
                if (!((double)num1 <= 0.0 ? !this.m_bLR : this.m_bLR))
                {
                    fAutoRot2 *= -1f;
                }
                num5 = Mathf.Lerp(0.0f, fAutoRot2, num14);
            }
            Quaternion quaternion = Quaternion.AngleAxis(MathfEx.ToDegree(num5 + num13), Vector3.get_up());

            _ftransBlend.Rot   = Quaternion.op_Multiply(_ftransBase.Rot, quaternion);
            _ftransBlend.Pos   = _ftransBase.Pos;
            _ftransBlend.Scale = _ftransBase.Scale;
            return(true);
        }